,


MySQL 서버 업그레이드

MySQL 서버를 업그레이드 하는 방법으로 두가지 방법을 소개합니다.

  1. In-Place Upgrade
    • MySQL 서버의 데이터 파일을 그대로 두고 업그레이드
    • 여러가지 제약사항이 있지만 업그레이드 시간 단축
  2. Logical Upgrade
    • 데이터 파일을 덤프뜨고 업그레이드한 DB에 적재
    • 업그레이드 시간이 많이 소요

업그레이드시 고려사항

  1. 호환성
    • 이전 버전에서 손상된 FRM 파일이나 호환되지 않는 데이터 타입, 함수가 있는지 mysqlcheck를 이용해 확인 할 수 있습니다.
  2. 외래키 이름의 길이
    • 8.0부터 외래키 이름이 64글자로 제한됩니다.
  3. 인덱스 힌트
    • DBMS 버전을 바꿀때 인덱스가 성능에 미치는 영향이 달라질 수 있습니다.
  4. Group By에 사용된 정렬 옵션
  5. 파티션을 위한 공용 테이블스페이스
    • 파티션의 테이블스페이스를 공용 테이블스페이스에 저장할 수 없습니다.

MySQL 8.0 으로 업그레이드 하는 과정

  1. MySQL 셧다운
  2. MySQL 5.7 삭제
  3. MySQL 8.0 설치
  4. MySQL 8.0 서버 시작 (mysqld가 실행)
  5. 데이터 딕셔너리 업그레이드
    • MySQL 5.7까진 데이터 딕셔너리 정보가 FRM 확장자를 가진 파일로 별도로 보관 됐으나 8.0부터는 트랜잭션이 지원되는 InnoDB 테이블로 저장됩니다.
    • mysqld 프로그램이 실행합니다.
  6. 서버 업그레이드 (8.0.16부턴 이 과정을 mysqld가 수행)
    • mysql_upgrade라는 프로그램이 실행
    • 시스템 테이블의 구조를 8.0에 맞게 변경

서버 설정

MySQL 서버는 단 하나의 설정 파일을 사용합니다. 리눅스를 포함한 유닉스 계열에서는 my.cnf라는 이름을 사용합니다.

my.cnf 파일

my.cnf 파일의 위치

mysql --help를 치면 긴 문장과 함께 아래와 같은 경로를 여러개 알려줍니다. (경로에 우선순위) 이경로에 my.cnf라는 파일이 있습니다.

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
The following groups are read: mysql client

my.cnf 파일의 내용

그룹 설정 [group_name]

하나의 파일에 여러 설정 그룹을 담을 수 있습니다. [group_name] 이처럼 설정할 수 있습니다.

[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

MySQL 시스템 변수의 특징

MySQL 서버는 기동하면서 설정 파일의 내용을 읽어 메모리와 작동 방식을 초기화합니다. 접속된 사용자를 제어하기 위해 이런 이런 값들을 별도로 저장합니다. 이런 값들을 시스템 변수라고 합니다. 시스템 변수 값이 MySQL서버와 클라이언트에 미치는 영향을 판단하려면 글로벌 변수세션 변수를 구분할 줄 알아야 한다.

글로벌 변수

하나의

댓글남기기