隨著企業(yè)和應(yīng)用程序越來越依賴 MySQL 數(shù)據(jù)庫來管理其關(guān)鍵數(shù)據(jù),確保數(shù)據(jù)可靠性和可用性變得至關(guān)重要。在這個數(shù)字信息時代,強(qiáng)大的備份和恢復(fù)策略是應(yīng)用程序穩(wěn)定性的支柱。 本文中,我們將回顧所有常用的 MySQL 備份和恢復(fù)策略,它們是任何應(yīng)用程序的基石。對應(yīng)您的特定場景,有多個選項(xiàng)可供選擇,每個選項(xiàng)都要求我們考慮相關(guān)問題以做出明智的決策。
為什么 MySQL 備份很重要?
MySQL 備份在保護(hù)數(shù)據(jù)完整性、防止各種不可預(yù)見的災(zāi)難、硬件故障、數(shù)據(jù)丟失、損壞和意外刪除方面發(fā)揮著關(guān)鍵作用。如果沒有可靠的備份,數(shù)據(jù)丟失的后果可能會很嚴(yán)重。企業(yè)面臨運(yùn)營中斷、財(cái)務(wù)損失、聲譽(yù)受損甚至合規(guī)違規(guī)的風(fēng)險。了解 MySQL 備份的重要性以及它們?nèi)绾谓档瓦@些風(fēng)險將有助于組織保證數(shù)據(jù)一致性、業(yè)務(wù)連續(xù)性,并確保數(shù)據(jù)在需要時安全且可恢復(fù)。
RTO 是什么?
RTO(RecoveryTimeObjective,恢復(fù)時間目標(biāo))是故障發(fā)生到業(yè)務(wù)恢復(fù)能時間點(diǎn)的最大長度。與之相關(guān)的問題是: 多久可以恢復(fù)?
RPO 是什么?
RPO(RecoveryPointObjective,恢復(fù)點(diǎn)目標(biāo))是故障發(fā)生后業(yè)務(wù)系統(tǒng)可容忍的數(shù)據(jù)丟失量。與之相關(guān)的問題是: 會丟失多少數(shù)據(jù)?
MySQL 備份類型有哪些?
MySQL 備份類型主要有兩種:物理備份和邏輯備份。下面我們將提供對這兩種備份類型以及其他一些策略的更多見解。
物理(Percona XtraBackup、RDS/LVM 快照、MySQL Enterprise Backup),只要將 MySQL 服務(wù)關(guān)閉,也可以使用 cp 或 rsync 命令行來復(fù)制數(shù)據(jù)目錄 datadir。
邏輯(mysqldump、mydumper、mysqlpump、mysql shell 僅適用于 MySQL 8)。
此外,建議創(chuàng)建 binlog 文件的副本。這種做法有一個重要目的:它使我們能夠?qū)?shù)據(jù)恢復(fù)到最后一個事務(wù)。
邏輯備份
這是邏輯數(shù)據(jù)庫結(jié)構(gòu)(CREATE DATABASE、CREATE TABLE 語句)和內(nèi)容(INSERT 語句)的轉(zhuǎn)儲。建議將其用于較小量的數(shù)據(jù)。如果與物理備份相比,此方法的缺點(diǎn)是速度較慢(備份和恢復(fù))。如果需要,您可以使用 mydumper 備份和恢復(fù)單個數(shù)據(jù)庫或單個表,這對于將某些數(shù)據(jù)復(fù)制到不同的環(huán)境以運(yùn)行測試非常有用。另外,mydumper 可以進(jìn)行一致(只要所有表都是 InnoDB 引擎)備份并提供準(zhǔn)確的主從日志位置。 輸出比物理備份大,特別是以文本格式保存時,但它可以根據(jù)您使用的軟件即時壓縮。例如,mydumper 可以壓縮,而 mysqldump 需要添加一個管道將輸出重定向到 gzip 文件。 邏輯備份用于解決數(shù)據(jù)損壞或恢復(fù)表子集的需要。
物理備份
簡而言之,它由數(shù)據(jù)庫目錄和文件的精確副本組成。這可以是 MySQL datadir 目錄的全部或部分副本。這種備份最常用于輕松快速地恢復(fù)或創(chuàng)建新的副本節(jié)點(diǎn),并用于解決主機(jī)故障。建議使用相同的 MySQL 版本進(jìn)行恢復(fù)。建議使用 Percona XtraBackup,因?yàn)樗梢园魏蜗嚓P(guān)文件,例如 cnf 配置文件等配置文件。
快照備份
某些文件系統(tǒng)實(shí)現(xiàn)允許存儲 “快照”。它們提供給定時間點(diǎn)的文件系統(tǒng)的邏輯副本,而不需要整個文件系統(tǒng)的物理副本。MySQL 本身不提供獲取文件系統(tǒng)快照的功能,但可以使用 LVM 或 ZFS 等第三方解決方案來實(shí)現(xiàn)。 缺點(diǎn)是有時物理備份不會壓縮太多,因?yàn)閿?shù)據(jù)通常是二進(jìn)制格式,有時表已經(jīng)被壓縮。
二進(jìn)制日志備份
Binlog 備份專門針對 RPO。二進(jìn)制日志文件包含執(zhí)行的每個發(fā)生更改的 SQL 查詢的記錄。 從 MySQL 5.6 開始,您可以使用 mysqlbinlog 從遠(yuǎn)程服務(wù)器流式傳輸二進(jìn)制日志。可以將二進(jìn)制日志備份與 Percona XtraBackup 或 mydumper 備份結(jié)合起來,以允許恢復(fù)到最近備份的二進(jìn)制日志的末尾。
增量 / 差異備份
增量備份是對自上次備份以來發(fā)生更改的所有內(nèi)容的備份(二進(jìn)制日志備份是增量備份的特殊情況)。如果數(shù)據(jù)集大小很大,這是一個非常好的選擇,因?yàn)槟梢栽诒局艹踹M(jìn)行完整備份并每天運(yùn)行增量備份。此外,備份大小比完整備份小。 與增量備份相關(guān)的主要風(fēng)險是:
單個損壞的增量備份可能會使所有其他備份失效
增量備份通常會對 RTO 產(chǎn)生負(fù)面影響
對于差異備份,它會復(fù)制與上次備份的差異,其優(yōu)點(diǎn)是從一個備份到下一個備份的大量數(shù)據(jù)不會發(fā)生更改,因此結(jié)果可以是明顯更小的備份。這可以節(jié)省磁盤空間。 Percona XtraBackup 支持增量備份和差異備份。
為什么需要 MySQL 備份?
當(dāng)出現(xiàn)多種問題時,需要 MySQL 備份:
主機(jī)故障:我們可能會因磁盤停滯或磁盤損壞而遇到多種問題。同樣,在云服務(wù)中,我們的數(shù)據(jù)庫實(shí)例可能會損壞并且無法訪問。
數(shù)據(jù)損壞:這可能發(fā)生在斷電時,MySQL 無法正確寫入并關(guān)閉文件,有時當(dāng) MySQL 再次啟動時,由于數(shù)據(jù)損壞而無法啟動,并且崩潰恢復(fù)過程無法修復(fù)它。
數(shù)據(jù)不一致:當(dāng)人犯錯誤時,通過主節(jié)點(diǎn)或副本節(jié)點(diǎn)刪除 / 更新錯誤數(shù)據(jù)。
數(shù)據(jù)中心故障:停電或互聯(lián)網(wǎng)提供商問題。
立法 / 法規(guī):提供一致的商業(yè)價值和客戶滿意度。
MySQL 備份和恢復(fù)最佳實(shí)踐
在本節(jié)中,我們將探討基本的 MySQL 備份和恢復(fù)最佳實(shí)踐,以保護(hù)您的數(shù)據(jù)并確保數(shù)據(jù)庫順利運(yùn)行。
異地存儲
強(qiáng)烈建議將所有備份方法復(fù)制到另一個地方,例如云或外部文件服務(wù)器,這樣在主機(jī)故障或數(shù)據(jù)中心故障的情況下,確保還有另一個副本。 并非所有備份文件都需要上傳到云端,有時您需要花費(fèi)在下載上的時間比恢復(fù)過程中消耗的時間還要多。 一個好的方法是在備份服務(wù)器上本地保留 1-7 天,以便需要快速恢復(fù),這取決于您的業(yè)務(wù)法規(guī)。
加密
備份包含敏感數(shù)據(jù),因此強(qiáng)烈建議加密,尤其是異地存儲。當(dāng)您需要恢復(fù)備份時,這會增加更多時間,但可以保證數(shù)據(jù)安全。 GPG 是加密備份的一個不錯的選擇,如果您使用此選項(xiàng)或其他替代方案,請不要忘記獲取密鑰 / 密碼的副本。如果丟失,您的備份將毫無用處。
恢復(fù)測試
根據(jù)您的業(yè)務(wù),強(qiáng)烈建議每月至少測試一次備份。此操作可驗(yàn)證您的備份未損壞,并提供有關(guān)恢復(fù)時間的關(guān)鍵指標(biāo)。此過程應(yīng)該自動化,以獲取完整備份、恢復(fù)它,并最終將此服務(wù)器配置為當(dāng)前主服務(wù)器或另一個副本的副本。這也有助于驗(yàn)證復(fù)制過程沒有錯誤。 許多客戶正在使用這種方法來刷新他們的 QA/STG 環(huán)境,以便從生產(chǎn)備份中獲取最新數(shù)據(jù)。 除了上述內(nèi)容之外,建議創(chuàng)建手動或自動恢復(fù)文檔流程,以將所有步驟放在一起,以便在發(fā)生災(zāi)難時,您可以遵循它而不會浪費(fèi)時間。
保留要求
最后但并非最不重要的一點(diǎn)是,保留不同備份類型的多個副本非常重要。 我們最好的建議是:
備份服務(wù)器本地的一到兩個物理備份(只要空間允許)。
備份服務(wù)器上本地的每日 7 次和每周 4 次邏輯備份。
備份服務(wù)器本地 30 天的 binlog 備份。
對于異地備份(如 S3、Google Cloud 等),每月備份保留一年或更長時間。
對于本地備份,請記住,您至少需要當(dāng)前數(shù)據(jù)集大小 2.5 倍的可用磁盤空間來保存 / 滿足這些保留策略。不要忘記加密所有備份類型! 法律或監(jiān)管要求也可能規(guī)定數(shù)據(jù)必須存檔多長時間。
驗(yàn)證 MySQL 備份
因此,您已經(jīng)獲得了遵循所有最佳實(shí)踐的備份過程。那你怎么知道備份成功了?你看過文件大小嗎?您是否只檢查創(chuàng)建了一個文件?也許您只查看了您使用的工具的退出代碼? “在驗(yàn)證備份之前,你還沒有進(jìn)行備份。” 很好的建議。換句話說,您所做的每個備份都可以被視為薛定諤的備份;在你驗(yàn)證之前,能確定它有效嗎? 這里的最佳實(shí)踐是使用您創(chuàng)建的備份簡單地恢復(fù) MySQL 服務(wù)器;然而,你創(chuàng)造了它。處理此恢復(fù)的機(jī)器不需要像源一樣強(qiáng)大;一個簡單的虛擬機(jī)就可以管理這項(xiàng)任務(wù),并且可以很好地實(shí)現(xiàn)自動化。 您可以使用 mysql 客戶端本身恢復(fù) 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
是的,Percona XtraBackup 確實(shí)需要更多步驟,但物理備份始終是最快的備份方式和最快的恢復(fù)方式。
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9021瀏覽量
85183 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3765瀏覽量
64276 -
MySQL
+關(guān)注
關(guān)注
1文章
802瀏覽量
26444 -
命令行
+關(guān)注
關(guān)注
0文章
77瀏覽量
10380
原文標(biāo)題:MySQL備份恢復(fù)最佳實(shí)踐:終極指南
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論