执行 mysql 转储会导致交换问题

执行 mysql 转储会导致交换问题

我每晚都会手动执行一次 mysqldump。

我刚刚注意到,完成之后,当我尝试访问网站时,速度非常慢。查看 free -mh 后,我注意到服务器现在正在交换,而在 mysqldump 之前则不是这样。

在这种情况下我该怎么办?每次备份时都重新启动服务器?这似乎不太有效。

转储后,我的数据库文件原始大小为 1.1gb。

答案1

我们每晚都会转储更大的 MySQL 数据库,没有任何交换问题。以下是执行的命令行:

mysqldump --host=$HOST -u $USER --password=$PASSWORD --max_allowed_pa​​cket=512M --port=3306 --single-transaction --skip-add-locks --quick -e 数据库名称

您是否包括“--quick”选项?这会阻止 mysqldump 在单个查询中检索大型表。这可能是迫使您的服务器进行交换的原因。它使 mysqldump 逐行获取大型表。

答案2

如果您省略 mysqldump 的 --quick 选项,服务器将在将整个响应发送给客户端之前对其进行缓冲,这很容易导致与大表的交换。

此外,如果您将转储保存到运行服务器的主机,它可能会与 mysqld 争夺缓存。如果您还没有做这两项事情,请尝试使用 --quick 并通过网络运行 mysqldump。

祝你好运!

答案3

Mysqldump 在备份时锁定所有必要的表,请尝试使用 mysqlhotcopy。

答案4

听起来 mysqldump 可能将比必要多得多的数据加载到缓存中。无论如何,如果您的服务器交换,则可能是您的缓存值设置得太高了。

尝试SHOW GLOBAL STATUS在转储之前和之后运行,并比较值

另外,尝试在转储后重新启动 mysql。如果这有帮助,那么它可能与缓存有关

相关内容