실행 환경
- Ubuntu 20.04
- MySQL 8.0.3
- bash
설정 파일 위치 확인
다음 명령을 실행하여 mysql이 설정 파일을 찾는 경로 우선순위를 확인한다.
# -A 1 옵션은 찾은 라인의 다음 줄 1개를 같이 출력하는 옵션
mysql --help | grep -A 1 "Default options"
아래와 같이 출력되면 순서대로 설정 파일이 적용된다. 가장 마지막에 읽은 설정이 최종적으로 적용된다.
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
- /etc/my.cnf
- /etc/mysql/my.cnf
- ~/.my.cnf : 유저 홈 디렉토리의 설정이 가장 높은 우선 순위를 가짐
파일을 순서대로 찾아보면, 하나의 파일만 생성되어 있음을 알 수 있다. (사용자 환경에 따라 다를 수 있음)
$ ls /etc/my.cnf
ls: cannot access '/etc/my.cnf': No such file or directory
$ ls /etc/mysql/my.cnf
/etc/mysql/my.cnf
$ ls ~/.my.cnf
ls: cannot access '/home/username/.my.cnf': No such file or directory
이 경우는 /etc/mysql/my.cnf 파일을 수정한다. 해당 파일을 열어보면 아래와 같이 설정 파일을 추가하는 형식으로 되어 있다.
# 일반적으로 클라이언트 도구 설정을 포함
!includedir /etc/mysql/conf.d/
# 서버 설정을 포함
!includedir /etc/mysql/mysql.conf.d/
결론적으로 위 2개의 디렉토리 안에 있는 모든 .cnf 파일이 순서대로 적용 된다.
각 디렉토리에 위치한 파일은 이름 순서대로 적용되며, 이름 자체에 기능적 의미는 없다.
$ ls /etc/mysql/conf.d/
mysql.cnf mysqldump.cnf
$ ls /etc/mysql/mysql.conf.d/
mysql.cnf mysqld.cnf
mysqld.cnf 파일이 서버 설정 핵심파일이다. 이 파일의 내용을 수정하여 sql_model를 변경한다.
현재 설정 값 확인
mysqld.cnf 파일을 열어 [mysqld] 섹션에 sql_mode가 포함된 라인을 찾는다.
만약 없는 경우, 기본값을 사용하고 있을 수 있으니 cli 접속 후 현재 설정을 확인해야 한다.
mysql> select @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
현재 설정 값을 복사하여 cnf 파일 편집 준비를 한다.
설정 파일 편집
/etc/mysql/mysql.conf.d/mysqld.cnf 파일을 열어 [mysqld] 섹션에서 sql_mode가 포함된 라인을 찾는다.
만약 없는 경우 현재 설정값을 포함하여 추가하면 된다.
이미 존재하는 경우 마지막에 콤마를 추가하고 ONLY_FULL_GROUP_BY 값을 추가한다.
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY
mysql 서비스를 재시작 한다.
sudo systemctl restart mysql
다시 sql_mode를 조회하면 아래와 같이 옵션이 적용된 것을 확인할 수 있다.
mysql> select @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+'Software Engineering > MySQL' 카테고리의 다른 글
| [MySQL] 사용자 계정 생성 및 권한 관리 방법 (1) | 2025.02.04 |
|---|---|
| MySQL 8.0 계정 비밀 번호 변경 방법 (4) | 2024.07.11 |
| mysql MHA 참고 자료 (1) | 2024.06.29 |