서버를 업그레이드 하는 방법으로 크게 두가지 방법이 있다.
In-Place Upgrade는 제약사항이 많고 업그레이드가 빠르며
Logical Upgrade은 제약사항이 거의 없고 업그레이드 느리다.
In-Place Upgrade의 제약사항으로는 직전 메이저버전에서만 업그레이드가 가능하다.
예를들어 5.5 to 8.0 업그레이드 시 5.5 > 5.6 > 5.7 > 8.0 의 과정을 거쳐야 한다.
Logical Upgrade도 업그레이드 시 인코딩, sql/procedure 문법을 확인해야 한다.
MySQL 8.0에서는 개선,변경,삭제된 기능이 있다.
업그레이드 하기 전에 영향을 미치는 내용을 검토한다.
사용자 인증 방식 변경
MySQL 8.0 부터는 Caching SHA-2 Authentication (이하 SHA-2) 인증 방식을 Default 로 사용한다. Native Authenticatio을 계속 사용하고자 한다면--default-authentication-plugin=mysql_native_password
파라미터를 활성화 하면된다.
MySQl 8.0과의 호환성 체크
mysqlcheck 유틸리티로 확인 가능. 호환불가 타입, 손상된 데이터 파일을 체크
외래키 이름의 길이
MySQL 8.0에서는 외래키 이름 길이를 64자로 제한했다.
인덱스 힌트
MySQL 5.x에서 사용하던 인덱스 힌트가 있다면 MySQL 8.0 업그레이드 이후 성능 테스트를 수행한다.구버전에서는 성등향상에 도움이 되었지만 MySQL 8.0에서는 성능저하를 유발할 수 있다.
GROUP BY에 사용된 정렬 옵션
MySQL8.0부터 해당 구문을 지원하지 않는다.
파티션을 위한 공용 테이블스페이스
MySQL 8.x에서는 각 테이블스페이스를 공용 테이블스페이스에 저장 할 수 없다. 공용 테이블스페이스에 저장된지 확인하고 저장되었다면 ALTER TABLE ... REORGANIZE
명령을 실행해 개별 테이블스페이스를 사용하도록 변경한다.
MySQL 5.7 to 8.0 업그레이드는 두단계로 진행된다.
MySQL 8.0.16미만 버전은 5번까지, 8.0.16버전부터는 4번까지 진행하면 된다.
- MySQL 셧다운
- MySQL 5.7 프로그램 삭제
- MySQL 8.0 프로그램 설치
- MySQL 8.0 서버 시작
mysql_upgrade
프로그램 실행MySQL 8.0.16버전 미만은 4번에서 데이터딕셔너리 업그레이드, 5번에서 서버업그레이드를 진행한다.
일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 유닉스 계열은 "my.cnf", 윈도우 계열은 "my.ini"라는 이름을 사용한다. MySQL 서버는 시작될 때만 이 설정 파일을 참조하는데, 이 설정 파일의 경로가 고정되어 있는 것은 아니다. MySQL 서버는 지정된 여러 개의 디렉토리를 순차적으로 탐색하며 처음 발견한 my.cnf를 사용한다.
설정파일의 경로는 다음 명령어를 통해 확인 가능하며 가급적 데몬을 사용한 확인은 지양해야 한다.
# 데몬을 사용하여 조회
$ mysqld --verbose --help |grep my.cnf
# 클라이언트 유틸을 사용하여 조회
$ mysql --help |grep my.cnf
#출력
[root@191 mysql]# mysqld --verbose --help |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
[root@191 mysql]# mysql --help |grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
설정파일 경로 탐색 순서
- /etc/my.cnf
- /etc/mysql/my.cnf
- /usr/etc/my.cnf
- ~/.my.cnf
MySQL 설정 파일은 여러 개의 설정그룹을 담을 있으며, 대체로 실행 프로그램 이름을 그룹명으로 사용한다.
[mysqld]
port = 3306
.
.
.
[mysqldump]
quick
max_allowed_packet = 64M
default_character_set = utf8
[mysql]
no_auto_rehash
prompt=mysql (\d)>
[mysqld_safe]
open-files-limit = 65535
MySQL 서버는 기동하면서 설팡 파일의 내용을 읽어 메모리나 작동 방식을 초기화하고, 접속된 사용자를 제어하기 위해 이러한 값을 별도로 저장해 둔다.
mysql> show variables\G;
*************************** 1. row ***************************
Variable_name: activate_all_roles_on_login
Value: OFF
*************************** 2. row ***************************
Variable_name: admin_address
Value:
*************************** 3. row ***************************
Variable_name: admin_port
Value: 33062
*************************** 4. row ***************************
Variable_name: admin_ssl_ca
Value:
*************************** 5. row ***************************
Variable_name: admin_ssl_capath
Value:
*************************** 6. row ***************************
Variable_name: admin_ssl_cert
Value:
*************************** 7. row ***************************
Variable_name: admin_ssl_cipher
Value:
*************************** 8. row ***************************
Variable_name: admin_ssl_crl
Value:
*************************** 9. row ***************************
Variable_name: admin_ssl_crlpath
Value:
*************************** 10. row ***************************
Variable_name: admin_ssl_key
Value:
*************************** 11. row ***************************
Variable_name: admin_tls_ciphersuites
Value:
💡 도큐먼트에 시스템 변수 설명이 있으며 5가지속성으로 분류한다.
YUM | |
---|---|
Cmd-Line | CLI로 변경 가능여부 |
Option file | 설정파일(my.cnf)로 제어여부 |
System Var | 시스템변수인지 아닌지 여부. '-','_'구분에 주의 |
Var Scope | 시스템 변수의 적용 범위 ( GLOBAL/SESSION ) |
Dynamic | 동적변경 가능 여부 |
글로벌 변수
글로벌 범위의 시스템 변수는 하나의 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수
MySQL 서버에 단 하나만 존재하는 innodb_buffer_pool
등이 이에 해당한다.
세션 변수
세션 범위의 시스템 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때 기본으로 부여하는 옵션의 기본값을 제어하는데 사용된다.
DEFAULT 값은 글로벌 변수이며 대표적으로 autocommit이 이에 해당한다.
서버 기동중에 변경이 가능하면 동적 변수, 변경 불가능하다면 정적 변수 이다.
mysql> show variables where variable_name like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_fast_shutdown=0;
mysql> show variables where variable_name like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0 |
+----------------------+-------+
1 row in set (0.00 sec)
동적 변수는 재기동 시 default옵션과 my.cnf옵션으로 초기화 주의
MySQL 8.0버전에서 추가된 SET PERSIST
명령어를 사용하면, 반영된 동적변수를 mysqld-auto.cnf에 기록해 둔다. MySQL 서버 재기동 시 my.cnf와 mysqld-auto.cnf 둘 다 참조하여 시스템 변수를 반영한다.
# 참조
백은빈,이성욱. 2021. Real MySQL 8.0 (1권). 위키북스.
MySQL 8.0 Reference Manual