버전 업그레이드를 하며 고려해야할 대상이 많아 정리..
1. CentOS 7버전 지양
기존에 사용하던 개발서버에 그대로 8.4버전을 설치해서 테스트하려하니.. 관련 라이브러리나 패키지들이 버전이 낮아서 제대로 구동이 안되었다... 이거때문에 몇번을 다시 설치하고.. 난리를 쳤다.. 7버전은 지양하자.
7버전을 사용해야한다면.. 만약 외부통신이 안뚫려있는 경우 하나하나 패키지 다운받아서 버전 업 해주어야한다...(시간이 오래 소요된다.. 그리고 귀찮다..)
본인의 경우 아래 패키지들을 버전업 해주었다.
gcc
make
python
glibc
libncurses.so.6
libtinfo.so.6
libstdc++.so.6
2. default 인증 방식 변경
- 기존 : mysql_native_password
- 변경 : caching_sha2_password
원한다면 8.0버전에서는 mysql_native_password로 cnf파일을 변경하여 사용할 수 있지만,,
8.4버전부터는 cnf 파일에서 해당 파라미터값이 제외되었다.
mysql cnf파일에 기존 들어있던 파라미터 값인 mysql-native-password값이 8.4버전에서는 사라져, mysql up할때 추가 필요하다.
- 참고 : https://downloads.mysql.com/docs/refman-8.4-en.a4.pdf
이거말고도 8.0에서 8.4로 갈때 cnf 파일내에서 사라진 값이 많다... 동일하게 설정하고 싶다면 해당 파라미터가 유요한 값인지 확인 필요하다. (잘못 설정해놓으면 서버가 제대로 안 올라 올 수 있음)
3. Connector/J 버전 확인 (개발단 확인필요)
대개체 일정이 나오자마자 사수님이 말씀해주신 내용.
MySQL이 8.0이상일때는 Connector/J버전도 함께 올려주어야한다. (connector/J 8버전으로)
※ AP쪽에서 해당 설정을 변경하지 않을시 DB 접근 불가
MySQL :: Connectors and APIs Manual :: 3.2 Compatibility with MySQL and Java Versions
3.2 Compatibility with MySQL and Java Versions Here is some compatibility information for Connector/J 8.0: JDBC versions: Connector/J 8.0 implements JDBC 4.2. While Connector/J 8.0 works with libraries of higher JDBC versions, it returns a SQLFeatureNotSu
dev.mysql.com
4. 대소문자 구분(lower_case_table_names 설정 확인)
lower_case_table_names 해당 파라미터가 기존에는 변경가능했지만, 8.X버전부터는 한번 설정하면 변경하지 못한다...
대소문자를 구분하는 환경에서는 꼭 유의해서 설정할 것
5. 제거된 기능 확인
대부분 사용안하는 기능이겠지만,, 8.0버전부터 아래 기능들이 제거되었으니 확인 필요하다.
아 그리고 예약어도 변경되었다. (금지되었다가 풀린 예약어도 있음)
제거 또는 비권장 기능들 |
query_cache_* 쿼리 캐시 완전 제거 |
system_user, super_read_only 사용 방식 변경 |
utf8 → utf8mb3로 리네이밍됨 |
ZEROFILL, UNSIGNED과 같은 일부 속성 비권장 또는 경고 처리 |
SET PASSWORD FOR ... = OLD_PASSWORD(...) 완전 제거 |
※ MySQL 8.0: 기본 문자셋 utf8mb4, 콜레이션은 utf8mb4_0900_ai_ci
※ QUERY CACHE의 경우 성능이 너무 안 좋아서.. 그동안 DBA들이 기피하는 MYSQL 기능 중 하나였는데.. 8.0에서 드디어 제거
6. default SQL_MODE 확인
상용 작업 전 dev환경에서 작업하다 보면.. 어? 왜 안되지? 싶을때가 있는데 그럴때 10번중 9번은 SQL_MODE가 개발단과 달라서 그렇다. 이런 SQL_MODE값이 좀 더 strict 해질수록 데이터 정합성은 더 맞겠지만,, 운영할때 좀 더 신경써야할 포인트가 많아짐.
특히 NO_ZERO_DATE같은 경우 보통 날짜 default 값을 '0000:00:00 ~~~' 이런식으로 넣는경우가 많은데, NO_ZERO_DATE의 경우에는 해당값이 안들어가며, 테이블 생성자체가 안된다. (SET SESSION으로 강제로는 할 수 있겠지만..)
그리고, 쿼리검수가 누락된 쿼리일 경우 GROUP BY 절에 SELECT 절에 있는 컬럼들을 모두 안 쓴 경우가 발생할 수 있다.(실제로 유사한 상황 발생했었음) 이러면 바로 장애터진다... (SELECT 자체가 되지 않으므로..)
STRICT_TRANS_TABLES | 기본값이 됨 |
NO_ZERO_DATE, NO_ENGINE_SUBSTITUTION | 기본 포함 |
ONLY_FULL_GROUP_BY | 그룹함수 사용 시 엄격 적용 |
7. Hash Join, Skip scan (Optimizer Swtich)
이건 주의할 사항은 아니지만.. 드디어 Hash Join이 MySQL 8버전에 등장했다...
큰 시스템이 아니라면 NL Join으로 커버되겠지만.. 데이터 용량이 크다면 Hash 가 유리하다.
optimizer switch에서 조정할 수 있으며, optimizer switch 기능들을 상세히 살펴보는게 좋을 듯하다.
특히 skip_scan 의 경우 성능이슈가 있어 말이 많았다..
※ 그리고 혹시 동일 서버에서 업그레이드를 해야한다면 8.0으로 올리기전 5.7을 거쳐가야 한다.
'MySQL' 카테고리의 다른 글
MySQL 8.4 설치 스크립트 정리 (0) | 2025.05.14 |
---|---|
MySQL MHA Failover 시 문제 원인과 해결법 | GARP(ARPING) 이슈 (2) | 2025.01.27 |
MySQL Master Slave 복제 지연 해결 방안 | 예방 방안 (0) | 2025.01.17 |
MySQL version 8.0 | 8.4 주요 차이점 비교 (파라미터 튜닝) (0) | 2025.01.13 |
Checking MySQL Logs (1) | 2024.12.26 |