Bash 병렬 MySQL 덤프

Bash 병렬 MySQL 덤프

AWS에는 각각 크기가 1~2GB로 추정되는 100개가 넘는 클라이언트 데이터베이스를 갖게 될 프로젝트가 있습니다. 표준 AWS RDS 일일 스냅샷 대신 mysqldump를 통해 각 데이터베이스를 매일 백업해야 합니다.

Bash에서는 목록을 반복하고 각 데이터베이스를 차례로 덤프하는데 몇 시간이 걸릴 수 있습니다. 내 질문은

Bash 포크를 수행하고 데이터베이스를 병렬로 덤프하는 것이 권장됩니까?

답변1

client_db.list데이터베이스 이름 목록이 포함된 파일이 있고, 모든 데이터베이스는 하나의 RDS 인스턴스에 속한다고 가정합니다.live-db.example.internal

> cat client_db.list
client01_dbname
client02_dbname
client03_dbname
...
...
client_template

기본 솔루션

해결책은 다음과 같습니다.GNU 병렬 apt install parallel각 데이터베이스에 대해 mysqldump를 병렬로 실행하는 데 사용됩니다.

parallel -j2 -a client_db.list mysqldump -uroot -pXXXXXXXXX -hlive-db.example.internal \
                                         --single-transaction \
                                         --skip-lock-tables {} '>' ./backup/{.}.sql

세부 사항

-j2RDS 인스턴스의 vCPU 수에 따라 mysqldump가 두 데이터베이스에서 동시에 실행됨을 나타냅니다.

출력은 다음과 같습니다:

ls -lh
total 3.4G
-rw-r--r-- 1 jenkins jenkins  26M Jun  4 10:56 client01_dbname.sql
-rw-r--r-- 1 jenkins jenkins  26M Jun  4 10:54 client02_dbname.sql
-rw-r--r-- 1 jenkins jenkins  26M Jun  4 10:54 client03_dbname.sql
...
...
-rw-r--r-- 1 jenkins jenkins  26M Jun  4 10:54 client_template.sql

관련 정보