본문 바로가기
Backend/Mysql

[MySQL] MySQL 설치 후 Database 생성하기

by 제이동 개발자 2025. 4. 5.
728x90

[MySQL] MySQL 설치 후 Database 생성

1. 데이터베이스 생성

CREATE DATABASE my_database
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_0900_as_cs;
  • 'my_database' : 만들고자 하는 DB 이름
  • 'utf8mb4' : 이모지까지 지원하는 문자 인코딩(표준)
  • 'utf8mb4_0900_as_cs' : 유니코드 9.0 기준, 대소문자 구분

 문자 인코딩은 현재 표준으로 utf8mb4를 사용한다. 따라서 해당 값을 넣어주면 되고 정렬 규칙은 아래  특징에 따라 사용하고자 하는 Collation을 사용하면 된다.

 

Collation 의미 특징
utf8mb4_0900_ai_ci Accent-insensitive, Case-insensitive 기본값. 빠르고 넓은 유니코드 범위 지원
utf8mb4_0900_as_cs Accent-sensitive, Case-sensitive 대소문자 구분 & 악센트 구분
utf8mb4_general_ci 오래된 기본값 빠르지만 유니코드 정확도 떨어짐
utf8mb4_unicode_ci 유니코드 표준 기반 정렬 정확도는 높음, 성능은 조금 느릴 수 있음

 

 

 아래는 utf8mb4_0900_ai_ci 사용 할 때와 utf8mb4_0900_as_cs를 사용했을 때 조회 결과이다.

-- Collation: utf8mb4_0900_ai_ci (Case-insensitive, Accent-insensitive)
CREATE TABLE user_ci
(
    name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci
);

-- Collation: utf8mb4_0900_as_cs (Case-sensitive, Accent-sensitive)
CREATE TABLE user_cs
(
    name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs
);

INSERT INTO user_ci (name)
VALUES ('Jdong'),
       ('jdong'),
       ('Jdöng');
INSERT INTO user_cs (name)
VALUES ('Jdong'),
       ('jdong'),
       ('Jdöng');

-- 1. Case-Insensitive에서 검색
SELECT *
FROM user_ci
WHERE name = 'jdong';

-- 2. Case-Sensitive에서 검색
SELECT *
FROM user_cs
WHERE name = 'jdong';

 

 

결과 비교

Collation 조회 결과
utf8mb4_0900_ai_ci jdong, Jdong, Jdöng 모두 조회 됨
utf8mb4_0900_as_cs Jdong 만 조회 됨

 

 

 

2. 유저 생성

CREATE USER 'my_user'@'localhost' 
    IDENTIFIED BY 'my_password';

 

  • 'my_user' : 생성할 유저 명
  • 'localhost' : 유저가 접속 가능한 위치
  • 'my_password' : 비밀번호
💡 만약 외부에서 접속하도록 허용하고 싶으면 'localhost' 대신 '%' 사용 (예: 'my_user'@'%')

 

 

 만약 아래와 같은 오류가 발생한다면 비밀번호 정책에 위반된다는 뜻이다. 

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

기본적으로 강력한 비밀번호(대소문자 포함, 특수문자 포함, 길이 제한)로 설정되어 있기 때문에 현재 비밀번호 정책에 맞는 비밀번호를 사용하거나 아래와 같이 비밀번호 제약이 느슨한 정책으로 수정하는 방법이 있다. 로컬에서 공부 및 개발 목적이라면 아래 방법을 사용하여 기억하기 쉬운 비밀번호로 설정해도 괜찮다.

# 간단한 비밀번호 정책으로 변경
SET GLOBAL validate_password.policy = LOW;

# 비밀번호 길이 제약조건 변경
SET GLOBAL validate_password.length = 6;

 

 

 

3. 권한 부여

GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'localhost'; # 모든 권한 부여
GRANT SELECT ON my_database.* TO 'my_user'@'localhost'; # 조회 권한만 부여

 

  • 'my_database.*' : my_database DB 내 모든 테이블을 대상
  • 'ALL PRIVILEGES' : SELECT, INSERT, UPDATE 등 모든 권한 부여

 주요 권한

권한 설명
SELECT 데이터 조회 가능
INSERT 데이터 삽입 가능
UPDATE 데이터 수정 가능
CREATE 테이블, 뷰 등의 객체 생성 가능
DROP 테이블, 뷰 등의 객체 삭제 가능
INDEX 인덱스 생성/삭제 가능
ALTER 테이블 구조 변경 가능
EXECUTE 저장 프로시저 실행 가능
GRANT OPTION 다른 사용자에게 권한을 부여할 수 있음
ALL PRIVILEGES 위 모든 권한 가능

 

 

 

4. 권한 적용

 MySQL은 권한 정보를 캐싱하고 있기 때문에, 변경 사항을 적용하려면 아래 명령어를 실행해야 한다.

FLUSH PRIVILEGES;

 

 

 

 

 

 

 

728x90

'Backend > Mysql' 카테고리의 다른 글

[MySQL] Deadlock(교착 상태) 원인  (0) 2024.10.27
[Mysql] Lock Type  (1) 2024.10.27
[MySQL] index 생성 시 고려할 점  (0) 2024.10.20