我每晚都会手动执行一次 mysqldump。
我刚刚注意到,完成之后,当我尝试访问网站时,速度非常慢。查看 free -mh 后,我注意到服务器现在正在交换,而在 mysqldump 之前则不是这样。
在这种情况下我该怎么办?每次备份时都重新启动服务器?这似乎不太有效。
转储后,我的数据库文件原始大小为 1.1gb。
答案1
我们每晚都会转储更大的 MySQL 数据库,没有任何交换问题。以下是执行的命令行:
mysqldump --host=$HOST -u $USER --password=$PASSWORD --max_allowed_packet=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。如果这有帮助,那么它可能与缓存有关