如何减慢MySQL转储速度以免影响服务器上的当前负载?

问题描述 投票:53回答:4

虽然做一个MySQL转储很容易,但我有一个实时专用的MySQL服务器,我想设置复制。为此,我需要转储数据库以导入到我的复制从站。

当我进行转储时,问题出现了,MySQL全力以赴,并将资源绑定到连接它的站点。我想知道是否有办法将转储查询限制为低优先级状态,优先级为实时连接?这个想法是来自外部站点的负载不受MySQL进行完全转储的努力的影响......

mysql backup replication mysqldump backup-strategies
4个回答
133
投票

我有非常大的数据库,有数万个表,其中一些表在10百万条目中有多达5GB的数据。 (我运行一个受欢迎的服务)...在备份这些数据库时,我总是很头疼。使用默认的mysqldump,它会迅速使服务器负载失控并锁定一切......影响我的用户。尝试停止进程可能会导致崩溃的表以及恢复这些表期间的大量停机时间。

我现在用...

mysqldump -u USER -p --single-transaction --quick --lock-tables=false DATABASE | gzip > OUTPUT.gz

dev.mysql.com上的mysqldump reference甚至说......

要转储大型表,您应该将--single-transaction选项与--quick结合使用。

说没有关于依赖于InnoDB的数据库,我的是myISAM,这对我来说很漂亮。服务器负载几乎完全不受影响,我的服务在整个过程中像劳力士一样运行。如果您有大型数据库并且备份它们会影响您的最终用户......这就是解决方案。 ;)


39
投票

如果使用InnoDB表,请使用mysqldump的--single-transaction和--quick选项


-2
投票

使用nice和gzip命令以最低优先级执行命令。

nice -n 10 ionice -c2 -n 7 mysqldump db-name | gzip > db-name.sql.gz 

-3
投票

您可以在mysqldump命令前加上以下内容:

ionice -c3 nice -n19 mysqldump ...

哪个会以低IO和CPU优​​先级运行它,因此应该限制它的影响。

注意,这只会延迟MySQL执行之间的时间。脚本本身仍然会像以前一样密集,只是脚本之间的间隔时间更长。

© www.soinside.com 2019 - 2024. All rights reserved.