MySQL full backup dumpfile 테이블별로 쪼개는법
운영환경에서 DB 백업을 받을 때 보통 xtrabackup이나 mysqldump 으로 풀백업을 받으실텐데요
사이즈가 엄청 큰 DB를 mysqldump 로 풀백업 받은 경우 복구 시 병렬처리가 안되고 싱글 쓰레드로 처리되기 때문에
굉장히 많은 시간이 소요됩니다.
이 때 dumpfile을 테이블 별로 쪼개면 병렬로 수행할 수 있게 됩니다.
이번 글에서는 mysqldump로 받은 풀백업본 dumpfile 을 table별로 쪼개는 방법에 대해 공유 드리겠습니다
mysqldump 준비
mysqldump --opt --single-transaction -R -Q --all-databases -S /home1/irteam/db/mysql/tmp/mysql.sock -uadmin -p > test_dump.sql
=> table 별로 dumpfile 받은 것이 아닌 full backup 받은 상황
dumpfile 내 table line 확인
nl -b a test_dump.sql | egrep "DROP TABLE|UNLOCK TABLES"
.
.
.
6262 DROP TABLE IF EXISTS `guild_building`;
6285 UNLOCK TABLES;
6291 DROP TABLE IF EXISTS `guild_member`;
6331 UNLOCK TABLES;
6337 DROP TABLE IF EXISTS `tb_test`;
7389 UNLOCK TABLES;
7395 DROP TABLE IF EXISTS `tb_test2`;
7483 UNLOCK TABLES;
7489 DROP TABLE IF EXISTS `test3`;
7507 UNLOCK TABLES;
7513 DROP TABLE IF EXISTS `vegetable`;
7532 UNLOCK TABLES;
=> tb_test 테이블은 dump file에서 6337 ~ 7389 line에 있음 확인
dumpfile 쪼개기
head -7389 test_dump.sql | tail -1052 > tb_test.sql
=> dumpfile의 tb_test 부분 6337~7389 line 까지 tb_test.sql 로 떨굼
데이터 확인
mysql -uadmin -p --database test2 < tb_test.sql
### 원본
mysql> use test;
Database changed
mysql> select count(*) from tb_test;
+----------+
| count(*) |
+----------+
| 12403999 |
+----------+
1 row in set (1.67 sec)
### 복원 데이터
mysql> use test2;
Database changed
mysql> select count(*) from tb_test;
+----------+
| count(*) |
+----------+
| 12403999 |
+----------+
1 row in set (12.05 sec)