MySQL 데이터 이관 (with mysqldump)
•
서론
◦
개발 서버에서 운영 서버로의 배포가 미뤄져 간극이 더 생기기 전에 db라도 둘을 맞춰주기로 했다
◦
따라서 운영 서버 db 데이터를 개발 서버 db로 이관하는 작업을 하게되었다.
•
본론
◦
사실 정말 많은 삽질을 했는데,,,,,, copy 기능을 사용하면 각종 제약조건들이 넘겨지지 않아서 불편했고, 스키마만 복제한 후 데이터를 직접 import 하려 했을 땐 스키마의 외래키 제약조건들끼리 충돌이 일어나서 외래키 설정은 따로 해줘야 하는 불편함이 존재했다.
삽질 : 간단하게 데이터그립의 copy table 기능을 사용해보았다. 제약조건 옮기는 게 너무하다.
삽질 : 패킷 전송 실패,,,, 나눠서 하자
삽질 : mysqldump 잘 모를 때 쓴 정보 글,,, 틀린 말도 있으니 무시하자,,
◦
결론적으로 mysqldump를 사용한 방법이 가장 편하고 빠르고 정확했다.
▪
제약조건들까지 한 번에 옮겨지고
◦
사용 방법을 아래 적겠다.
▪
mysqlworkbench 깔기 → brew install --cask mysqlworkbench
▪
데이터그립에서 원하는 스키마 혹은 테이블의 오른쪽 클릭 > Import/Export > Export with mysqldump 클릭
▪
Path to mysqldump에 아래 경로 입력
•
/Applications/MySQLWorkbench.app/Contents/MacOS/mysqldump
▪
생성된 dump.sql 파일을 데이터그립으로 드래그 앤 드랍
▪
dump.sql 파일에서 아래 코드들 지워주기
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
YAML
복사
•
혹시 나처럼 데이터그립에서 파일 크기가 너무 커서 읽기 전용 모드라 수정이 안된다 하면 vsc로 여는 걸 추천한다. 위 4줄을 각각 검색해서 지워줬다.
▪
데이터그립에서 dump.sql 파일 오른쪽 클릭해서 Run 클릭 (실행 시 스키마 지정해주기)
적용 시 발생한 에러 로그 → Access denied 뜨는 세 줄을 지워줘서 해결해줬다
•
결론
◦
mysqldump를 이용해서 데이터를 전부 이관하는 데 1분 9초 정도 걸렸다.
◦
가장 데이터가 많은 테이블은 40000건 정도 가졌었다.
◦
처음엔 40000건이면 대용량인가 생각했는데 직접 옮겨보고 40000건은 대용량이 아님을 깨달았다.
◦
그래서 우리 서비스에선 쉽게 데이터 이관을 해줄 수 있었다.
참고