MySQL에서 파라메터를 설정할때 시스템 변수는 동적 변수와 정적 변수로 구분한다.
동적 변수의 경우 DB 상에서 바로 설정이 가능하지만 DB 서버 재기동을 하게 될 경우
my.cnf 파일을 다시 읽어 오기때문에 기존 설정값으로 가져 오게된다.
만약 장애 등 긴급 조치시 동적 변수를 설정하고 my.cnf를 설정하지 않게 된다면
다음 재기동시 장애가 다시 발생할 가능성이 크다.
MySQL 8.0 버전에서 이런 문제점을 보안하기 위해 PERSIST 명령이 도입되었다.
이 명령으로 동적변수를 설정시 시스템 변수가 바로 적용되며 my.cnf 대신 별도의 mysqld-auto.cnf 파일에 기록되어 DB가 재기동되어도 해당 파일을 참조하여 읽어 오게 된다.
1. 현재 max_connections 상태
root@localhost:(none) 15:19:35>show global variables like 'max_connections' ;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.00 sec)
root@localhost:(none) 15:19:36>
root@localhost:(none) 15:19:37>
root@localhost:(none) 15:19:37>set global max_connections=300 ;
Query OK, 0 rows affected (0.00 sec)
root@localhost:(none) 15:19:52>
root@localhost:(none) 15:19:54>
root@localhost:(none) 15:19:54>show global variables like 'max_connections' ;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 300 |
+-----------------+-------+
1 row in set (0.01 sec)
2. PERSIST 명령으로 변경하게 되면 다음과 같이 동적 변수가 적용되며 mysqld-auto.cnf 파일도 생성이 된다.
mysqld-auto.cnf 파일은 data 폴더에 생성이 된다.
root@localhost:(none) 15:19:58>
root@localhost:(none) 15:20:02>set persist max_connections=1000;
Query OK, 0 rows affected (0.00 sec)
root@localhost:(none) 15:20:43>show global variables like 'max_connections' ;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.01 sec)
root@localhost:(none) 15:20:46>exit
Bye
[root@mysql_test8 data]# ls -l mysqld-auto.cnf
-rw-r-----. 1 mysql dba 172 Jul 4 15:20 mysqld-auto.cnf
[root@mysql_test8 data]# cat mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "1000" , "Metadata" : { "Timestamp" : 1688451643895688 , "User" : "root" , "Host" : "localhost" } } } }[root@mysql_test8 data]#
[root@mysql_test8 data]#
3. DB 재부팅 후 확인
만약 my.cnf에 변수가 설정되어 있고 mysqld-auto.cnf 파일에도 설정이 되어 있다면 mysqld-auto.cnf 변수가 나중에 적용되기 때문에 같은 변수가 설정되어 있어서 mysqld-auto.cnf 변수를 따라간다.
[root@mysql_test8 data]# cat /etc/my.cnf | grep max_connections
max_connections = 300
[root@mysql_test8 data]# cat /mydata/data/mysqld-auto.cnf | grep max_connections
{ "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "1000" , "Metadata" : { "Timestamp" : 1688451643895688 , "User" : "root" , "Host" : "localhost" } } } }
[root@mysql_test8 data]#
[root@mysql_test8 data]# systemctl status mysql
● mysql.server.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysql.server; bad; vendor preset: disabled)
Active: active (running) since Thu 2023-06-29 15:20:21 KST; 5 days ago
Docs: man:systemd-sysv-generator(8)
Process: 1006 ExecStart=/etc/rc.d/init.d/mysql.server start (code=exited, status=0/SUCCESS)
Tasks: 52
Memory: 785.0M
CGroup: /system.slice/mysql.server.service
├─1057 /bin/sh /sw/mysql/bin/mysqld_safe --datadir=/mydata/data --pid-file=/mydata/data/mysqld.pid
└─1996 /sw/mysql/bin/mysqld --basedir=/sw/mysql --datadir=/mydata/data --plugin-dir=/sw/mysql/lib/plugin --user=mysql --log-error=/log/mysqld.err --pid-file=/mydata/data/mysqld.pid --...
Jun 29 15:20:21 mysql_test8.0 systemd[1]: Starting LSB: start and stop MySQL...
Jun 29 15:20:21 mysql_test8.0 mysql.server[1006]: Starting MySQL SUCCESS!
Jun 29 15:20:21 mysql_test8.0 systemd[1]: Started LSB: start and stop MySQL.
[root@mysql_test8 data]#
[root@mysql_test8 data]#
[root@mysql_test8 data]# systemctl stop mysql
[root@mysql_test8 data]# systemctl status mysql
● mysql.server.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysql.server; bad; vendor preset: disabled)
Active: inactive (dead) since Tue 2023-07-04 15:24:42 KST; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 3594 ExecStop=/etc/rc.d/init.d/mysql.server stop (code=exited, status=0/SUCCESS)
Process: 1006 ExecStart=/etc/rc.d/init.d/mysql.server start (code=exited, status=0/SUCCESS)
Jun 29 15:20:21 mysql_test8.0 systemd[1]: Starting LSB: start and stop MySQL...
Jun 29 15:20:21 mysql_test8.0 mysql.server[1006]: Starting MySQL SUCCESS!
Jun 29 15:20:21 mysql_test8.0 systemd[1]: Started LSB: start and stop MySQL.
Jul 04 15:24:41 mysql_test8.0 systemd[1]: Stopping LSB: start and stop MySQL...
Jul 04 15:24:42 mysql_test8.0 mysql.server[3594]: Shutting down MySQL. SUCCESS!
Jul 04 15:24:42 mysql_test8.0 systemd[1]: Stopped LSB: start and stop MySQL.
[root@mysql_test8 data]# systemctl start mysql
[root@mysql_test8 data]#
[root@mysql_test8 data]# systemctl status mysql
● mysql.server.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysql.server; bad; vendor preset: disabled)
Active: active (running) since Tue 2023-07-04 15:24:53 KST; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 3594 ExecStop=/etc/rc.d/init.d/mysql.server stop (code=exited, status=0/SUCCESS)
Process: 3637 ExecStart=/etc/rc.d/init.d/mysql.server start (code=exited, status=0/SUCCESS)
Tasks: 42
Memory: 604.5M
CGroup: /system.slice/mysql.server.service
├─3654 /bin/sh /sw/mysql/bin/mysqld_safe --datadir=/mydata/data --pid-file=/mydata/data/mysqld.pid
└─4277 /sw/mysql/bin/mysqld --basedir=/sw/mysql --datadir=/mydata/data --plugin-dir=/sw/mysql/lib/plugin --user=mysql --log-error=/log/mysqld.err --pid-file=/mydata/data/mysqld.pid --...
Jul 04 15:24:51 mysql_test8.0 systemd[1]: Starting LSB: start and stop MySQL...
Jul 04 15:24:53 mysql_test8.0 mysql.server[3637]: Starting MySQL.. SUCCESS!
Jul 04 15:24:53 mysql_test8.0 systemd[1]: Started LSB: start and stop MySQL.
[root@mysql_test8 data]#
[root@mysql_test8 data]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@localhost:(none) 15:25:03>show global variables like 'max_connections' ;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.02 sec)
root@localhost:(none) 15:25:08>
4. 만약 동적 시스템 변수는 그대로 두고 향후 재기동시에만 적용하고자 한다면 my.cnf를 직접 변경하지 않고 persist_only 명령으로 mysqld-auto.cnf에 기록하게 할 수 있다.
다음과 같이 max_connections를 2000으로 변경하였지만 시스템은 적용되지 않았고 mysqld-auto.cnf 파일에만 기록된것을 볼 수 있다.
root@localhost:(none) 15:27:25>set persist_only max_connections=2000;
Query OK, 0 rows affected (0.01 sec)
root@localhost:(none) 15:27:43>show global variables like 'max_connections' ;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.00 sec)
root@localhost:(none) 15:27:46>exit
Bye
[root@mysql_test8 data]# cat /mydata/data/mysqld-auto.cnf | grep max_connections
{ "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "2000" , "Metadata" : { "Timestamp" : 1688452063879599 , "User" : "root" , "Host" : "localhost" } } } }
[root@mysql_test8 data]#
'Database > Mysql' 카테고리의 다른 글
MariaDB root password 모를 때 변경 방법 (0) | 2023.12.11 |
---|---|
MySQL Workbench를 이용한 마이그레이션 (MS-SQL → MySQL) (0) | 2023.02.27 |
Xtrabackup 설치 및 백업, 복구 방법 (0) | 2023.02.17 |
Mysql using 사용법 (0) | 2022.08.10 |
Mysql Fuction Based Index (함수기반인덱스) (0) | 2022.08.09 |
댓글