Mysql

我可以讓我的腳本“帶讀鎖的刷新表;”超時嗎?

  • December 7, 2020

我有一個執行 MySQL 5.5 的 Enterprise Linux 6 系統。我正在嘗試使用LVM 來擷取每周文件系統快照

然而,正如我們許多人所經歷的那樣,“使用讀鎖刷新表;” 可能導致死鎖情況,創建查詢積壓,填滿連接池並有效地使系統離線。事實上,昨晚我的“帶讀鎖的刷新表;” 由於長時間執行的查詢,直到執行後 8 小時才完成。

如果我使用這樣的腳本執行 MySQL 快照,我可以以某種方式超時“帶讀鎖的刷新表;”。如果一段時間後它沒有執行,我想殺死它並避免不可避免的死鎖。

mysql -u root <<-MYSQL_INPUT
FLUSH TABLES WITH READ LOCK;
SYSTEM /usr/local/bin/mysql-create-lvm-snapshot;
UNLOCK TABLES;
\q
MYSQL_INPUT

沒有可靠的中斷方式FLUSH TABLES WITH READ LOCK。我不同意前面的答案。您可以嘗試殺死FLUSH所有您想要的查詢。通常這只會掛起,直到原始命令完成。

但是,對您來說有一些好消息。您應該知道,FLUSH TABLES WITH READ LOCK拍攝 LVM 快照並不是絕對必要的。

在以下情況下是必需的:

  • 您對時間點恢復感興趣(通過二進制日誌應用增量恢復)
  • 您有很多非事務性(即 MyISAM)表被寫入
  • 您正在對主伺服器執行快照,並希望基於快照創建從伺服器。

如果您的數據庫是面向 InnoDB 的,並且您的 MyISAM 系統表沒有發生任何有趣的事情(即沒有人創建過程、授予權限等),那麼您FLUSH只需要這些表就足夠了。

所有 InnoDB 的東西,你都可以拍快照。FLUSHing沒有任何好處。InnoDB 無論如何都會進行適當的恢復。

FLUSH TABLE當您希望能夠重建從屬伺服器或以其他方式使用二進制日誌時,需要獲取二進制日誌文件和位置。

引用自:https://dba.stackexchange.com/questions/52147