我可以让我的脚本“FLUSH TABLES WITH READ LOCK;”超时吗?

Ste*_*ski 1 mysql backup snapshot

我有一个运行 MySQL 5.5 的 Enterprise Linux 6 系统。我正在尝试使用LVM 捕获每周文件系统快照

然而,正如我们许多人所经历的那样,“用读锁刷新表;” 可能会导致死锁情况、造成查询积压、填满连接池并导致系统脱机。事实上,昨晚我的“用读锁刷新表;” 由于长时间运行的查询,直到执行后 8 小时才完成。

如果我使用这样的脚本执行 MySQL 快照,我可以以某种方式使“FLUSH TABLES WITH READ LOCK;”超时吗?如果它在一段时间后没有执行,我想杀死它并避免不可避免的死锁。

mysql -u root <<-MYSQL_INPUT
FLUSH TABLES WITH READ LOCK;
SYSTEM /usr/local/bin/mysql-create-lvm-snapshot;
UNLOCK TABLES;
\q
MYSQL_INPUT
Run Code Online (Sandbox Code Playgroud)

Shl*_*ach 5

没有可靠的中断方法FLUSH TABLES WITH READ LOCK。我不同意之前的回答。您可以尝试根据FLUSH需要终止查询。通常,这只会挂起,直到原始命令完成。

不过,有一些好消息要告诉你。您应该意识到,这FLUSH TABLES WITH READ LOCK并不是拍摄 LVM 快照所必需的。

如果出现以下情况,则需要:

  • 您对时间点恢复感兴趣(通过二进制日志应用增量恢复)
  • 您有很多非事务性(即 MyISAM)表被写入
  • 您正在针对主服务器运行快照,并希望基于该快照创建从服务器。

如果您的数据库是面向 InnoDB 的,并且您的 MyISAM 系统表没有发生任何有趣的事情(即没有人创建过程、授予权限等),那么您只需要FLUSH这些表就足够了。

所有InnoDB的东西,你都可以拍快照。ing 没有任何好处FLUSH。无论如何,InnoDB 都会进行适当的恢复。

当您希望FLUSH TABLE能够重建从站或以其他方式使用二进制日志时,需要获取二进制日志文件和位置。