Bash パラレル MySQL ダンプ

Bash パラレル MySQL ダンプ

AWS には、それぞれサイズが 1~2 GB と推定される 100 を超えるクライアントデータベースを持つプロジェクトがあります。標準のAWS RDS毎日のスナップショットではなく、mysqldumpを介して各データベースを毎日バックアップする必要があります。

Bashでは、リストを繰り返し、各データベースを順番にダンプするのに数時間かかることがあります。私の質問は

Bashフォークを実行し、データベースを並列にダンプすることをお勧めしますか?

ベストアンサー1

client_db.listデータベース名のリストを含むファイルがあり、すべてのデータベースが1つの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

おすすめ記事