Linux
如何在拍攝 LVM/ZFS 快照之前暫停 MySQL?
如何指示 MySQL 完成所有“進行中”事務,但延遲啟動新事務(不啟動客戶端),直到我拍攝 ZFS 或 LVM 快照(不到一秒)。
例如
- 暫停 MySQL,等待“進行中”事務完成
- 同步到磁碟
- 拍攝 ZFS/LVM 快照
- resume MySQL 這樣做的目的是為了備份目的獲得一致的快照。第 2 步只需要幾分之一秒。
第一步不應導致客戶端錯誤,只是在到達第四步之前暫停很短的時間。
是否有可以執行 1 和 4 的 MySQL 命令?這些是什麼?
一個 hacky 方法是等待交易完成:
mysql> FLUSH LOCAL TABLES; Query OK, 0 rows affected (11.31 sec)
然後獲得讀鎖:
mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (22.55 sec)
現在所有查詢都被阻止(即它們等待鎖定被釋放),直到您的會話結束。請注意 - 您仍然必須等到所有交易完成。根據您的工作量,這可能需要一段時間(更新幾百萬行……)。
你可以用你最喜歡的腳本語言對此進行編碼。
但說真的 - 為什麼不使用Xtrabackup呢?它確實為您處理了一個一致的 mysql 快照,您可以將其轉儲到文件系統上,然後 zfs/lvm 對其進行快照。