디비 빠르게 백업하고 복원하기 - mariadb (mysql)

2020. 4. 28. 08:59개발/SQL

반응형

MariaDB 빠르게 백업하고 복원하기

 

이번에 RDS mariadb 에서 RDS auroradb 로 이전하게 되었다.

 

한달에 회원이 1~2만명 씩 꾸준히 늘어나고 있고,

피크 타임, 이벤트 타임 때 DB를 유연하게 움직이기 위해서 mariadb 를 보내줘야 했기 때문이다.

 

문제는 데이터가 너무 많았다. 물론 초대형 사이티들의 테라급은 아니지만, 

적어도 내 경험 (이력) 에서 가장 많은 데이터다.

 

그냥 무작정 툴로 QA 서버를 백업과 복원을 했더니 4시간이 넘게 걸렸다. 

(우리는 production 서버의 한달 전 데이터가 staging, staging 의 한달전 데이터가 QA 다)

 

아무런 옵션 없이 하는 것은 무식한 짓인 것을 깨달아 경험을 공유할겸 나중에 내가 보고 다시 하려고 적어둔다.

 

 

--no-autocommit=1

autocommit 을 끄는 옵션이다. 테이블의 작성이 모두 완료 된후에 커밋을 남긴다. 

주의 중간에 실패하면 처음부터

 

--single-transaction=1

작업 후에 변경된 내용을 적용하지 않는다. 반대로 생각하면 이 옵션이 없으면 변경된 내용이 적용되겠지?

그런데 이렇게 대용량 작업을 할때는 서버를 내리고 할테니 필수로 넣어주는게 좋을 것 같다.

 

--extened-insert=1

INSERT 문을 한번에 처리한다.

INSERT INTO `A` VALUES (1);

INSERT INTO `A` VALUES (2);

INSERT INTO `A` VALUES (3);

처리 되는 것을 아래와 같이 한번에 처리한다.

INSERT INTO `A` VALUES (1), (2), (3)

 

덤+ AWS DB의 경우

그리고 AWS DB를 사용하는 경우 같은 리전, 같은 가용영역을 사용하면 많이 쾌적하게 빠르다 ;;;

 

 

// 백업
mysqldump -h[HOST_URL] -u[DB_ID] -p[PASSWORD] \ 
--databases [DB_NAME] \
--no-autocommit=1 \
--single-transaction=1 \
--extended-insert=1 > [SQL_FILE_NAME].sql

// 복원
mysql -h[HOST_URL] -u[DB_ID] -p[PASSWORD] --database [DB_NAME] < [SQL_FILE_NAME].sql

 

 

특정 디비 제외하기

// 단일 테이블 제외
mysqldump -u root -p DBname --ignore-table=DBname.tbname > 저장파일명.sql

// 다중 테이블 제외
mysqldump -u root -p DBname --ignore-table=DBname.tbname1 --ignore-table=DBname.tbname2 > 저장파일명.sql