Share
Sign In
🔩

MySQL 시스템 변수, DB 재부팅시 유지하기

시스템 변수 유지
mysql은 시스템 변수 설정에 대해 영향 범위에 따라 크게 2가지로 나누어 적용 가능하다. 하나는 전제 세션에 적용하는 global 설정 방법 그리고 해당 세션에만 적용하는 session 설정 방법이다. mysql ver 8.0 부터는 시스템 변수 값을 변경하여 적용하는 방법 중 다른 하나의 방법이 추가되었다. 이 방법은 global 설정에 기능을 추가하여 지속성을 보장한다는 뜻으로 persist 설정 방법이라고 한다.
my.cnf에 수동으로 변경된 설정값을 작성하여 관리하지 않고도 변경된 시스템 변수값을 서버의 재시작 시에도 적용할 수 있도록 제공한다. my.cnf를 자동으로 관리해주는 설정방법은 아니다.
global 시스템 변수를 설정했다고 하더라도, DB를 리부팅하게 되면 mysql-auto.cnf에 시스템 변수가 등록되어 있지 않으면, 재부팅시 초기화 되게 된다.
이것은 DBA가 시스템 변수 조작의 실수로 DB가 원치 않는 장애를 일으키는 것을 막고자 함을 위함이다. 하지만 DB를 부득이하게 재부팅 해야하는 경우 또 이것이 빈번하다면, 재부팅 할 때 마다 시스템 변수를 설정할 수는 없는 노릇이다. 새롭게 추가된 persist 옵션을 살펴보면서 재부팅 시에도 유지할 수 있는 방법을 알아보자.
PERSIST 설정 추가
persist 시스템 변수 설정은 서버가 운영중인 상태에서도 설정값을 변경하고, 서버가 재 시작 했을 때에도 해당 내용이 적용되어 관리할 수 있도록 해주는 설정 방식이다. 수동으로 my.cnf에 작성하지 않아도 된다. 시스템 변수를 설정할 때 사용하는 set 구문을 활용하여 mysql-auto.cnf를 생성하여 해당 값을 저장하고 서버가 재시작 시에도 유지되도록 도와준다.
위 옵션을 사용하지 않는 경우에는 옵션 파일을 수정하려면, 파일에 직접 접근해야하고, MYSQL의 호스트에 접근해야한다. 그렇다고 GLOBAL 명령어를 사용하면, 데이터베이스 인스턴스가 살아 있을 동안만 적용되게 된다.
⚠️ 조심해야 할 점은 persisted_global_load 설정이 off 되어 있으면 persist 를 적용하지 않는다.
(persisted_global_load 설정은 Dynamic System Variables이 아닌 Persist-restricted system variables 이므로 설정을 하려면 다른 작업을 수행해야한다. Persist-restricted system variables 수정하기 )
SET PERSIST 쿼리는 현재 시스템 변수와 mysqld-auto.cnf 를 모두 변경하지만, SET PERSIST_ONLY 쿼리는 현재 변수는 수정하지 않고 mysqld-auto.cnf 만을 수정하여, 재부팅시에 반영하게 되도록 한다. 따라서 PERSIST_ONLY 변수는 read_only 시스템 변수를 persist 설정할 때 사용하는 것이 적합하다.
PERSIST 설정 삭제
mysql-auto.cnf에는 지속 변수들이 존재하는데, 여기에 쓰여 있는 지속 변수는 재부팅시 초기화 되게 된다. 그러므로 mysql-auto.cnf에 시스템 변수를 작성함으로써 재부팅시 시스템 변수가 변경되는 것을 막을 수 있었다.
이제는 mysql-auto.cnf 에서 지속 변수를 제거함으로써 다시 재부팅시에 초기화 되도록 설정하는 방법을 알아보자.
아래의 쿼리문을 실행하면 되지만, 이것은 사용자 생성과 권한 생성과 마찬가지로 특정 권한을 필요로 한다. 다만 어떤 시스템 변수를 제거 할 것인 지에 따라 필요한 권한이 달라진다.
동적 시스템 변수를 mysql-auto.cnf에서 제거할 경우 SYSTEM_VARIABLES_ADMIN 권한을 필요로 한다.
읽기 전용 시스템 변수를 mysql-auto.cnf에서 제거할 경우 SYSTEM_VARIABLES_ADMIN 권한이나 PERSIST_RO_VARIABLES_ADMIN 권한을 필요로 한다.
위의 방법은 모든 지속 변수를 mysql-auto.cnf 에서 제거하게 된다. 이렇게 하면 리부트할 때, 모든 시스템 변수가 변하는 것을 막을 수 있지만 추천하지 않는 방법이다.
특정한 지속 변수를 제거하려면 아래와 같이, 시스템 변수를 밝히면 된다.
PERSIST 설정 조회
그렇다면 PERSIST 설정이 잘 이루어 졌는가 보려면 어떻게 해야하는 지 알아보자.
VARIABLE_SOURCE 컬럼을 보면 persist 설정이 되었는 지 볼 수 있다.
VARIABLE_SOURCE 에서 다양한 값과 그 의미.
mysql 버전에 따라 조회하는 방법이 다르다.
또는 직접 호스트에 접속하여 mysql-auto.cnf 파일을 확인하면 된다.
(이론) persist 시스템 변수 관리
mysql_auto.cnf
mysql_auto.cnf 파일은 data 디렉토리에 자동 생성되며 파일이며, set persist로 설정된 값들이 저장된다. 설정된 값은 위처럼 json 형태로 저장하여 관리한다. mysql_auto.cnf 파일은 my.cnf와 설정값을 유지하여 관리한다는 측면에서는 유사하지만, 관리에는 다른 특징을 갖는다.
my.cnf와 mysql_auto.cnf 는 작성되는 방식이 다르다.
my.cnf는 사용자가 직접 수정하는 것을 기본으로 관리되지만, mysql_auto.cnf는 사용자가 직접 수정하는 것이 아닌 명령어의 실행으로 파일이 관리되는것을 기본으로 한다.
my.cnf는 서버의 시작 시 바로 적용되어 startup 프로세스에 적요오디지만 mysql_auto.cnf는 startup 프로세스가 완료된 후에 적요오딘다.
persist의 관리 방식
일반적으로 persist를 관리 할수 있는 것은 아니다. 하지만 persisted_global_load 시스템 변수 설정을 통해 해당 기능을 활성화/비활성화 할 수 있다. persisted_global_load 시스템 변수가 0으로 되어있으면 persist 옵션을 적용할 수 없기 때문에 persist 설정을 했더라도 persisted_global_load가 비활성화 되어있는지 확인이 필요하다.
persisted_global_load 시스템 변수는 mysql_auto.cnf 파일을 생성하여 사용할 것인지를 결정하는 시스템 변수이다. persisted_global_load를 활성화 하면 data 디렉토리에 mysql_auto.cnf 파일을 생성하고, persist 옵션으로 정의한 시스템 변수를 기록하게 해준다.
performance schema table
mysql_auto.cnf에 저장된 내용 및 정보들은 performance schema 테이블을 통해 확인이 가능하다.
variables 테이블과 persisted_variables 테이블을 참조하면 된다.
persist 옵션을 쓸수 없는 시스템 변수
모든 변수가 다 persist 옵션이 적용되는 것은 아니다. 이를 Nonpersistable 시스템 변수라고 하는데, 8.0.143 버전 이후로 일부는 특정 조건에서 SET PERSIST_ONLY 명령으로 PERSIST 처리가 가능하다.
다음 특성을 갖는 시스템 변수는 persist 옵션을 사용하여 시스템 변수 설정을 할 수 없다.
읽기 전용(read_only) 시스템 변수
mysql 내부에서만 사용하는 internal 시스템 변수
세선 레벨에서만 적용되는 시스템 변수
그 중 일부는 특정 조건을 만족하면 가능하다고 했는데, 그 조건을 살펴보면 ..
persist_only_admin_x509_subject 시스템 변수가 SSL 인증 X.509 subject value 로 설정되어야 한다.
사용자는 암호화된 커넥션을 통해 연결되어야 하고 지정된 Subject value 로 SSL 인증을 제공한다.
사용자는 SET PERSIST_ONLY 할 수 있는 권한이 있어야 한다.
예를 들면 hostname 변수는 서버에 의해서만 설정이 가능하고, read_only 변수라서 어떤 환경에서도 persist가 불가능하다.
참고 문서
이전 페이지로 돌아가기
MySQL & PostgreSQL
메인으로 돌아가기
시스템 변수 유지
mysql은 시스템 변수 설정에 대해 영향 범위에 따라 크게 2가지로 나누어 적용 가능하다. 하나는 전제 세션에 적용하는 global 설정 방법 그리고 해당 세션에만 적용하는 session 설정 방법이다. mysql ver 8.0 부터는 시스템 변수 값을 변경하여 적용하는 방법 중 다른 하나의 방법이 추가되었다. 이 방법은 global 설정에 기능을 추가하여 지속성을 보장한다는 뜻으로 persist 설정 방법이라고 한다.
my.cnf에 수동으로 변경된 설정값을 작성하여 관리하지 않고도 변경된 시스템 변수값을 서버의 재시작 시에도 적용할 수 있도록 제공한다. my.cnf를 자동으로 관리해주는 설정방법은 아니다.
global 시스템 변수를 설정했다고 하더라도, DB를 리부팅하게 되면 mysql-auto.cnf에 시스템 변수가 등록되어 있지 않으면, 재부팅시 초기화 되게 된다.
이것은 DBA가 시스템 변수 조작의 실수로 DB가 원치 않는 장애를 일으키는 것을 막고자 함을 위함이다. 하지만 DB를 부득이하게 재부팅 해야하는 경우 또 이것이 빈번하다면, 재부팅 할 때 마다 시스템 변수를 설정할 수는 없는 노릇이다. 새롭게 추가된 persist 옵션을 살펴보면서 재부팅 시에도 유지할 수 있는 방법을 알아보자.
PERSIST 설정 추가
persist 시스템 변수 설정은 서버가 운영중인 상태에서도 설정값을 변경하고, 서버가 재 시작 했을 때에도 해당 내용이 적용되어 관리할 수 있도록 해주는 설정 방식이다. 수동으로 my.cnf에 작성하지 않아도 된다. 시스템 변수를 설정할 때 사용하는 set 구문을 활용하여 mysql-auto.cnf를 생성하여 해당 값을 저장하고 서버가 재시작 시에도 유지되도록 도와준다.
위 옵션을 사용하지 않는 경우에는 옵션 파일을 수정하려면, 파일에 직접 접근해야하고, MYSQL의 호스트에 접근해야한다. 그렇다고 GLOBAL 명령어를 사용하면, 데이터베이스 인스턴스가 살아 있을 동안만 적용되게 된다.
⚠️ 조심해야 할 점은 persisted_global_load 설정이 off 되어 있으면 persist 를 적용하지 않는다.
(persisted_global_load 설정은 Dynamic System Variables이 아닌 Persist-restricted system variables 이므로 설정을 하려면 다른 작업을 수행해야한다. Persist-restricted system variables 수정하기 )
SET PERSIST 쿼리는 현재 시스템 변수와 mysqld-auto.cnf 를 모두 변경하지만, SET PERSIST_ONLY 쿼리는 현재 변수는 수정하지 않고 mysqld-auto.cnf 만을 수정하여, 재부팅시에 반영하게 되도록 한다. 따라서 PERSIST_ONLY 변수는 read_only 시스템 변수를 persist 설정할 때 사용하는 것이 적합하다.
PERSIST 설정 삭제
mysql-auto.cnf에는 지속 변수들이 존재하는데, 여기에 쓰여 있는 지속 변수는 재부팅시 초기화 되게 된다. 그러므로 mysql-auto.cnf에 시스템 변수를 작성함으로써 재부팅시 시스템 변수가 변경되는 것을 막을 수 있었다.
이제는 mysql-auto.cnf 에서 지속 변수를 제거함으로써 다시 재부팅시에 초기화 되도록 설정하는 방법을 알아보자.
아래의 쿼리문을 실행하면 되지만, 이것은 사용자 생성과 권한 생성과 마찬가지로 특정 권한을 필요로 한다. 다만 어떤 시스템 변수를 제거 할 것인 지에 따라 필요한 권한이 달라진다.
동적 시스템 변수를 mysql-auto.cnf에서 제거할 경우 SYSTEM_VARIABLES_ADMIN 권한을 필요로 한다.
읽기 전용 시스템 변수를 mysql-auto.cnf에서 제거할 경우 SYSTEM_VARIABLES_ADMIN 권한이나 PERSIST_RO_VARIABLES_ADMIN 권한을 필요로 한다.
위의 방법은 모든 지속 변수를 mysql-auto.cnf 에서 제거하게 된다. 이렇게 하면 리부트할 때, 모든 시스템 변수가 변하는 것을 막을 수 있지만 추천하지 않는 방법이다.
특정한 지속 변수를 제거하려면 아래와 같이, 시스템 변수를 밝히면 된다.
PERSIST 설정 조회
그렇다면 PERSIST 설정이 잘 이루어 졌는가 보려면 어떻게 해야하는 지 알아보자.
VARIABLE_SOURCE 컬럼을 보면 persist 설정이 되었는 지 볼 수 있다.
VARIABLE_SOURCE 에서 다양한 값과 그 의미.
mysql 버전에 따라 조회하는 방법이 다르다.
또는 직접 호스트에 접속하여 mysql-auto.cnf 파일을 확인하면 된다.
(이론) persist 시스템 변수 관리
mysql_auto.cnf
mysql_auto.cnf 파일은 data 디렉토리에 자동 생성되며 파일이며, set persist로 설정된 값들이 저장된다. 설정된 값은 위처럼 json 형태로 저장하여 관리한다. mysql_auto.cnf 파일은 my.cnf와 설정값을 유지하여 관리한다는 측면에서는 유사하지만, 관리에는 다른 특징을 갖는다.
my.cnf와 mysql_auto.cnf 는 작성되는 방식이 다르다.
my.cnf는 사용자가 직접 수정하는 것을 기본으로 관리되지만, mysql_auto.cnf는 사용자가 직접 수정하는 것이 아닌 명령어의 실행으로 파일이 관리되는것을 기본으로 한다.
my.cnf는 서버의 시작 시 바로 적용되어 startup 프로세스에 적요오디지만 mysql_auto.cnf는 startup 프로세스가 완료된 후에 적요오딘다.
persist의 관리 방식
일반적으로 persist를 관리 할수 있는 것은 아니다. 하지만 persisted_global_load 시스템 변수 설정을 통해 해당 기능을 활성화/비활성화 할 수 있다. persisted_global_load 시스템 변수가 0으로 되어있으면 persist 옵션을 적용할 수 없기 때문에 persist 설정을 했더라도 persisted_global_load가 비활성화 되어있는지 확인이 필요하다.
persisted_global_load 시스템 변수는 mysql_auto.cnf 파일을 생성하여 사용할 것인지를 결정하는 시스템 변수이다. persisted_global_load를 활성화 하면 data 디렉토리에 mysql_auto.cnf 파일을 생성하고, persist 옵션으로 정의한 시스템 변수를 기록하게 해준다.
performance schema table
mysql_auto.cnf에 저장된 내용 및 정보들은 performance schema 테이블을 통해 확인이 가능하다.
variables 테이블과 persisted_variables 테이블을 참조하면 된다.
persist 옵션을 쓸수 없는 시스템 변수
모든 변수가 다 persist 옵션이 적용되는 것은 아니다. 이를 Nonpersistable 시스템 변수라고 하는데, 8.0.143 버전 이후로 일부는 특정 조건에서 SET PERSIST_ONLY 명령으로 PERSIST 처리가 가능하다.
다음 특성을 갖는 시스템 변수는 persist 옵션을 사용하여 시스템 변수 설정을 할 수 없다.
읽기 전용(read_only) 시스템 변수
mysql 내부에서만 사용하는 internal 시스템 변수
세선 레벨에서만 적용되는 시스템 변수
그 중 일부는 특정 조건을 만족하면 가능하다고 했는데, 그 조건을 살펴보면 ..
persist_only_admin_x509_subject 시스템 변수가 SSL 인증 X.509 subject value 로 설정되어야 한다.
사용자는 암호화된 커넥션을 통해 연결되어야 하고 지정된 Subject value 로 SSL 인증을 제공한다.
사용자는 SET PERSIST_ONLY 할 수 있는 권한이 있어야 한다.
예를 들면 hostname 변수는 서버에 의해서만 설정이 가능하고, read_only 변수라서 어떤 환경에서도 persist가 불가능하다.
참고 문서
이전 페이지로 돌아가기
MySQL & PostgreSQL
메인으로 돌아가기
시스템 변수 유지
mysql은 시스템 변수 설정에 대해 영향 범위에 따라 크게 2가지로 나누어 적용 가능하다. 하나는 전제 세션에 적용하는 global 설정 방법 그리고 해당 세션에만 적용하는 session 설정 방법이다. mysql ver 8.0 부터는 시스템 변수 값을 변경하여 적용하는 방법 중 다른 하나의 방법이 추가되었다. 이 방법은 global 설정에 기능을 추가하여 지속성을 보장한다는 뜻으로 persist 설정 방법이라고 한다.
my.cnf에 수동으로 변경된 설정값을 작성하여 관리하지 않고도 변경된 시스템 변수값을 서버의 재시작 시에도 적용할 수 있도록 제공한다. my.cnf를 자동으로 관리해주는 설정방법은 아니다.
global 시스템 변수를 설정했다고 하더라도, DB를 리부팅하게 되면 mysql-auto.cnf에 시스템 변수가 등록되어 있지 않으면, 재부팅시 초기화 되게 된다.
이것은 DBA가 시스템 변수 조작의 실수로 DB가 원치 않는 장애를 일으키는 것을 막고자 함을 위함이다. 하지만 DB를 부득이하게 재부팅 해야하는 경우 또 이것이 빈번하다면, 재부팅 할 때 마다 시스템 변수를 설정할 수는 없는 노릇이다. 새롭게 추가된 persist 옵션을 살펴보면서 재부팅 시에도 유지할 수 있는 방법을 알아보자.
PERSIST 설정 추가
persist 시스템 변수 설정은 서버가 운영중인 상태에서도 설정값을 변경하고, 서버가 재 시작 했을 때에도 해당 내용이 적용되어 관리할 수 있도록 해주는 설정 방식이다. 수동으로 my.cnf에 작성하지 않아도 된다. 시스템 변수를 설정할 때 사용하는 set 구문을 활용하여 mysql-auto.cnf를 생성하여 해당 값을 저장하고 서버가 재시작 시에도 유지되도록 도와준다.
위 옵션을 사용하지 않는 경우에는 옵션 파일을 수정하려면, 파일에 직접 접근해야하고, MYSQL의 호스트에 접근해야한다. 그렇다고 GLOBAL 명령어를 사용하면, 데이터베이스 인스턴스가 살아 있을 동안만 적용되게 된다.
⚠️ 조심해야 할 점은 persisted_global_load 설정이 off 되어 있으면 persist 를 적용하지 않는다.
(persisted_global_load 설정은 Dynamic System Variables이 아닌 Persist-restricted system variables 이므로 설정을 하려면 다른 작업을 수행해야한다. Persist-restricted system variables 수정하기 )
SET PERSIST 쿼리는 현재 시스템 변수와 mysqld-auto.cnf 를 모두 변경하지만, SET PERSIST_ONLY 쿼리는 현재 변수는 수정하지 않고 mysqld-auto.cnf 만을 수정하여, 재부팅시에 반영하게 되도록 한다. 따라서 PERSIST_ONLY 변수는 read_only 시스템 변수를 persist 설정할 때 사용하는 것이 적합하다.
PERSIST 설정 삭제
mysql-auto.cnf에는 지속 변수들이 존재하는데, 여기에 쓰여 있는 지속 변수는 재부팅시 초기화 되게 된다. 그러므로 mysql-auto.cnf에 시스템 변수를 작성함으로써 재부팅시 시스템 변수가 변경되는 것을 막을 수 있었다.
이제는 mysql-auto.cnf 에서 지속 변수를 제거함으로써 다시 재부팅시에 초기화 되도록 설정하는 방법을 알아보자.
아래의 쿼리문을 실행하면 되지만, 이것은 사용자 생성과 권한 생성과 마찬가지로 특정 권한을 필요로 한다. 다만 어떤 시스템 변수를 제거 할 것인 지에 따라 필요한 권한이 달라진다.
동적 시스템 변수를 mysql-auto.cnf에서 제거할 경우 SYSTEM_VARIABLES_ADMIN 권한을 필요로 한다.
읽기 전용 시스템 변수를 mysql-auto.cnf에서 제거할 경우 SYSTEM_VARIABLES_ADMIN 권한이나 PERSIST_RO_VARIABLES_ADMIN 권한을 필요로 한다.
위의 방법은 모든 지속 변수를 mysql-auto.cnf 에서 제거하게 된다. 이렇게 하면 리부트할 때, 모든 시스템 변수가 변하는 것을 막을 수 있지만 추천하지 않는 방법이다.
특정한 지속 변수를 제거하려면 아래와 같이, 시스템 변수를 밝히면 된다.
PERSIST 설정 조회
그렇다면 PERSIST 설정이 잘 이루어 졌는가 보려면 어떻게 해야하는 지 알아보자.
VARIABLE_SOURCE 컬럼을 보면 persist 설정이 되었는 지 볼 수 있다.
VARIABLE_SOURCE 에서 다양한 값과 그 의미.
mysql 버전에 따라 조회하는 방법이 다르다.
또는 직접 호스트에 접속하여 mysql-auto.cnf 파일을 확인하면 된다.
(이론) persist 시스템 변수 관리
mysql_auto.cnf
mysql_auto.cnf 파일은 data 디렉토리에 자동 생성되며 파일이며, set persist로 설정된 값들이 저장된다. 설정된 값은 위처럼 json 형태로 저장하여 관리한다. mysql_auto.cnf 파일은 my.cnf와 설정값을 유지하여 관리한다는 측면에서는 유사하지만, 관리에는 다른 특징을 갖는다.
my.cnf와 mysql_auto.cnf 는 작성되는 방식이 다르다.
my.cnf는 사용자가 직접 수정하는 것을 기본으로 관리되지만, mysql_auto.cnf는 사용자가 직접 수정하는 것이 아닌 명령어의 실행으로 파일이 관리되는것을 기본으로 한다.
my.cnf는 서버의 시작 시 바로 적용되어 startup 프로세스에 적요오디지만 mysql_auto.cnf는 startup 프로세스가 완료된 후에 적요오딘다.
persist의 관리 방식
일반적으로 persist를 관리 할수 있는 것은 아니다. 하지만 persisted_global_load 시스템 변수 설정을 통해 해당 기능을 활성화/비활성화 할 수 있다. persisted_global_load 시스템 변수가 0으로 되어있으면 persist 옵션을 적용할 수 없기 때문에 persist 설정을 했더라도 persisted_global_load가 비활성화 되어있는지 확인이 필요하다.
persisted_global_load 시스템 변수는 mysql_auto.cnf 파일을 생성하여 사용할 것인지를 결정하는 시스템 변수이다. persisted_global_load를 활성화 하면 data 디렉토리에 mysql_auto.cnf 파일을 생성하고, persist 옵션으로 정의한 시스템 변수를 기록하게 해준다.
performance schema table
mysql_auto.cnf에 저장된 내용 및 정보들은 performance schema 테이블을 통해 확인이 가능하다.
variables 테이블과 persisted_variables 테이블을 참조하면 된다.
persist 옵션을 쓸수 없는 시스템 변수
모든 변수가 다 persist 옵션이 적용되는 것은 아니다. 이를 Nonpersistable 시스템 변수라고 하는데, 8.0.143 버전 이후로 일부는 특정 조건에서 SET PERSIST_ONLY 명령으로 PERSIST 처리가 가능하다.
다음 특성을 갖는 시스템 변수는 persist 옵션을 사용하여 시스템 변수 설정을 할 수 없다.
읽기 전용(read_only) 시스템 변수
mysql 내부에서만 사용하는 internal 시스템 변수
세선 레벨에서만 적용되는 시스템 변수
그 중 일부는 특정 조건을 만족하면 가능하다고 했는데, 그 조건을 살펴보면 ..
persist_only_admin_x509_subject 시스템 변수가 SSL 인증 X.509 subject value 로 설정되어야 한다.
사용자는 암호화된 커넥션을 통해 연결되어야 하고 지정된 Subject value 로 SSL 인증을 제공한다.
사용자는 SET PERSIST_ONLY 할 수 있는 권한이 있어야 한다.
예를 들면 hostname 변수는 서버에 의해서만 설정이 가능하고, read_only 변수라서 어떤 환경에서도 persist가 불가능하다.
참고 문서