如何通過讀操作熱備份mysql從數據庫
我有一個大小約為 120GB 的從數據庫,應用程序正在其上執行選擇語句。
我還有一個託管公司提供給我的備份系統(Acronis 備份)。不幸的是,備份代理不支持 mysql。它可以執行文件備份和整機備份 - 它可以製作機器快照。它還可以在備份之前/之後以及創建快照之前/之後執行腳本。
flush tables with read lock
在製作快照並在之後刪除鎖定之前,我進行了簡單的腳本製作。不幸的是,由於長時間執行的 select 語句,獲取鎖會花費大量時間。腳本等待鎖定一段時間(300 秒),然後終止會話。我認為我將能夠取消獲取鎖並允許應用程序執行。不幸的是,這似乎是不可能的(或者我無法正確地做到這一點)。
是否有任何命令序列可以讓我創建有效的快照並且不會長時間中斷數據庫功能?例如,將:
- 停止奴隸
- 沖洗表
- 製作快照
- 啟動奴隸
或類似的伎倆(主和從之間的一些數據去同步對我的應用程序來說不是一個大問題)?
我正在尋找一些替代方案,例如
xtrabackup
或mysqldump
進行備份並稍後簡單地複製文件,但是:
Xtrabackup
需要至少兩倍於數據庫的空間,因此,我無法使用它。
Mysqldump
與復製文件相比,恢復時間很長。考慮到上述情況,我希望堅持使用快照的“冷”備份或類似的解決方案
xtrabackup
,無需中間步驟即可提供壓縮數據。
這是我的做法(與您的建議類似)
- 終端 1:
FLUSH TABLES WITH READ LOCK
保持此會話/終端打開直到流程結束非常重要。等到您收到表現在已鎖定的消息。- 終端 2:創建快照。根據您使用的技術,這可能會有所不同。LVM 快照是一種常見的快照。
- 1號航站樓:
UNLOCK TABLES
- 從快照位置複製文件
在完成第 2 步之前,請務必不要關閉終端 1。
請注意,不需要停止從站。
這個連結會很有幫助。它使用 LVM 解釋了更多細節。
高溫高壓
這是 LVM 快照?這需要幾秒鐘,也許一分鐘?
我寧願完全停止從站,拍攝快照,然後啟動從站。我不完全相信關於讓 mysqld 活著的一些事情。
考慮使用自動保存和恢復 InnoDB 的 buffer_pool 的設置。(別擔心,它只將塊號寫入磁碟,而不是整個塊。)
更好的是擁有兩個(或更多)從屬設備和一個健壯的負載均衡器:告訴負載均衡器這個從屬設備“死了”;做備份;讓奴隸重新“線上”。