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
세부 사항
-j2
RDS 인스턴스의 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