Mysql
直接從 LVM 快照複製數據庫文件是否安全?
我看到了兩種使用 LVM 快照備份數據庫的不同方法。本文建議生成另一個 MySQL 實例來執行 SQL 轉儲。MYSQL 性能部落格建議直接複製數據庫文件是安全的:
- 將數據複製到備份。通常,您可以在備份時跳過慢查詢日誌和錯誤日誌。你也可以跳過大部分二進制日誌——但是如果你的一些從伺服器遠遠落後,你可能想要保留一些最後的二進制日誌以防萬一,或者你可以假設在從備份恢復的情況下,你需要恢復從伺服器好吧,在備份過程中跳過二進制日誌。
對於
InnoDB
格式的數據庫,我只備份/var/lib/mysql/
文件夾可以嗎?
對於 InnoDB 和其他事務數據儲存,純粹從引用完整性的角度來看應該沒問題,因為正常的崩潰恢復過程將推出備份時正在進行的任何不完整的事務,但存在潛在的問題,這意味著它是不建議您以這種方式備份數據庫:
- 任何多事務業務邏輯都可能部分完成,從應用程序邏輯的角度來看,記錄的複雜組合處於奇怪的狀態(但與數據庫強加的完整性規則一致)。如果您的應用程序設計良好並且不存在此類流程,那麼這不是問題(但即使設計良好,您也需要讓經驗不足的編碼人員無法完全正確)
- 恢復將需要更長的時間,因為此回滾和其他完整性檢查需要時間才能進行(您可以通過立即在其他地方恢復備份然後再次備份來緩解這種情況)
- 您的備份過程仍在與可能會影響性能的主應用程序數據庫訪問競爭
- 如果您的數據文件並非全部位於同一個文件系統中(即,如果您將它們分佈在不同的主軸集上以提高某些工作負載的性能),則您不能在完全相同的點為每個文件系統/塊設備拍攝快照文件,因此您的數據完整性可能會在此處失敗
- 如果您要備份任何不符合 ACID 的內容(myISAM 表、外部數據,例如儲存在文件系統中的二進製文件),那麼您可能也會遇到類似的問題。
如果您可以應付少量的停機時間,那麼您可以通過以下方式將其保持在最低限度:
- 停止數據庫服務
- 拍攝 LVM 快照
- 立即啟動數據庫服務
- 進行備份(當服務仍在執行時)
- 完成後刪除 LVM 快照
這樣,您只需停止和重新啟動數據庫服務所需的時間長度(啟動 LVM 快照應該幾乎是瞬時的)。
如果您無法承受這種短暫的服務中斷的任何時間,您也許可以設置複製,然後您可以從中備份:
- 暫停複製到從站
- 停止從數據庫服務
- 拍攝 LVM 快照
- 立即啟動數據庫服務並恢復複製
- 進行備份(當服務仍在執行時)
- 完成後刪除 LVM 快照
事實上,如果備份時間不會太長以至於恢復複製變得有問題,那麼您就不需要 LVM 快照。