我在 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