외부 MySQL을 로컬에 덤프 시키기

이찬영·2022년 4월 28일
0

처음에 MySQL의 db에서 dump를 시도하는 이유는 로컬내에서 CRUD 작업을 실험해보고 api 테스트를 하기 위해서 이다.

MySQL dump

그래서 MySQLdump를 이용해 로컬에 복사해와서 시도 했다.
복사 해올 대상의 환경은 gcp MySQL5.7

GTID

처음에 MySQL 덤프 백업 명령어를 실행 시켰다.

mysqldump -u root -p database_name > database_name.sql

이렇게 하니까 오류 메세지를 하나 받을 수 있었다.

[1] Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.

이 오류를 해결해 주기 위해서

--set-gtid-purged=OFF

라는 옵션을 추가해줘서 해결할 수 있었다.

이 옵셥을 사용하면 SET@@GLOBAL.gtid_purged 문을 출력에 추가할지 여부를 표시하여 덤프 파일에 기록된 GTID (Global Transaction ID)정보를 제어할 수 있다고 한다.

좀더 자세한 사항은 이글을 참고하면 된다.

최종적으로 성공한 코드

mysqldump --set-gtid-purged=OFF -h '위치입력' -u root -p database_name > database_name.sql

을 입력해주었다.


추가사항(error handling 과정)

첫 번째 오류 메세지

ERROR 2006 (HY000) at line 1519: MySQL server has gone away

이문제를 해결해주기 위해서 설정 변경

SET GLOBAL max_allowed_packet=1073741824;

두 번째 오류 메세지

ERROR 1273 (HY000) at line 4168: Unknown collation: 'utf8mb4_0900_ai_ci'

이러한 문제를 해결하기 위해서 mysql에 접속하여서 utf-8 옵션을 추가해주고 설정을 변경해주었다.

alter database test_db character set = utf8mb4 collate = utf8mb4_unicode_ci;

이러한 옵션 변경을 하지 않기 위해서는 애초에 MySQL 내부에서 utf-8 옵션을 추가하면서 생성해주면 된다.

CREATE DATABASE DB이름 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

또한 이렇게 해도 같은 오류 메세지가 나왔는데 알고보니

MySQL 5.7과 MySQL 8.0 버전 차이에 의한 오류로 났었던것이다.
결국 MySQL 버전업을 통해서 해결할 수 있었다.

참고

AWS RDS MySQL을 로컬에 복사해오기
[Mysql][Backup n Recovery] MySQLdump 프로그램 제대로 파해치기
mysqldump 내 보 낼 때 -- set - gtid - purged = OFF

profile
개발을 탐구하자

0개의 댓글