설치와 설정 (2)
MySQL 업그레이드
1. 업그레이드 종류
서버를 업그레이드 하는 방법으로 크게 두가지 방법이 있다.
- In-Place Upgrade
MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 하는 방법. - Logical Upgrade
mysqldump 도구 등을 이용해 MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후,새로 업그레이드된 버전의 mysql 서버에서 덤프된 데이터를 적재하는 방법.
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 문법을 확인해야 한다.
2. MySQL 8.0 업그레이드 시 고려 사항
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 명령을 실행해 개별 테이블스페이스를 사용하도록 변경한다.
3. MySQL 8.0 업그레이드
MySQL 5.7 to 8.0 업그레이드는 두단계로 진행된다.
- 데이터 딕셔너리 업그레이드
- 메타정보를 담는 FRM 파일 -> IBD(테이블스페이스) 파일에서 관리
- 기존 MyIsam 엔진 -> InnoDB엔진
- 서버 업그레이드
- performance_schema, Information_schema 구조 변경
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 | 동적변경 가능 여부 |
1. 글로벌 변수와 세션 변수
-
글로벌 변수
글로벌 범위의 시스템 변수는 하나의 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수
MySQL 서버에 단 하나만 존재하는 innodb_buffer_pool등이 이에 해당한다. -
세션 변수
세션 범위의 시스템 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때 기본으로 부여하는 옵션의 기본값을 제어하는데 사용된다.
DEFAULT 값은 글로벌 변수이며 대표적으로 autocommit이 이에 해당한다.
2. 정적 변수와 동적 변수
서버 기동중에 변경이 가능하면 동적 변수, 변경 불가능하다면 정적 변수 이다.
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옵션으로 초기화 주의
3. 👍SET PERSIST
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
Author And Source
이 문제에 관하여(설치와 설정 (2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minstone/설치와-설정-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)