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

Nil*_*ils 3 backup mysql mysqldump

我正在使用 mysqldump 在我的服务器上运行每晚备份。不幸的是,这几乎每晚杀死我的站点半小时左右,因为表在备份期间被锁定。

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

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

hai*_*img 7

您有两个选择:

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

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

B. 使用其他一些备份方法。例如:使用读锁刷新表、创建 LVM 快照、解锁表、挂载 LVM 快照并备份数据。这变得很快,比简单的 mysqldump 复杂得多。谷歌“使用 LVM 快照的 mysql 备份”,有许多可用的脚本和教程。

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