我使用两种不同的方式来备份我的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仅用于身份验证,那里没有其他选项。
答案 0 :(得分:2)
有许多不同之处。
在A中,您正在写入gzip,它会在写入磁盘之前压缩数据。 B写的普通sql文件可能大5-10倍(来自我的数据库)。如果您的性能受磁盘限制,则可能是解决方案
-c =“完整插入”未在A
-c未在A
对于大型数据库INFORMATION_SCHEMA
查询可能是一个痛苦的问题(尝试执行SELECT * FROM information_schema.columns
。对于B,每个转储必须执行这些查询,而A必须只执行一次。