0

我使用两种不同的方法来备份我的 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 仅用于身份验证,没有其他选项。

4

1 回答 1

2

有很多不同之处。

  1. 在 A 中,您正在写入 gzip,它会在写入磁盘之前压缩数据。B 编写可以大 5-10 倍的普通 sql 文件(来自我的数据库的结果)。如果您的性能受磁盘限制,这可能是解决方案

  2. -c = A 中未指定“完整插入”

  3. -q 未在 A 中指定

  4. 对于大型数据库INFORMATION_SCHEMA,使用 mysql 查询可能会很痛苦(尝试执行SELECT * FROM information_schema.columns。对于 B,每个转储都必须执行这些查询,而 A 只需执行一次。

于 2012-07-04T09:07:20.923 回答