mysql 備份最佳實踐 MySQL備份的最佳實踐

2021-10-20 22:20:52 字數 3735 閱讀 3809

mysql相關事物的最佳實踐,除了效能調優、查詢優化和複製配置之外,另乙個重要的主題是備份。讓我們深入討論一下關於mysql備份的一些基礎知識和最佳實踐。

邏輯mysql備份

在mysql中,可以用兩種不同的形式進行備份。第一種形式,邏輯,是最普遍的。本質上,您需要建立所有必要的insert語句來重新填充表資料。該地區最流行的兩個工具是mysqldump和my dump。

mysqldump

這個工具從一開始就存在,並且支援許多不同的選項,太多了,在這篇文章中無法討論。

這裡有乙個簡單的例子,在對結果進行壓縮的同時,對「成員」資料庫進行邏輯備份。

mysqldump --single-transaction members | gzip - >members.sql.gz

如果您想對所有資料庫中的所有表進行完整備份,您可以這樣做:

mysqldump --single-transaction --all-databases | gzip - >full_backup.sql.gz

請注意–單筆交易標誌的使用。此標誌「通過轉儲中的所有表來建立一致的快照

單一交易。"如果不使用此標誌,則完整的備份可能包含相關表之間的不一致。

矛盾mysqldump最大的缺點之一是缺乏並行性。該工具從第乙個資料庫開始,按字母順序排列,然後一次轉儲乙個表。考慮乙個將資料插入表「alpha」和「zeta」的事務。現在備份開始了。當備份到達表「增量」時,另乙個事務從「zeta」中刪除。你的備份現在在阿爾法和澤塔之間不一致。

這就是為什麼–單筆交易標誌很重要。

mydumper

這mydumper工具是乙個開源的第三方工具,最初由domas mituzas,現在由馬克斯·布比維護。該工具的功能類似於mysqldump,但提供了許多改進,如並行備份、一致讀取和內建壓縮。mydumper的另乙個好處是每個單獨的表都被轉儲到乙個單獨的檔案中。這使得單個表的恢復大大優於mysql dump(mysql dump將所有內容壓縮到乙個檔案中)。

mydumper --compress

上述命令將連線到您的本地mysql伺服器,並開始所有資料庫中所有表的一致轉儲。如上所述,每個表都將在轉儲目錄中建立乙個單獨的檔案,該檔案以此模式命名為「export-yyyyymmdd-hhmmss」。每個轉儲檔案都將使用gzip單獨壓縮。

配套工具myloader也包括在內。該工具允許並行恢復表;mysqldump做不到的事情。

物理mysql備份

percona xtrabackup

xtrabackup --backup --parallel 4 --compress --target-dir /var/backup/

上述命令將連線到您的mysql伺服器,並執行乙個壓縮(使用qpress)並行備份,將結果資料檔案儲存到/var/backup/。在這個目錄中,你會找到所有熟悉的檔案,比如ibdata1、mysql.ibd和所有其他檔案。ibd檔案,代表你的資料。

您還可以將物理備份「流式傳輸」到單個歸檔:

xtrabackup --backup --parallel 4 --stream=xbstream > mybackup.xbstream

orxtrabackup --backup --stream=tar > mybackup.tar

注意:「tar」存檔不支援並行性)

還有,多虧了佩爾孔納xbcloud工具,您可以直接流向任何s3相容桶:

xtrabackup --backup --stream=xbstream | xbcloud put --storage=s3 mybackup_s3.blob

卷快照在某些情況下,備份所需的資料量太大,無法匯出物理備份(更不用說邏輯轉儲)。考慮資料集大於1tb的mysql伺服器。即使使用快速磁碟,執行物理備份也可能需要很多很多小時。

在這些情況下,使用底層檔案系統或磁碟裝置的快照功能執行物理備份要快得多。

lvm和zfs都有本地快照。在拍攝快照之前,請確保mysql已停止寫操作,並將大部分記憶體資訊重新整理到磁碟。這是乙個使用zfs的例子伊夫·特魯多:

mysql -e 'flush tables with read lock; show master status; ! zfs snapshot -r mysqldata/mysql@my_first_snapshot'

上面的例子將鎖定mysql中的所有表,防止來自其他事務的寫入,列印出當前的二進位制日誌位置資訊,然後轉義到執行zfs快照命令的外殼。一旦快照返回,到mysql的連線退出並解鎖所有表。

大多數雲提供商還支援其資料塊裝置的本機快照功能(即ec2、gpd)。該過程類似於上面的zfs例子。

驗證mysql備份

所以你有乙個很好的備份程式,遵循所有的最佳實踐。你怎麼知道備份成功了?你看了檔案的大小了嗎?您是否只檢查了建立的檔案?也許你只看了你使用的工具的退出**?

shlomi noach之前告訴我的percona實時會議"在驗證備份之前,您還沒有進行備份。"好建議。換句話說,您進行的每個備份都可以被視為薛丁格的備份;直到你驗證它,它工作嗎?

這裡的最佳實踐是使用您建立的備份簡單地恢復mysql伺服器;然而,是你創造了它。處理此恢復的機器不需要像源一樣強大;乙個簡單的虛擬機器可以管理這個任務,並且可以很好地實現自動化。

您可以使用mysql客戶端本身恢復mysqldump:

zcat my_full_backup.sql.gz | mysql

使用mydumper/myloader:

myloader --directory dump_dir --overwrite-tables --verbose=3

percona xtrabackup:

# prepare the backup

xtrabackup --prepare --parallel 4 --use-memory 4g --target-dir /var/backup

# copy backup to original location (ie: /var/lib/mysql), assuming backup taken on same host

xtrabackup --copy-back --target-dir /var/backup

# fix file permissions if necessary

chown -r mysql:mysql /var/lib/mysql

# start mysql

systemctl start mysql

# prepare the backup

xtrabackup --prepare --parallel 4 --use-memory 4g --target-dir /var/backup

# copy backup to original location (ie: /var/lib/mysql), assuming backup taken on same host

xtrabackup --copy-back --target-dir /var/backup

# fix file permissions if necessary

chown -r mysql:mysql /var/lib/mysql

# start mysql

systemctl start mysql

是的,percona xtrabackup確實需要更多步驟,但物理備份始終是最快的備份方式和最快的恢復方式。

總結有許多不同的方法來進行mysql備份。希望這篇文章能讓您在選擇備份方法時對一些最佳實踐有所了解。

還要考慮幾件事:

上述大多數工具都支援加密備份。請務必備份您的加密金鑰的副本!

一定要備份乙份 my.cnf

Exadata 備份恢復最佳實踐

exadata的備份恢復跟普通單機或者rac資料庫的備份恢復基本面是一樣的,但是針對多節點還是有一些優化的最佳實踐。今天就簡單談談針對exadata的備份和恢復。為充分利用exadata的i o能力和多節點的優勢,建議先在每個db節點上分配2個通道進行測試。另外,為了讓所有的db節點都能參與到備份任...

最佳實踐 Flutter 最佳實踐

最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高 質量 可讀性 可維護性和健壯性都非常重要。讓我們探索一些設計和開發flutter應用程式的最佳實踐。class enum typedef和extension應採用駝峰命名uppercamelcase規則。class mainscree...

手動備份MySQL資料庫 手動備份mysql資料庫

paths 檔案路徑 user 資料庫使用者名稱 pass 資料庫密碼 database 資料庫名 public static boolean backup string paths,string user,string pass,string database outstr sb.tostring...