我使用两种不同的方式来备份我的mysql数据库。带有--all-databases的mysqldump比将单个数据库中的每个数据库都转储的循环要快得多,并且性能要好得多。为什么?以及如何提高循环版本的性能



/usr/bin/mysqldump --single-transaction --all-databases  | gzip > /backup/all_databases.sql.gz


甚至可以很好地循环遍历65个数据库:

nice -n 19 mysqldump --defaults-extra-file="/etc/mysql/conf.d/mysqldump.cnf" --databases -c xxx -q > /backup/mysql/xxx_08.sql
nice -n 19 mysqldump --defaults-extra-file="/etc/mysql/conf.d/mysqldump.cnf" --databases -c dj-xxx -q > /backup/mysql/dj-xxx_08.sql
nice -n 19 mysqldump --defaults-extra-file="/etc/mysql/conf.d/mysqldump.cnf" --databases -c dj-xxx-p -q > /backup/mysql/dj-xxx-p_08.sql
nice -n 19 mysqldump --defaults-extra-file="/etc/mysql/conf.d/mysqldump.cnf" --databases -c dj-foo -q > /backup/mysql/dj-foo_08.sql


mysqldump.cnf仅用于身份验证,那里没有其他选项。

最佳答案

有许多不同之处。


在A中,您正在写入gzip,后者会在写入磁盘之前先压缩数据。 B编写普通的sql文件,该文件可以大5到10倍(来自我的数据库的结果)。如果您的性能受磁盘限制,这可能是解决方案
-c =在A中未指定“完全插入”
在A中未指定-q
对于大型数据库,INFORMATION_SCHEMA查询对于mysql可能会很麻烦(尝试执行SELECT * FROM information_schema.columns。对于B,每个转储都必须执行这些查询,而A只能执行一次。

10-07 13:28
查看更多