5.7버전 8.0버전 차이점
1. 사용자 인증 방식 변경
8.0버전 부터는 별도의옵션없이 Caching SHA-2 Authentication 인증 방식 사용
8.0버전에서 Native Authentication 인증 방식을 사용하려면 --dafault-authentication-plugin=mysql_native_password 파라미터를 활성화 한다.
Native Authentication
MySQL 서버에 기본적으로 내장되어 있는 인증 방식으로 사용자의 계정 정보와 암호를 MySQL 내부 데이터 딕셔너리에 저장한다.
사용자 계정과 암호가 MySQL 의 'mysql.user' 테이블에 저장된다.
암호는 해시 형태로 저장되며, 암호를 비교할 때 클라이언트에서 전달된 암호를 해시하여 저장된 암호화 비교한다.
이 방식은 MySQL 서버에 대한 접근 제어 및 인증을 처리하는데 사용된다.
Caching SHA-2 Authentication
보안 향상을 위해 사용자 암호를 SHA-256해시로 저장하고 통신 과정에서 보안 강화를 위해 SSL/TLS 암호화를 사용한다.
2. MySQL 8.0과의 호환성 체크
8.0 업그레이드 전에 5.7 버전에서 손상된 FRM 파일이나 호환되지 않는 데이터 타입 또는 함수가 있는지 mysqlcheck 유틸리티를 사용해 확인한다.
## mysqlcheck 유틸리티 실행 방법
mysqlcheck -u root -p --all-databases --check-upgrade
3. 외래키 이름의 길이
8.0 버전에서 외래키(Foreign Key)의 이름이 64글자로 제한된다.
기존 서버에서 외래키 이름이 64글자 이상이면 변경이 필요하다
-- 외래키 이름 길이 체크
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);
4. 인덱스 힌트
5.x에서 사용되던 인덱스 힌트가 있다면 8.0에서 먼저 성능 테스트를 수행한다.
5.x에서는 성능 향상에 도움이 됐지만 8.0에서는 오히려 성능 저하를 유발할 수 있다.
5. GROUP BY에 사용된 정렬 옵션
5.x에서 GROUP BY 절의 컬럼 뒤에 'ASC'나 'DESC'를 사용하고 있다면 제거하거나 다른 방식으로 변경한다.
GROUP BY field_name [ASC | DESC]
6. 파티션을 위한 공용 테이블 스페이스
8.x에서는 파티션의 각 테이블스페이스를 공용 테이블스페이스에 저장할 수 없다.
파티션의 테이블스페이스가 공용 테이블스페이스에 저장된 것이 있는지 먼저 확인하고
있다면 ALTER TABLE ... REORGANIZE 명령을 사용해 개별 테이블스페이스를 사용하도록 변경해야 한다.
-- 공용 테이블스페이스에 저장된 파티션이 있는지 체크
SELECT DISTINCT NAME, SPACE, SPACE_TYPE
FROM information_schema.INNODB_SYS_TABLES
WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE '%Single%';
8.0 업그레이드 전 확인 사항
8.0 버전부터는 시스템 테이블의 정보와 데이터 딕셔너리 정보의 포맷이 완전히 바뀐다.
5.7에서 8.0으로 업그레이드는 크게 두가지 단계로 나뉘어서 처리된다.
1. 데이터 딕셔너리 업그레이드
5.7버전 까지는 데이터 딕셔너리 정보가 FRM 확장자를 가진 파일로 별도로 보관되었었는데
8.0버전부터 데이터 딕셔너리 정보가 트랜잭션이 지원되는 InnoDB 테이블로 저장되도록 개선되었다.
8.0버전 부터는 딕셔너리 데이터의 버전 간 호환성 관리를 위해 테이블이 생성될 때 사용된 MySQL 서버의 버전 정보도 함께 기록한다.
2. 서버 업그레이드
MySQL서버의 시스템 데이터 베이스(performance_schema와 information_schema, mysql 데이터 베이스)의
테이블 구조를 8.0버전에 맞게 변경한다.
'백엔드 > DB' 카테고리의 다른 글
[Mysql] Docker 환경에서 mysql 설치 후 접속 에러 - Access denied for user 'root'@'172.17.0.1' (using password: YES) (0) | 2023.12.12 |
---|---|
[MySQL/Intellij] Public key retrieval is not allowed 에러 해결 (0) | 2023.09.18 |
[SQL] IN, EXISTS 비교 및 속도 비교 (0) | 2023.09.10 |
[DB] MySQL 샘플 데이터 (0) | 2023.09.02 |
[SQL 튜닝] 옵티마이저(optimizer) (0) | 2023.08.27 |