-
MySQL my.cnfDatabase 2023. 9. 11. 09:24728x90반응형
소개
my.cnf 라는 이름은 MySQL 의 설정파일의 이름입니다.
cnf 라는 확장자명은 유닉스 환경에서 사용되는 MySQL 설정 파일의 확장자이며,
윈도우 계열에서는 my.ini 라고합니다.
설정 파일은 mysql 의 설정을 위한 내용을 포함하는데요.
mysql 을 구성하는 여러가지 요소들이 존재하기 때문에 각각의 구성요소 별로 설정이 가능합니다.
예를 들어,
[client] default-character-set = utf8 socket=/var/run/mysqld/mysqld.sock [mysqld] bind-address = 0.0.0.0 soket = /var/mysql/mysql.sock port = 3306
위 예시는 client 와 mysqld 의 설정을 각 block 별로 적용합니다.
my.cnf 파일들의 우선순위
my.cnf 파일들은 여러 위치에 존재할 수 있습니다.
/etc/my.cnf , /etc/mysql/my.cnf 등등의 설정 파일들이 존재하는데요.
각 파일들의 설정 우선순위에 대해서 알아보겠습니다.
아래와 같은 명령어를 수행하면 여러 위치에 존재하는 my.cnf 파일을 조회하는 순서를 설명해줍니다.
mysql --help | grep 'given order' -A 5 Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf The following groups are read: mysql client The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file,
1. /etc/my.cnf
2. /etc/mysql/my.cnf
3. /usr/etc/my.cnf
4. ~/.my.cnf 순서로 조회를 합니다.
/etc/my.cnf 가 존재하지 않을 때, /etc/mysql/my.cnf 를 사용하는가?
강제로 /etc/my.cnf 를 없애고, /etc/mysql/my.cnf 를 생성해보겠습니다.
// mysql 실행 docker run -p 3306 --name mysql-source -e MYSQL_ROOT_PASSWORD=1234 -d docker.io/mysql:8 // /etc/my.cnf 을 /etc/mysql/my.cnf 로 이동 docker exec mysql-source mv /etc/my.cnf /etc/mysql/my.cnf // /etc/mysql/my.cnf 에 bind-address 추가 docker exec mysql-source cat /etc/mysql/my.cnf matched_line=$(echo $(docker exec mysql-source grep -Fn '[mysqld]' /etc/mysql/my.cnf) | sed 's/[:].*$//g') docker exec mysql-source sed -i $((matched_line + 1))' i bind-address=127.0.0.2' /etc/mysql/my.cnf docker exec mysql-source cat /etc/mysql/my.cnf // mysql 재시작 docker restart mysql-source docker exec -it mysql-source mysql -u root -p show variables like 'bind_address'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | bind_address | 127.0.0.2 | +---------------+-----------+ 1 row in set (0.01 sec)
설정 파일의 위치를 /etc/mysql/my.cnf 로 변경하고, bind-address 에 127.0.0.2 를 추가하였습니다.
해당 mysql 를 실행하면 /etc/mysql/my.cnf 설정파일을 기반으로 실행됨을 알 수 있습니다.
/etc/my.cnf 와 /etc/mysql/my.cnf 가 동시에 존재하고, bind-address 설정이 다를 때,
/etc/my.cnf 와 /etc/mysql/my.cnf 이 동시에 존재하고
/etc/my.cnf 에는 bind-address = 127.0.0.9
/etc/mysql/my.cnf 에는 bind-address = 127.0.0.2 인 상황입니다.
이때, /etc/mysql/my.cnf 에 있는 설정이 적용됩니다.
// mysql 실행 docker run -p 3306 --name mysql-source -e MYSQL_ROOT_PASSWORD=1234 -d docker.io/mysql:8 // /etc/my.cnf 을 /etc/mysql/my.cnf 로 복사 docker exec mysql-source cp /etc/my.cnf /etc/mysql/my.cnf // /etc/mysql/my.cnf 에 bind-address 추가 docker exec mysql-source cat /etc/my.cnf matched_line=$(echo $(docker exec mysql-source grep -Fn '[mysqld]' /etc/my.cnf) | sed 's/[:].*$//g') docker exec mysql-source sed -i $((matched_line + 1))' i bind-address=127.0.0.9' /etc/my.cnf docker exec mysql-source cat /etc/mysql/my.cnf matched_line=$(echo $(docker exec mysql-source grep -Fn '[mysqld]' /etc/mysql/my.cnf) | sed 's/[:].*$//g') docker exec mysql-source sed -i $((matched_line + 1))' i bind-address=127.0.0.2' /etc/mysql/my.cnf docker exec mysql-source cat /etc/mysql/my.cnf // mysql 재시작 docker restart mysql-source docker exec -it mysql-source mysql -u root -p show variables like 'bind_address'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | bind_address | 127.0.0.2 | +---------------+-----------+ 1 row in set (0.01 sec)
/etc/my.cnf 와 /etc/mysql/my.cnf 가 동시에 존재하고, /etc/my.cnf 만 bind-address 설정이 있을 때
/etc/my.cnf 에 bind-address = 127.0.0.9 설정이 있고,
/etc/mysql/my.cnf 에는 bind-address 설정이 없습니다.
이런 경우에는 /etc/my.cnf 의 bind-address 설정이 적용됩니다.
// mysql 실행 docker run -p 3306 --name mysql-source -e MYSQL_ROOT_PASSWORD=1234 -d docker.io/mysql:8 // /etc/my.cnf 을 /etc/mysql/my.cnf 로 복사 docker exec mysql-source cp /etc/my.cnf /etc/mysql/my.cnf // /etc/mysql/my.cnf 에 bind-address 추가 docker exec mysql-source cat /etc/my.cnf matched_line=$(echo $(docker exec mysql-source grep -Fn '[mysqld]' /etc/my.cnf) | sed 's/[:].*$//g') docker exec mysql-source sed -i $((matched_line + 1))' i bind-address=127.0.0.9' /etc/my.cnf // mysql 재시작 docker restart mysql-source docker exec -it mysql-source mysql -u root -p show variables like 'bind_address'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | bind_address | 127.0.0.9 | +---------------+-----------+ 1 row in set (0.01 sec)
my.cnf 설정
my.cnf 의 각 설정에 대해서 알아보겠습니다
server-id
server id 는 master - slave 구조에서 각 서버의 식별값으로 사용됩니다.
통상적으로 master 는 server-id = 1 를 사용하며
그외 slave 서버들을 다른 숫자를 사용합니다.log-bin
bin log 의 파일명을 설정합니다.
bin-log=binlog 인 경우에,
show variables like '%log_bin%'; +------------------+-----------------------+ | Variable_name | Value | +------------------+-----------------------+ | log_bin_basename | /var/lib/mysql/binlog | +------------------+-----------------------+ show binary logs; +---------------+-----------+-----------+ | Log_name | File_size | Encrypted | +---------------+-----------+-----------+ | binlog.000001 | 3039831 | No | | binlog.000002 | 180 | No | | binlog.000003 | 180 | No | | binlog.000004 | 180 | No | | binlog.000005 | 157 | No | +---------------+-----------+-----------+
binlog.XXX 로 로그파일명이 설정됩니다.
bin-log 변경하기
docker run -p 3306 --name mysql-source -e MYSQL_ROOT_PASSWORD=1234 -d docker.io/mysql:8 docker exec mysql-source cat /etc/my.cnf matched_line=$(echo $(docker exec mysql-source grep -Fn '[mysqld]' /etc/my.cnf) | sed 's/[:].*$//g') docker exec mysql-source sed -i $((matched_line + 1))' i log-bin=test' /etc/my.cnf docker restart mysql-source docker exec -it mysql-source mysql -u root -p show variables like '%log_bin_basename%'; +------------------+---------------------+ | Variable_name | Value | +------------------+---------------------+ | log_bin_basename | /var/lib/mysql/test | +------------------+---------------------+ show binary logs; +-------------+-----------+-----------+ | Log_name | File_size | Encrypted | +-------------+-----------+-----------+ | test.000001 | 157 | No | +-------------+-----------+-----------+
expire-logs-day
반응형'Database' 카테고리의 다른 글
MySQL Lock 이해하기 (0) 2023.09.20 MySQL Replication (0) 2023.09.11 MySQL mysqldump 알아보기 (0) 2023.05.18 Mysql Procedure (0) 2023.05.15 MySQL Tablespace 알아보기 (0) 2023.05.12