Linux

如何在拍攝 LVM/ZFS 快照之前暫停 MySQL?

  • December 8, 2017

如何指示 MySQL 完成所有“進行中”事務,但延遲啟動新事務(不啟動客戶端),直到我拍攝 ZFS 或 LVM 快照(不到一秒)。

例如

  1. 暫停 MySQL,等待“進行中”事務完成
  2. 同步到磁碟
  3. 拍攝 ZFS/LVM 快照
  4. 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 對其進行快照。

引用自:https://unix.stackexchange.com/questions/315384