AutoMysqlBackup –lock-tables = false
我正在嘗試使用
AutoMysqlBackup
腳本來執行我的應用程序的每日備份。不幸的是,在第一次嘗試時,它並沒有像我想像的那樣為我服務。我相信腳本使用了該
--lock-tables=true
參數,它使我的應用程序停止工作。如果是這種情況,我怎樣才能使腳本不鎖定表?(所以我的應用程序可以繼續執行)?
謝謝你。
好的,不是很熟悉那個軟體,但是:
- 它是一個 shell 腳本,所以編輯起來很簡單(理論上)。當然,它是一個約 2200 行的 shell 腳本。
- 我認為–lock-tables 來自–opt,它在函式頂部指定(快速瀏覽)。
parse_configuration
你可以在--skip-lock-tables
那裡添加。- 它使用 mysql 實用程序,因此您也可以以
.my.cnf
正常方式添加它。一般來說:
您沒有使用 InnoDB,而是使用 MyISAM,因此您沒有事務。所以你不能使用
--single-transaction
.因此,您需要鎖定以確保一致性。即使有鎖定,也不能保證(更有可能)。但這與您在正常操作中得到的保證一樣多。認真考慮一下 InnoDB(但請閱讀文件,先研究並測試,以確保它不會破壞您的應用程序)。
如果禁用鎖定,您可能會:
- 開始備份
- 備份表 A。
- 從 A 中刪除一條記錄,以及 B 中的子記錄。
- 備份表 B.
- 您的備份現在包含 A 中的一條記錄,該記錄指向 B 中不存在的記錄。換句話說,它不一致。
有更廣泛使用的 MySQL 備份解決方案。也許您應該切換到其中之一。更容易找到更多人使用的軟體的幫助(而且它也往往經過更好的測試)。
您可能認為您有備份,但直到您真正成功地進行了恢復,最好是從裸機(新格式化的硬碟)恢復。理想情況下,您會定期執行此操作,並且最好將其自動化。這並不特定於 MySQL,它適用於所有備份。
有一個解決方案(除了切換到 InnoDB):您可以在從屬伺服器上執行備份。是否鎖定所有表或
SLAVE STOP SQL_THREAD
在備份期間都沒有關係,因為這對主數據庫無關緊要。這是無停機解決方案。無論如何,您都應該擁有此伺服器,作為熱/熱備用伺服器,以防主伺服器發生故障。還有另一種解決方案,可以最大限度地減少停機時間:將數據庫放在 LVM 卷上,執行 a
FLUSH TABLES WITH READ LOCK
,拍攝 LVM 快照,然後釋放讀取鎖定(斷開連接會執行此操作)。然後,您可以從快照中進行備份。這是“我買不起另一台機器”的解決方案。