2022. 5. 30. 16:16ㆍ컴퓨터 공학/DB
아직까지 많은 회사들이 MySQL 5.7 버전을 사용하고 있지만,
개인 개발자 혹은 새로 생긴 스타트업의 경우 8.0이상의 버전을 사용하는 일이 많다.
개인의 경우 크게 문제가 되지 않지만
회사의 경우 5.7버전에서 8.0버전으로 업그레이드를 할 때 문제가 발생할 수 있기 때문에
여기에 관해서 몇글자 적어보려한다.
(이 글의 내용은 Real MySQL 8.0)을 참고했다.
MySQL 서버를 업그레이드 하는 방법
mysql 서버를 업그레이드 하는 데는 두가지 방법을 생각해 볼 수 있다.
- MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 하는 방법
- mysqldump 도구 등을 이용해 MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후, 새로 업그레이드 된 버전의 MySQL 서버에서 덤프된 데이터를 적재하는 방법
1번과 같은 방법을 In-place 업그레이드라고 하고(in-place 정렬),
2번을 논리적 업그레이드라고 한다.
잠시 훑어봐도 1번이 좀 더 편해보인다.
물론 데이터 파일을 그대로 두고 업그레이드를 했을 때 파일이 가만히 있다는 전제하에.
2번의 경우는 서버의 데이터 볼륨이 적으면 문제가 되지 않겠지만,
그렇지 않다면 내려받고 다시 적재하는 과정에서 적잖이 많은 시간과 비용이 소모될 것이다.
그렇기 때문에 우리는 돈 안 드는 1번 방법을 살펴보려 한다.
In-place 업그레이드 제약 사항 및 8.0 업그레이드 시 고려사항
먼저 의문이 생긴다.
'정말 그냥 업그레이드하면 되는 것인가?'
(어림도 없다 암!)
마이너 버전 업그레이드(5.6 -> 5.7)의 경우 대부분 데이터 파일 변경 없이 수행되지만
메이저 버전 업그레이드(5.7 -> 8.0)거나 갑자기 버전을 건너뛰는 (5.5 -> 5.7) 등의 방식은 문제가 있다.
(버전마다 있는 문제가 다름)
그래서 버전 업그레이드를 시도할 때는 반드시 서버의 매뉴얼을 정독해야한다.
서버의 매뉴얼을 정독하면서 업그레이드하기 힘들어 하시는 분들을 위해 차이점을 적어보자면
- 사용자 인증 방식 변경
- MySQL 8.0과의 호환성 체크
- 외래키 이름의 길이
- 인덱스 힌트
- GROUP BY에서 사용된 정렬 옵션
사용자 인증 방식의 경우 8.0버전 부터는 Native Authentication에서 Caching SHA-2 Authentication 방식으로 변경됐다.
사용자가 여전히 Native 방식을 사용하고 싶다면 서버를 시작할 때 --default-authentication-plugin=mysql_native_password 파라미터를 활성화하면 된다.
MySQL 8.0 부터는 외래키 이름이 64글자로 제한된다. 그렇기 때문에 mysqlcheck로 확인이 필요하다.
인덱스 힌트의 경우 신기하게도 MySQL 8.0이상 버전에서는 성능을 오히려 저하시킬 수도 있다.
그렇기에 먼저 성능 테스트를 해보는게 좋다.
GROUP BY asc, desc의 경우 8.0 버전에서 더이상 지원하지 않는다.
자세한 내용은 공식 문서를 확인하자.
지금까지 Mysql 8.0 버전으로 업그레이드시의 주의사항과 제약사항에 대해서 알아보았다.
다음에는 좀 더 알찬 내용을 작성할 수 있길 스스로에게 바란다.
'컴퓨터 공학 > DB' 카테고리의 다른 글
(Database) MySQL서버 구조와 스레딩 구조 (0) | 2022.07.09 |
---|---|
(Database) 트랜잭션(ACID)과 무결성 (0) | 2022.07.09 |
(Docker) Mysql(PostgreSQL, mariaDB 등)을 도커로 실행시키기 (0) | 2022.03.24 |
(Database) DML, DDL, DCL (0) | 2022.02.20 |
(Database) 인덱스(index)가 뭐고 왜 쓸까? (0) | 2022.02.20 |