Database

MySQL(1)

MIRACLE LIFE 2023. 9. 17. 18:24

- 클린 셧다운

MySQL 서버에서는 실제 트랜잭션이 정상적으로 커밋돼도 데이터 파일에 변경된 내용이 기록되지 않고 로그 파일에만 기록돼 있을 수 있다. 심지어 MySQL 서버가 종료되고 다시 시작된 이후에도 계속 이 상태로 남아있을 수도 있다. 사용량이 많은 MySQL 서버에서는 이런 현상이 더 일반적인데, 이는 결코 비정상적인 상황이 아니다. 하지만 MySQL 서버가 종료될 때 모든 커밋된 내용을 데이터 파일에 기록하고 종료하게 할 수도 있는데, 이 경우에는 다음과 같이 MySQL 서버의 옵션을 변경하고 MySQL 서버를 종료하면 된다.

 

> SET GLOBAL innodb_fast_shutdown=0;

이렇게 모든 커밋된 데이터를 데이터 파일에 적용하고 종료하는 것을 클린 셧다운(Clean shutdown)이라고 표현한다. 클린 셧다운으로 종료되면 다시 MySQL 서버가 기동할 때 별도의 트랜잭션 복구 과정을 진행하지 않기 때문에 빠르게 시작할 수 있다.

 

- MySQL 서버의 접속 가능 여부 확인

때로는 MySQL 서버를 직접 로그인하지 않고, 원격 서버에서 MySQL 서버의 접속 가능 여부만 확인해야 하는 경우도 있다. 이 경우에는 간단히 telnet 명령이나 nc(Netcat) 명령을 이용해 원격지 MySQL 서버가 응답 가능한 상태인지 확인해볼 수 있다.

Telnet
> telnet 10.2.40.61 3306

Netcat
> nc 10.2.40.61 3306

MySQL 서버의 버전 정보를 정상적으로 출력해준다면 네트워크 수준의 연결은 정상적임을 판단할 수 있다.

 

- MySQL 서버 업그레이드

1. 인플레이스 업그레이드

MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 하는 방법

 

2. 논리적 업그레이드

mysqldump 도구 등을 이용해 MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후, 새로 업그레이드 된 버전의 MySQL 서버에서 덤프된 데이터를 적재하는 방법

 

인플레이스 업그레이드는 여러 가지 제약 사항이 있지만 업그레이드 시간을 크게 단축할 수 있다.

반대로 논리적 업그레이드는 버번 간 제약 사항이 거의 없지만 업그레이드 시간이 매우 많이 소요될 수 있다.
만약 두 단계 이상을 한 번에 업그레이드해야 한다면 '논리적 업그레이드'가 더 나은 방법일 수도 있다.

 

- MySQL 시스템 변수의 특징

1. 글로별 변수와 세션 변수

MySQL의 시스템 변수는 적용 범위에 따라 글로벌 변수와 세션 변수로 나뉘는데, 일반적으로 세션별로 적용되는 시스템 변수의 경우 글로벌 변수뿐만 아니라 세션 변수에도 동시에 존재한다.

글로별 변수는 하나의 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수를 의미한다.

세션 변수는 커넥션별로 설정값을 서로 다르게 지정할 수 있으며, 한번 연결된 커넥션의 세선 변수는 서버에서 강제로 변경할 수 없다.

 

세션 범위의 시스템 변수 가운데 MySQL 서버의 설정 파일(my.cnf)에 명시해 초기화할 수 있는 변수는 대부분 범위가 'Both'라고 명시돼 있다. 이렇게 'Both'로 명시된 시스템 변수는 MySQL 서버가 기억만 하고 있다가 실제 클라이언트와의 커넥션이 생성되는 순간에 해당 커넥션의 기본값으로 사용되는 값이다. 그리고 순수하게 범위가 세션이라고 명시된 시스템 변수는 MySQL 서버의 설정 파일에 초깃값을 명시할 수 없으며, 커넥션이 만들어지는 순간부터 해당 커넥션에서만 유효한 설정 변수를 의미한다.

 

2. 정적 변수와 동적 변수

MySQL 서버의 시스템 변수는 동적 변수와 정적 변수로 구분되는데, 동적 변수의 경우 MySQL 서버에서 SET GLOBAL 명령으로 변경하면 즉시 MySQL 서버에 반영된다. 즉, 변경하고자 하는 값이 동적 변수라면 SET 명령으로 간단히 변숫값을 변경할 수 있으며, 굳이 MySQL 서버를 재시작하지 않아도 된다.

시스템 변수의 범위가 'Both'인 경우에는 글로벌 시스템 변수의 값을 변경해도 이미 존재하는 커넥션의 세션 변숫값은 변경되지 않고 그대로 유지된다.

 

3. SET PERSIST

MySQL 8.0 버전부터 SET PERSIST 명령으로 시스템 변수를 변경하면 MySQL 서버는 변경된 값을 즉시 적용함과 동시에 별도의 설정 파일(mysqld-auto.cnf)에 변경 내용을 추가로 기록해 둔다. 그리고 MySQL 서버가 다시 시작될 때 기본 설정 파일(my.cnf)뿐만 아니라 자동 생성된 mysqld-auto.cnf 파일을 같이 참조해서 시스템 변수를 적용한다.

현재 실행중인 MySQL 서버에는 변경 내용을 적용하지 않고 다음 재시작을 위해 mysqld-auto.cnf 파일에만 변경 내용을 기록해두고자 한다면 SET PERSIST_ONLY 명령을 사용하면 된다. 정적 변수를 mysqld-auto.cnf 파일에 기록해두고자 할 때 SET PERSIST_ONLY 명령을 활용하면 된다.

mysqld-auto.cnf 파일의 내용을 삭제해야 하는 경우에는 RESET PERSIST 명령을 사용하는 것이 안전하다.

 

https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html

 

MySQL :: MySQL 8.0 Reference Manual :: 5.1.5 Server System Variable Reference

MySQL 8.0 Reference Manual  /  ...  /  MySQL Server Administration  /  The MySQL Server  /  Server System Variable Reference PREV   HOME   UP   NEXT

dev.mysql.com


참조: 책 Real MySQL 8.0

'Database' 카테고리의 다른 글

MySQL(3)  (0) 2023.09.19
MySQL(2)  (0) 2023.09.17
Redis(2)  (0) 2023.06.11
Redis(1)  (0) 2023.06.07
[MongoDB] 데이터베이스 연동하기(2)  (2) 2023.03.13