MySQL資料庫備份和恢復方案小結

2021-08-13 20:28:58 字數 1723 閱讀 9126

這兩天在調研mysql資料庫的備份和恢復方案,備份物件是對大量innodb表,或者加上少量的myisam表。

innodb備份常見問題:

檔案一致性:資料檔案、快取、日誌檔案必須保持嚴格一致。加鎖的方法沒法保證一致性,因為innodb後台重新整理資料是非同步進行的。

資料一致性:不能一次鎖住一張表,這個備份的是不同時刻的表資料;如果一次鎖住所有表,innodb的mvcc機制會增加undo日誌,同時ddl操作的話也會有風險。

複製:如果支援主備結構,還要快取主備同步的資訊。

所以,要在不停止mysql的情況下對innodb表進行熱備份,檔案一致性和資料一致性很難保證。

本人嘗試了以下備份和恢復方法:

1. 使用mysqldump工具,類似的有mypump(5.7.11之後有用,多執行緒匯出,能實現資料一致性). 這種方法適合在資料量比較少的情況下使用(個人認為資料量<100g可行),在一台30g的資料庫上進行備份,備份出來的資料檔案8g(因為沒有匯出來索引等其他資料庫資訊,因此檔案通常比資料庫小的多),使用時間8分鐘,恢復時間用了差不多辦個小時。順便說一句,匯出時使用order-by-primary引數應該可以提高幾倍的匯入效能(和mysql的聚集索引有關)

2. mylvnbackup檔案系統快照:要求所有的資料檔案都在lvm卷上,由於我的測試系統不滿足該條件,沒有測試成功。

3.san\drbd\raid:硬體層次的拷貝,不是真正的備份,在主資料庫上誤操作刪除資料庫,沒法恢復。

4.mysql enterprisebackup: oracle官方出品,直接基於物理檔案備份。收費軟體, 每台伺服器$5000 ,太貴了,直接放棄。

這個工具有個很大的優點:支援windows環境上mysql資料庫備份。我查了很多物理備份工具都沒有這個功能。

5.percona xtrabackup: 該工具功能十分強大,能滿足中型和部分大型生產環境。該工具也是基於資料庫物理檔案進行備份,現執行物理備份,然後使用--prepare選項對拷貝的檔案進行一次內部崩潰恢復,以便產生一致性備份。該工具可以進行全量備份和增量,我在一台測試環境上測試,30g的資料庫備份之後用了17分鐘,cpu佔用率也不高,備份後大小是20g,幾個小時後基於上次的全量備份做了次增量備份,居然花了13分鐘。

該工具全量備份效率應該沒有問題。增量備份耗時有點超出意料。後續再測試下。

關於該工具的詳細資訊:

6. zmanda recover manager: 有免費和商業版兩種,商業版可以提供網頁版的管理工具,並且支援windows環境上的mysql備份

該工具的原理是先建立快照,再根據快照建立全量備份。增量備份採用的是二進位制日誌。

該工具的優點可以使用web端進行管理,定製備份策略,監控備份狀態。

該工具的配置檔案可以配置採用邏輯備份還是raw(物理備份),但是我在實際測試中發現3.0版本不能對5.6版本的mysql進行物理備份,不管配置的備份方式是什麼,該工具都使用mysqldump進行邏輯備份。難道是程式bug?優點坑。

有興趣的朋友可以研究下:

要實現資料庫的安全備份,我的理解是必須要有以下幾點:

1. 全量備份(一周或者二周一次)

2.二進位制日誌:能夠實現基於時間點的恢復。 根據業務場景選擇適當的時間間隔定時備份二進位制日誌,如rsync。

3.至少要有一台備機:否則主機出問題後,恢復資料庫期間會造成業務中斷

4.完備的資料恢復測試:根據恢復後的日誌檔案、資料檔案的大小、關鍵事件資訊驗證備份資訊是否有效。

備份和恢復是個吃力不討好的活,功能正常沒有功勞,出點錯誤都是驚天動地的大事。

MySQL資料庫備份和恢復

注意事項 1.備份前,需要將mysql服務停止 etc init.d mysql stop 2恢復資料資料庫時,需要先建立好乙個資料庫 不一定同名 然後將備份出來的檔案 注意,不是目錄 複製到對應的mysql資料庫目錄中 3.使用這一方法備份和恢復資料庫時,需要新舊的mysql版本一致,否則可能會出...

MySQL資料庫備份和恢復

1.備份 可將資料錄匯出到 sql檔案中 使用linux的mysqldump命令 mysqldump u 使用者名稱 p 資料庫名 sql 2.恢復 匯入 sql檔案到某個資料庫中 通過linux的mysql命令恢復資料 mysql u 使用者名稱 p 新資料庫名 sql 3.注意點 1.使用mys...

mysql資料庫備份和恢復

備份mysql資料庫的命令 mysqldump hhostname uusername ppassword databasename backupfile.sql 備份mysql資料庫為帶刪除表的格式 備份mysql資料庫為帶刪除表的格式,能夠讓該備份覆蓋已有資料庫而不需要手動刪除原有資料庫。mys...