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)