问题描述
|
尽管执行MysqL转储很容易,但我有一个实时专用MysqL服务器,希望在其上设置复制。为此,我需要转储数据库以导入到复制从属服务器。
问题出在我进行转储时,MysqL会全力以赴,并将资源绑定到连接到它的站点。我想知道是否有一种方法可以将转储查询限制为低优先级状态,而优先级优先于实时连接?这个想法是,外部站点的负载不受MysqL进行完全转储的影响...
解决方法
我有非常庞大的数据库,其中包含成千上万个表,其中某些表在数以千万计的条目中具有高达5GB的数据。 (我运行一项流行的服务)...备份这些数据库时,我总是头疼。使用默认的mysqldump,它会迅速使服务器负载失控,并锁定所有内容,从而影响我的用户。尝试停止该过程可能导致表崩溃,并在恢复这些表期间导致大量停机。
我现在用...
mysqldump -u USER -p --single-transaction --quick --lock-tables=false DATABASE | gzip > OUTPUT.gz
dev.mysql.com上的mysqldump参考甚至说...
要转储大表,应结合使用--single-transaction
--quick选项。
不用说依赖数据库是InnoDB,我的是myISAM,这对我来说效果很好。服务器负载几乎完全不受影响,并且我的服务在整个过程中像劳力士一样运行。如果您有大型数据库,并且对其进行备份会影响您的最终用户,这就是解决方案。 ;)
,如果使用InnoDB表,则对mysqldump使用--single-transaction和--quick选项
,使用nice和gzip命令以最低优先级执行该命令。
nice -n 10 ionice -c2 -n 7 mysqldump db-name | gzip > db-name.sql.gz
,您可以在mysqldump命令前添加以下内容:
ionice -c3 nice -n19 mysqldump ...
它将以较低的IO和CPU优先级运行它,因此应限制它的影响。
注意,这只会延迟MySQL执行之间的时间。脚本本身仍将像以前一样密集,只是脚本之间的中断时间更长。