Bash 并行 MySQL 转储

Bash 并行 MySQL 转储

我在 AWS 上有一个项目,最终将拥有超过 100 个客户端数据库,每个数据库的大小估计为 1~2GB。我需要通过 mysqldump 对每个数据库进行每日备份,而不是标准的 AWS RDS 每日快照。

在 bash 中,我循环遍历一个列表,并一个接一个地转储每个数据库,这可能需要几个小时。我的问题是

是否建议并行执行 bash fork 并转储数据库?

答案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表示同时对2个数据库执行mysqldump,基于RDS实例的vCPU数量

输出将是:

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

相关内容