둘셋 개발!

[MySQL] 시스템 변수 변경 본문

데이터베이스

[MySQL] 시스템 변수 변경

23 2024. 11. 9. 21:28

시스템 변수를 변경하는 방법에는 두가지가 있다.
 

1. my.cnf(mysql서버의 설정파일)에서 변수의 값을 직접 변경
2. set 키워드로 변경

 
1번 방법은 변수변경을 바로 적용하려면 서버를 재시작해야한다.
2번 방법은 변수변경이 바로 적용되지만, 서버를 재시작하면 이전값으로 복구된다.
 
다만, 8.0버전부터는 set 키워드와 함께 persist라는 키워드를 사용하면 서버를 재시작해도
바꾼 변수의 값이 유지된다.


시스템 변수 변경 실습

시스템 변수 중 max_connections라는 변수를 바꿔보겠다.
이 변수에 대해 간단히 설명하자면, mysql서버에 클라이언트가 몇 개의 커낵션까지 붙을 수 있을지를 제한하는 변수이다.

mysql 시스템 변수 설명

mysql사이트에 보면 시스템 변수에 대한 정보가 나와있다. (https://dev.mysql.com/doc/refman/9.0/en/server-option-variable-reference.html)
이 표에 따르면 max_connection는 cmd-Line으로 변경가능하고 글로벌 변수이며 동적변수이다.
 
먼저 set 키워드만을 사용해서 해당 변수의 값을 변경해보겠다.
 

1. 기존 값 확인

max_connections의 값은 현재 152이다.
 

2. set 키워드로 변수값 변경

153으로 변경했다.
max_connections 변수는 글로벌 변수이기 때문에 set뒤에 global이라는 키워드를 붙여줘야 한다.
 

3. 서버 재시작

 

4. 변수값 확인

서버를 재시작 했더니 변수값이 다시 152로 되돌아 왔다.
my.cnf파일에 저장하지 않고 서버를 재시작 했기 때문이다.
 
 

이제 set과 함께 persist라는 키워드를 사용해 보겠다.

 

1. 변수값을 영구적으로 변경

변수값을 153으로 변경했다.
 

2. 서버 재시작

(위의 사진 참고)
 
 

3. 변수값 확인

그대로 153이다.


그렇다면 mysql이 어떻게 persist라는 키워드를 처리했길래 my.cnf를 변경하지 않고도,
서버를 재시작 했을 때 변경한 값이 그대로 남아있을 수 있는지 궁금할 것이다.
 
그건 바로 mysqld-auto.cnf파일 덕분이다.
persist 키워드는 변경된 값을 즉시 적용함과 동시에 mysqld-auto.cnf에 추가로 기록해두고,
재시작할 때 my.cnf 뿐만 아니라 mysqld-auto.cnf 파일도 동시에 참조하여 시스템 변수를 적용한다.

(Real MySQL 8.0 1권 참고)

그래서 가능했던 것이다.
그럼 여기서 mysqld-auto.cnf파일 내용이 궁금할 것이다.

 
글자가 너무 작으니, 크게 다시 보면..!

{	
	"Version": 2,
	"mysql_dynamic_parse_early_variables":
    	{
        	"max_connections": 
        		{
                	"Value": "153"
                	"Metadata": {
                    	"Host": "localhost", "User": "root", "Timestamp": 1731154765597768
                     }
                 }
         }
 }

 
나같은 경우는 mysqld-auto.cnf파일이 /opt/homebrew/var/mysql에 있었다.
보면 max_connection의 값과 메타데이터가 들어있다.
어떤 사용자가 언제 수정했는지까지 나와있다.


결론

만약 간단하게 영구적으로 동적변수를 수정하고 싶다면
set persist 키워드를 활용하면 된다.