MySQL-避免在备份期间锁定表


3

我正在使用mysqldump在服务器上运行每晚备份。不幸的是,由于备份期间表已被锁定,几乎每天晚上半个小时左右就会使我的网站瘫痪。

根据进程列表,有时似乎不相关表的查询有时会被阻塞,例如“ INSERT INTO A”处于锁定状态几分钟,而唯一正在运行的查询仅触及表B。

有没有更好的方法来执行这样的备份?

Answers:


7

您有两种选择:

--skip-lock-tables答:使用mysqldump选项。您的表不会被锁定,但是您的备份可能不一致(取决于您的架构:如果您的数据库事务一次接触多个表,并且一个表已经备份而另一个未备份,例如:两个表:客户如果先备份了客户,然后插入了新的客户/订单对,则最终可能会得到没有客户备份的订单。

这个问题是mysqldump默认锁定所有表的主要原因。如果此问题不适用于您,则跳过mysql中的表锁定是最简单的解决方案。

B.使用其他备份方法。例如:使用读取锁刷新表,创建LVM快照,解锁表,装入LVM快照并备份数据。它变得快速,比简单的mysqldump复杂得多。Google的“带有LVM快照的mysql备份”,提供了许多脚本和教程。

如果您的MySQL数据不在LVM卷上,则可以创建一个从属MySQL服务器并备份它,而无需接触主服务器,因此锁定发生在从属服务器上,并且主服务器始终是免费的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.