버전 업그레이드 및 서버 설정

업그레이드

In-Place Upgrade

  • 서버의 데이터파일을 그대로 두고 업그레이드하는 방식이다.

  • 마이너 버전 간 업그레이드는 데이터 파일 변경이 필요 없고 여러 버전을 건너뛰어 업그레이드하는 것도 가능하다.

  • 메이저 버전 간 업그레이드는 데이터 파일의 변경이 필요할 수 있고 보통 직전 버전에서만 업그레이드가 허용된다. 따라서 여러 단계를 한꺼번에 업그레이드해야 하는 경우 Logical Upgrade 방식을 사용하는 것이 나을 수 있다. 가끔 이전 메이저 버전에서 가장 최근의 마이너 버전으로부터만 업그레이드가 가능한 경우도 있으니 매뉴얼을 잘 확인해야 한다.

Logical Upgrade

  • 데이터를 SQL문이나 파일로 덤프한 후 업그레이드된 버전에 적재하는 방식이다.

  • 여러 버전을 건너뛸 수도 있다.

서버 설정

설정 파일 구조

  • MySQL 서버가 어느 디렉토리부터 my.cnf 파일을 읽는지 순서는 mysqld --verbose --help 의 많은 응답 중에 담겨있다. 주로 /etc/my.cnf 혹은 /etc/mysql/my.cnf 에 설정 파일을 저장한다.

  • 하나의 설정 파일에 여러 설정 그룹을 담을 수 있으며, 대체로 실행 프로그램 이름을 그룹명으로 사용한다.

[mysqld_safe]
malloc-lib = /opt/lib/libtcmalloc_minimal.so

[mysqld]
socket = /usr/local/mysql/tmp/mysql.sock
port = 3306

[mysql]
default-character-set = utf8mb4
socket = /usr/local/mysql/tmp/mysql.sock
port = 3304

시스템 변수

  • 구동 시 설정 파일의 내용을 읽어 메모리나 작동 방식을 초기화하고 접속된 사용자를 제어하기 위해 값을 저장해둔다.

글로벌 변수와 세션 변수

  • 글로벌 변수는 하나의 MySQL 인스턴스에서 전체적으로 영향을 미치는 시스템 변수이다. 주로 MySQL서버 자체에 관련된 설정일 때가 많다. SHOWSET 명령에서 GLOBAL 키워드를 사용해야 이 값을 조회하고 변경할 수 있다.

  • 세션 변수는 MySQL 클라이언트가 서버에 접속할 때 사용하는 옵션값을 지정할 때 사용한다. 기본값은 글로벌 변수를 사용한다. 예를 들어 각 클라이언트에서 쿼리 단위로 자동 커밋을 할 지 지정하는 autocommit 같은 변수가 이에 해당된다. 한 번 연결된 커넥션의 세션 변수는 서버에서 강제로 변경할 수 없다.

정적 변수와 동적 변수

  • 정적 변수는 서버가 한 번 구동되면 변경 불가능하다.

  • 동적 변수는 서버가 구동 중인 상태에서 변경 가능하다.

시스템 변수 설정

  • SET 명령을 통해 시스템 변수값을 변경할 수 있지만, 실제 설정 파일은 기존대로 유지된다. SET PERSIST 명령을 사용하면 시스템 변수와 실제 설정 파일이 함께 변경된다.

  • SET PERSIST_ONLY 명령을 사용하면 현재 MySQL 서버에는 변수 값을 변경하지 않고 추후 구동할 때 사용하기 위한 mysql-auto.cnf만 변경한다.

mysql-auto.cnf 변경된 시스템 변수의 이름과 설정값, 언제 누구에 의해 변경되었는지에 대한 메타데이터가 함께 저장된다. performance_schema 테이블의 variables_info 뷰, persisted_variables 테이블을 통해 참조할 수 있다.

  • SET, SET PERSIST_ONLY 명령을 모두 취소하려면 RESET PERSIST, 일부만 취소하려면 RESET PERSIST <변수명> 을 사용하면 된다.

  • 시스템 변수의 범위가 글로벌이면서 세션 변수인 Both 인 경우, 글로벌 값을 동적으로 변경해도 이미 존재하는 커넥션의 세션 변수는 변경되지 않는다.

Last updated