Linux

AutoMysqlBackup –lock-tables = false

  • January 20, 2017

我正在嘗試使用AutoMysqlBackup腳本來執行我的應用程序的每日備份。不幸的是,在第一次嘗試時,它並沒有像我想像的那樣為我服務。

我相信腳本使用了該--lock-tables=true參數,它使我的應用程序停止工作。

如果是這種情況,我怎樣才能使腳本不鎖定表?(所以我的應用程序可以繼續執行)?

謝謝你。

好的,不是很熟悉那個軟體,但是:

  • 它是一個 shell 腳本,所以編輯起來很簡單(理論上)。當然,它是一個約 2200 行的 shell 腳本。
  • 我認為–lock-tables 來自–opt,它在函式頂部指定(快速瀏覽)parse_configuration你可以在--skip-lock-tables那裡添加。
  • 它使用 mysql 實用程序,因此您也可以以.my.cnf正常方式添加它。

一般來說:

  • 您沒有使用 InnoDB,而是使用 MyISAM,因此您沒有事務。所以你不能使用--single-transaction.

  • 因此,您需要鎖定以確保一致性。即使有鎖定,也不能保證(更有可能)。但這與您在正常操作中得到的保證一樣多。認真考慮一下 InnoDB(但請閱讀文件,先研究並測試,以確保它不會破壞您的應用程序)。

  • 如果禁用鎖定,您可能會:

    1. 開始備份
    2. 備份表 A。
    3. 從 A 中刪除一條記錄,以及 B 中的子記錄。
    4. 備份表 B.
    5. 您的備份現在包含 A 中的一條記錄,該記錄指向 B 中不存在的記錄。換句話說,它不一致。
  • 有更廣泛使用的 MySQL 備份解決方案。也許您應該切換到其中之一。更容易找到更多人使用的軟體的幫助(而且它也往往經過更好的測試)。

  • 您可能認為您有備份,但直到您真正成功地進行了恢復,最好是從裸機(新格式化的硬碟)恢復。理想情況下,您會定期執行此操作,並且最好將其自動化。這並不特定於 MySQL,它適用於所有備份。

有一個解決方案(除了切換到 InnoDB):您可以在從屬伺服器上執行備份。是否鎖定所有表或SLAVE STOP SQL_THREAD在備份期間都沒有關係,因為這對主數據庫無關緊要。這是無停機解決方案。無論如何,您都應該擁有此伺服器,作為熱/熱備用伺服器,以防主伺服器發生故障。

還有另一種解決方案,可以最大限度地減少停機時間:將數據庫放在 LVM 卷上,執行 a FLUSH TABLES WITH READ LOCK,拍攝 LVM 快照,然後釋放讀取鎖定(斷開連接會執行此操作)。然後,您可以從快照中進行備份。這是“我買不起另一台機器”的解決方案。

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