8.0 메이저 버전 업그레이드 전 사전 체크 사항
mysql> mysqlcheck -u root -p --all-databases --check-upgrade
## 파티셔닝 Check Query ##
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE NOT IN ('innodb', 'ndbcluster')
AND CREATE_OPTIONS LIKE '%partitioned%';
/*
현재 Musicow DB 파티셔닝 없음
*/
## 엔진 변경 ##
ALTER TABLE table_name ENGINE = INNODB;
## 일반 파티셔닝 제거 ##
ALTER TABLE table_name REMOVE PARTITIONING;
## 테이블 네임 체크 Informationschema Table 네임과 같으면 안됨##
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE LOWER(TABLE_SCHEMA) = 'mysql'
and LOWER(TABLE_NAME) IN
(
'catalogs','character_sets','check_constraints','collations',
'column_statistics','column_type_elements','columns','dd_properties',
'events','foreign_key_column_usage','foreign_keys','index_column_usage',
'index_partitions','index_stats','indexes','parameter_type_elements',
'parameters','resource_groups','routines','schemata',
'st_spatial_reference_systems','table_partition_values','table_partitions','table_stats',
'tables','tablespace_files','tablespaces','triggers',
'view_routine_usage','view_table_usage'
);
/*
현재 Musicow DB 내의 MySQL Information Schema 와 동일한 테이블네임 없음
*/
## 외래키 64 Characters를 넘기면 안됨 ##
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME IN
(SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),
INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)
FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
/*
현재 Musicow DB 내 64글자를 넘는 FK 없음
*/
SELECT DISTINCT NAME, SPACE, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE 'Single';
SELECT DISTINCT NAME, SPACE, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_TABLES
WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE 'Single';
## 파티셔닝 리오그 ##
ALTER TABLE table_name REORGANIZE PARTITION partition_name
INTO (partition_definition TABLESPACE=innodb_file_per_table);
## 대소문자 테이블 구분 ##
select TABLE_NAME, if(sha(TABLE_NAME) !=sha(lower(TABLE_NAME)),'Yes','No') as UpperCase from information_schema.tables;
/*
현재 Musicow DB 내 Default Schema 를 제외한 대문자 테이블 없음
*/
변경사항
https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-deprecations
-
Data dictionary
-
Atomic data definition statements (Atomic DDL)
-
Upgrade procedure
-
Session Reuse
-
Security and account management
-
Resource management
-
Table encryption management
-
InnoDB enhancements
-
Character set support
-
JSON enhancements / JSON_VALUE() function
-
Data type support
-
Optimizer / Hash Join Optimization / EXPLAIN ANALYZE Statement / Optimizer hints for FORCE INDEX, IGNORE INDEX
-
Improved hash join performance / RIGHT JOIN as LEFT JOIN handling /
-
Common table expressions
-
Window functions
-
Lateral derived tables
-
Aliases in single-table DELETE statements
-
Regular expression support
-
Internal temporary tables
-
Logging
-
Backup lock
-
Replication
-
Configuration / Plugins / C API / Hintable time_zone /
-
Multi-valued indexes
-
Query cast injection
-
Time zone support for TIMESTAMP and DATETIME
-
Row and column aliases with ON DUPLICATE KEY UPDATE
-
Non-locking reads on MySQL grant tables
-
System variable / Status variable
-
DDL log
-
Clause
-
EXPLAIN / Parser / Syntax (PROCEDURE ANALYSE()) / Partitioning (generic partitioning handler) /
-
INFORMATION_SCHEMA Tables
-
ARCHIVE 스토리지 엔진, SHOW PROFILE 및 SET PROFILING 절차, 그리고 몇 가지 시스템 변수들이 제거되었습니다.
-
Character set / Authentication plugin(sha256_password)
-
ZEROFILL attribute
-
Nonstandard MySQL extension
-
Statement
-
UNSIGNED attribute
MySQL :: MySQL 8.0 Reference Manual :: 1.3 What Is New in MySQL 8.0
These functions are removed in favor of the ST_ names: Area(), AsBinary(), AsText(), AsWKB(), AsWKT(), Buffer(), Centroid(), ConvexHull(), Crosses(), Dimension(), Distance(), EndPoint(), Envelope(), ExteriorRing(), GeomCollFromText(), GeomCollFromWKB(), Ge
dev.mysql.com
MySQL :: MySQL 8.0 Reference Manual :: 1.3 What Is New in MySQL 8.0
These functions are removed in favor of the ST_ names: Area(), AsBinary(), AsText(), AsWKB(), AsWKT(), Buffer(), Centroid(), ConvexHull(), Crosses(), Dimension(), Distance(), EndPoint(), Envelope(), ExteriorRing(), GeomCollFromText(), GeomCollFromWKB(), Ge
dev.mysql.com
MySQL :: MySQL 8.0 Reference Manual :: 1.3 What Is New in MySQL 8.0
These functions are removed in favor of the ST_ names: Area(), AsBinary(), AsText(), AsWKB(), AsWKT(), Buffer(), Centroid(), ConvexHull(), Crosses(), Dimension(), Distance(), EndPoint(), Envelope(), ExteriorRing(), GeomCollFromText(), GeomCollFromWKB(), Ge
dev.mysql.com
-
기본 인증 플러그인이 mysql_native_password 에서 caching_sha2_password로 변경되었습니다.
[mysqld] default_authentication_plugin=mysql_native_password
-
Configuration Changes
MySQL 스토리지 엔진은 이제 자체 파티셔닝 핸들러를 제공하며 MySQL 서버는 더 이상 일반 파티셔닝 지원을 제공하지 않습니다. InnoDB 및 NDB는 MySQL 8.0에서 지원되는 네이티브 파티셔닝 핸들러를 제공하는 유일한 스토리지 엔진입니다. 다른 스토리지 엔진을 사용하는 분할된 테이블은 MySQL 서버를 업그레이드하기 전에 InnoDB 또는 NDB로 변환하거나 분할을 제거하기 위해 변경해야 합니다. (**Incompatible change) MyISAM 을 InnoDB로 변경 해야합니다.
기본 문자 집합(Character Set): MySQL 8.0은 기본 문자 집합으로 utf8mb4를 사용합니다. 이는 이전 버전에서 latin1이 기본 문자 집합으로 사용되던 것과 차이가 있습니다. utf8mb4 문자 집합은 보다 많은 유니코드 문자를 지원하며, 이는 다양한 언어와 이모지를 포함하는 데이터를 처리하는 데 유용합니다.
SQL 모드(SQL Mode): MySQL 8.0은 기본 SQL 모드를 STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO로 설정합니다. 이는 이전 버전에서의 기본 설정과 다르며, SQL 쿼리의 작성과 처리에 영향을 미칠 수 있습니다.
시스템 변수 변경: 몇몇 시스템 변수가 MySQL 8.0에서 변경되었거나 제거되었습니다. 예를 들어, query_cache_size와 query_cache_type 같은 쿼리 캐시 관련 변수는 이제 MySQL에서 제거되었습니다. 쿼리 캐시는 MySQL 8.0에서 더 이상 지원되지 않습니다. 따라서 이전 버전에서 쿼리 캐시를 사용하고 있었다면, 이에 대한 대체 전략이 필요합니다.
비밀번호 플러그인: MySQL 8.0의 기본 비밀번호 플러그인은 caching_sha2_password로 변경되었습니다. 이는 이전의 mysql_native_password와는 다르며, 이 변경에 따라 애플리케이션의 데이터베이스 연결 코드를 수정해야 할 수도 있습니다.
MySQL 8.0 부터 lower_case_table_names=0 대소문자를 구분하여 조회하는 설정이 기본값입니다.
MySQL에서 테이블조회시 대소문자 구분없이 조회하려면 my.cnf 에 lower_case_table_names=1 으로 변경하면 가능합니다. -
InnoDB 변경 사항
MySQL에 번들로 제공되는 zlib 라이브러리 버전이 1.2.3에서 1.2.11로 올라갔습니다.
--innodb-directories 기능이 도입되면서, 데이터 디렉토리 외부에 절대 경로로 생성된 파일별 테이블 및 일반 테이블 스페이스 파일의 위치는 innodb_directories 인수 값에 추가해야 합니다. 그렇지 않으면 InnoDB는 복구 중 이 파일들을 찾을 수 없습니다. 테이블스페이스 파일 위치를 확인하려면 Information Schema FILES 테이블을 조회하세요.
더 이상 시스템 테이블스페이스에 Undo 로그를 위치시킬 수 없습니다. MySQL 8.0에서는 기본적으로 Undo 로그가 두 개의 Undo 테이블스페이스에 위치하게 됩니다.
MySQL 8.0.17부터 CREATE TABLESPACE ... ADD DATAFILE 문은 원형 디렉토리 참조를 허용하지 않습니다. 예를 들어, 다음 문에서 원형 디렉토리 참조 (/../)는 허용되지 않습니다.
MySQL 8.0.14에서 도입된 회귀로 인해, 대소문자 구분 파일 시스템에서 MySQL 5.7이나 MySQL 8.0.14 이전 릴리스에서 MySQL 8.0.16으로의 업그레이드 중 테이블이 분할되고 lower_case_table_names=1 인 인스턴스에 실패했습니다. 이 문제는 분할된 테이블 파일 이름과 관련된 대소문자 불일치 문제로 인한 것입니다. 회귀를 도입한 수정이 취소되어, MySQL 5.7이나 MySQL 8.0.14 이전 릴리스에서 MySQL 8.0.17로의 업그레이드가 정상적으로 작동합니다. 그러나 이 회귀는 여전히 MySQL 8.0.14, 8.0.15, 8.0.16 릴리스에 존재합니다.
MySQL은 테이블 파티션의 테이블스페이스 이름과 파일 이름을 구성할 때 구분 문자열을 사용합니다. " #p# " 구분 문자열이 파티션 이름 앞에, " #sp# " 구분 문자열이 서브파티션 이름 앞에 위치합니다.
MySQL 8.0.21부터, 시작 시점 또는 MySQL 5.7에서 업그레이드할 때 알려지지 않은 디렉토리에 테이블스페이스 데이터 파일이 발견되면 경고가 오류 로그에 기록됩니다. 알려진 디렉토리는 datadir, innodb_data_home_dir, innodb_directories 변수로 정의된 디렉토리입니다. 디렉토리를 알려진 상태로 만들려면, 이를 innodb_directories 설정에 추가하세요. 디렉토리를 알려진 상태로 만들면 복구 중 데이터 파일을 찾을 수 있습니다.
innodb_max_dirty_pages_pct_lwm, innodb_max_dirty_pages_pct 변수의 기본값 변경
MySQL 8.0에서 innodb_autoinc_lock_mode 설정의 기본값이 1 (consecutive)에서 2 (interleaved)로 변경되었습니다. innodb_autoinc_lock_mode는 InnoDB 테이블에서 자동 증가 칼럼 값을 얻기 위해 어떤 종류의 락을 사용할지를 결정하는 설정입니다. 이 설정의 값에는 0 (traditional), 1 (consecutive), 그리고 2 (interleaved)가 있습니다.
MySQL 8.0.30부터, innodb_redo_log_capacity 변수가 redo 로그 파일이 차지하는 디스크 공간의 양을 제어합니다. 이 변경에 따라, redo 로그 파일의 기본 수와 위치도 변경되었습니다. MySQL 8.0.30부터, InnoDB는 데이터 디렉토리의 #innodb_redo 디렉토리에 32개의 redo 로그 파일을 유지합니다. 이전에는 InnoDB는 기본적으로 데이터 디렉토리에 두 개의 redo 로그 파일을 생성했으며, redo 로그 파일의 수와 크기는 innodb_log_files_in_group alc innodb_log_file_size 변수로 제어되었습니다. 이 두 변수는 이제 사용되지 않습니다.
MySQL 5.7.35 이전에는 redundant 또는 compact 행 형식을 가진 테이블의 인덱스에 대한 크기 제한이 없었습니다. MySQL 5.7.35부터, 제한이 767 바이트로 정해졌습니다. MySQL 5.7.35 이전 버전에서 MySQL 8.0으로 업그레이드하면 테이블에 접근할 수 없게 될 수 있습니다. 만약 redundant 또는 compact 행 형식을 가진 테이블에 767 바이트보다 큰 인덱스가 있다면, 업그레이드 이전에 인덱스를 삭제하고 다시 생성해야 합니다.
'MySQL' 카테고리의 다른 글
MySQL 5.7(EOL) To 8.0 메이저 버전 업그레이드 (0) | 2024.03.07 |
---|---|
[MySQL] MySQL 8.0 Replication 간단히 설정 및 구성하기 (0) | 2024.02.22 |
[MySQL] 취약점 & 보안 관련 참고용 (0) | 2024.02.22 |
[MySQL] 도커로 올렸을때 포트 무시 ( MySQL ignored port ) (0) | 2024.02.19 |
MySQL Architecture ( Basic ) (0) | 2024.02.16 |