M2(Mac)용 VMWare로 가상화 만들기 - (7) mysqldump upgrade

2024. 4. 1. 22:39MySQL/Class

반응형

# 현재 저는 MySQL이 8.0.33 버전이라 버전 업그레이드가 무의미할 수 있겠으나 테스트를 위해서 8.0.35 로 업그레이드를 진행해보겠습니다. 이것은 5.7 버전에서 8.0으로 버전 업그레이드를 한다고 생각하는 것이 좋을 것 같습니다. 버전이 높다고 하여 방법이 달라지는 것은 아니니깐요.

 

1. mysqldump(export)

 - 우선 기존 버전의 8.0.33 에서 모든 데이터베이스를 dump 를 하여 백업본을 저장합니다.

$ /mysql/local/mysql_8033/bin/mysqldump --all-databases -h localhost -u root -p1234 -S /tmp/mysql_8033.sock > /home/mysql/alldump.sql

 

2. 8.0.35 설치

- MySQL 8.0.33 설치 내용을 보시고, 동일하게 8.0.35를 설치하면 됩니다.

mysql 버전과 기본 database만 설치 된 것을 볼 수 있다.

 

3. mysqldump(import)

 - 이제  백업 해 둔 파일을 가져와서 데이터를 넣어주면 됩니다.

$ /mysql/local/mysql_8035/bin/mysql -uroot -p1234 -S /tmp/mysql_8035.sock < /home/mysql/alldump.sql

 

데이터베이스 및 사용자가 생성 된 것을 볼 수 있다.

- HA(replication)구성일 경우, export하기 전에 master의 logfile과 log_pos 값을 기억해 두었다가, replication 을 연결해 줘야합니다.(다른 방법이 있으시면 꼭 좀 알려주세요^^)

 

4. 결론

mysqldump를 이용하여 버전 업그레이드를 진행해 보았습니다.

 

이 방법의 장점은 5.5 -> 5.6 -> 5.7 -> 8.0 으로 단계별로 업그레이드를 하는 in-place 방식보다는 5.5 -> 8.0으로 한번에 넘어갈 수 있어 시간을 절약 할 수가 있습니다. 그리고 신규 데이터베이스에 새로운 데이터를 넣는 방식이기 때문에, 데이터 정렬과 디스크 관리가 깔끔하게 이뤄질 것입니다.

 

반면 단점이라고 하면 앞서 말씀드렸듯이 ha 구성일 경우 logfile과 position값을 기억을 해야 하는 번거로움이 있습니다. "기억해두면되지 않냐" 라고 반문 할 수도 있겠지만, 실제 작업을 하다보면 깜빡 잊고 position값을 기억해 두지 않는 경우가 종종 발생됩니다. 그렇게 되면 데이터 싱크 맞추기가 힘들 수도 있을 것입니다. 최악의 경우 다시 작업을 해야하는 경우도 발생되지 않을까 생각됩니다.

 

in-place 와 dump 방식은 어떤 것이 더 좋다라고 말할 수 없습니다.

dump 의 장점은 시간을 절약할 수 있다고 하였지만, 업그레이드 할 데이터의 용량이 크다면 in-place 방식과 별반 차이가 없을 것입니다.

(필자는 잠시 간과 했던 것이 dump 방식으로 처리 시간을 계산하였을 때, import 가 있다는 것은 생각지 못하고 export 만 계산하여 훨씬 빠르다고 생각했었습니다.)

데이터 용량과 처리 속도를 계산하여 in-place 와 dump 방식을 알맞게 선택하여 업그레이드를 진행하는 것이 좋을 것입니다.

 

5. 주의(?)

5.7에서 8.0으로 넘어갈 때, dump 작업을 하였을 경우, sql_mode에서 "NO_AUTO_CREATE_USER" 값으로 인해 에러를 발생 시킬 수 있다고 합니다.

해당 부분에 대해서는 겪어보지 않아서 저도 어떤 상황에서 발생되는지는 알 수 없으나, 아래 링크를 통하여 대략적인 내용을 확인할 수 있었습니다. 좋은 정보이니, 꼭 참고해보시길 바랍니다.

https://dev.hi.ne.kr/no_auto_create_user/

 

SQL-MODE : NO_AUTO_CREATE_USER

구버전의 DB에서 익스포트한 백업을 새 DB에 임포트하려고 하니 에러가 발생하였다. 해결방법으로 sql-mode에서 NO_AUTO_CREATE_USER를 제거하니 해결이 됬는데 아마도 백업에 user create구문이 있었기 때

dev.hi.ne.kr

 

 

반응형