Mysql
我可以讓我的腳本“帶讀鎖的刷新表;”超時嗎?
我有一個執行 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 的東西,你都可以拍快照。
FLUSH
ing沒有任何好處。InnoDB 無論如何都會進行適當的恢復。
FLUSH TABLE
當您希望能夠重建從屬伺服器或以其他方式使用二進制日誌時,需要獲取二進制日誌文件和位置。