作者介紹
龐闊,優(yōu)朋普樂傳媒運維基礎(chǔ)部經(jīng)理。負責(zé)數(shù)據(jù)庫運營管理及平臺設(shè)計開發(fā),監(jiān)控設(shè)計改進,問題跟蹤處理,機房網(wǎng)絡(luò)維護管理,目前四個專利已在專利局申請中。擅長數(shù)據(jù)庫運維管理及Shell、Perl、PHP編寫。
亳州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
最近關(guān)于數(shù)據(jù)庫故障出現(xiàn)的問題較多,不論大小公司對數(shù)據(jù)的備份要求都很高,但對校驗數(shù)據(jù)備份的有效性要求更為迫切,很多公司對于自動備份和還原都已經(jīng)形成體系,但對于還原后的備份有效性校驗可能都不太完善,而且目前網(wǎng)上也沒有較為完善的檢驗機制(可能我沒找到)。
對數(shù)據(jù)庫備份的有效性校驗的方法或樣例選擇,直接關(guān)系到備份數(shù)據(jù)的質(zhì)量指標(biāo)。本文將分享我做的一個設(shè)計,此設(shè)計是直接采用線上執(zhí)行的SQL提取出select,包括復(fù)雜join類型的SQL加上當(dāng)前存在的庫及表信息,提高了備份校驗的準(zhǔn)確性。
這是我在申請數(shù)據(jù)庫相關(guān)專利時推演出來的方案,在尋找一個好的校驗備份還原后的數(shù)據(jù)衡量指標(biāo),偶然地和備份還原進行結(jié)合時出現(xiàn)了這個設(shè)計。當(dāng)數(shù)據(jù)庫實例越來越多時,這個有效性校驗的需求會越來越強。
下面將簡單介紹一下我的校驗數(shù)據(jù)的設(shè)計方案,或許它能給你一個思路或想法,當(dāng)然我也希望能有其他好的方案出來,共同學(xué)習(xí)。(注:部分信息做了脫敏處理)
程序處理流程如下:
根據(jù)上面的流程圖,大致分為5個步驟,有6個腳本程序來完成這個流程,每個步驟其實不是很難,實際中可根據(jù)自己的業(yè)務(wù)特定進行完善,下面我簡單介紹此流程中主要的幾個功能。
自動備份功能
(可自行設(shè)置,我是配置的定時任務(wù),平臺在對接中)
自動還原功能
自動下載備份并還原。
SQL及庫表自動上報功能
1)上報本機數(shù)據(jù)庫的庫表信息,主要用來比對還原后庫表信息是否一一對應(yīng),如果對應(yīng)正常,否則異常,進行報警處理。
2)匯報SQL,為保證SQL的真實性,此方法是監(jiān)聽general_log,分析后獲取Select 類型SQL,并執(zhí)行此SQL 降獲取到的sql 及查到的值 匯報到數(shù)據(jù)中心作為樣例SQL使用。
還原后庫表及SQL自動比對功能
1)還原后自動調(diào)用數(shù)據(jù)庫中心獲取庫表信息,進行一一比對。
2)獲取SQL信息進行原來和還原后數(shù)據(jù)值的匹配校驗,如果對應(yīng)則正常,否則為異常。
注:在下面演示過程中以手動形式,可根據(jù)公司具體情況設(shè)置為自動。
數(shù)據(jù)庫機器:172.16.20.5
備份機器:172.16.20.6
還原機器:172.16.20.7
備份工具:mydumper
編程語言:Shell+Perl
備份傳輸工具:rsync
1、備份機器rsync部署
對于數(shù)據(jù)中心做備份之前采取過如下幾個方案。我簡單概括一下:
NFS:由一塊設(shè)備進行網(wǎng)絡(luò)遠程掛載,只需安裝NFS服務(wù)即可,操作簡單。但是有個問題就是當(dāng)NFS服務(wù)出現(xiàn)問題或網(wǎng)絡(luò)中斷時你去使用磁盤會出現(xiàn)掛起的現(xiàn)象。
FTP:也用過FTP來做備份服務(wù),但有時會出現(xiàn)登錄失敗的現(xiàn)象,對于不同目錄權(quán)限設(shè)置較為復(fù)雜,不方便維護;上傳下載編寫腳本也不是太方便。
Rsync:改為Rsync,主要是配置簡單,上傳下載也簡單的多,一條命令即可;對于增量的傳輸很有用。
重要部分如下:
[back5]
path = /opt/MySQL_bak/172.16.20.5
comment = www file
ignore errors
read only = false
list = false
uid = root
gid = root
2、數(shù)據(jù)庫機器和還原機器安裝mydumper
mydumper第三方開用于對MySQL數(shù)據(jù)庫進行多線程備份和恢復(fù)的開源工具。開發(fā)人員主要來自MySQL、Facebook和SkySQL公司,目前由Percona公司開發(fā)和維護,是Percona Remote DBA項目的重要組成部分;不同于官方的mysqldump、mysqlpump的是對庫表備份和還原采用多線程,對于快速備份和恢復(fù)是不錯的選擇;當(dāng)然還有percona的xtrabackup相當(dāng)于物理備份的工具,但是耗費空間較大。
安裝請參考官網(wǎng):https://launchpad.net/mydumper/+download
3、數(shù)據(jù)庫上執(zhí)行備份腳本
腳本如下:
4、數(shù)據(jù)中心表結(jié)構(gòu)設(shè)計
在數(shù)據(jù)中心創(chuàng)建下面的表,這些表主要用來存儲備份時上報的庫表信息和SQL信息,用后續(xù)步驟還原校驗時做提供樣例值。
庫表匯報的表結(jié)構(gòu)
SQL 表結(jié)構(gòu)
5、數(shù)據(jù)庫機器上匯報
1)庫表匯報程序地址:自行下載和修改
https://github.com/kevin6386/db_table_report/blob/master/db_table_report
運行即可。
2)SQL匯報程序
程序地址:https://github.com/kevin6386/db_sql_report/blob/master/db_sql_report
運行即可。
6、數(shù)據(jù)庫備份還原
下載備份并還原(簡單分解介紹):
用 rsync 下載備份到本地,并解壓
rsync -zrtoapg –progress root@172.16.20.6::back5/備份文件名 ./
恢復(fù)命令:
/usr/local/bin/myloader -u user -p pass -o -d 備份地址 -t 8
7、校驗
此時才是整個流程設(shè)計的重點,針對還原后的數(shù)據(jù),怎么做校驗才是重要的,而且校驗的樣例或方法直接關(guān)系數(shù)據(jù)備份有效性的指標(biāo)。
1)還原后數(shù)據(jù)庫表的校驗
程序地址:https://github.com/kevin6386/db_table_diff/blob/master/db_table_diff
比較結(jié)果如下:
郵件截圖
2)還原后數(shù)據(jù)SQL的校驗
程序地址:https://github.com/kevin6386/db_sql_diff
比較結(jié)果如下:
郵件截圖:如果正常則附件會有SQL,否則為空。
異常截圖
出現(xiàn)異常有如下幾種情況:
備份時和general_log提取有時間的差異;當(dāng)獲取SQL出現(xiàn)在備份前或備份后有數(shù)據(jù)修改的情況下會出現(xiàn)。(可采用低峰時或很少修改的字段進行提取樣例)
某些表還原異常,數(shù)據(jù)丟失。(比如我遇到過觸發(fā)器的情況,表與表有依賴)
我用從庫的備份比對主庫的SQL。(有可能從庫和主庫不一致)
備份時有丟失的表或記錄。(有時備份的命令問題或漏備份)
附件SQL信息
8、關(guān)于備份的匯報
我是匯報每天的備份大小及文件名,然后寫SQL比對今天的備份和前2天的信息。
如下:
設(shè)計完這個方案后開始編寫分程序花了一段時間,同時感謝我的同事幫我重復(fù)測試這個設(shè)計方案,發(fā)現(xiàn)之前備份還原過程中出現(xiàn)的問題改善了很多,重要的是不用人工去抽取還原后的數(shù)據(jù)結(jié)果。當(dāng)這個方案固定后基本上很少有人工的參與,減少了人工還原備份和校驗備份重復(fù)的工作;并且可以準(zhǔn)確地知道哪部分有問題,減少了對數(shù)據(jù)庫備份是否正常的擔(dān)憂。當(dāng)然還有很多要完善的方面,歡迎有興趣的朋友在留言區(qū)提出建議,一起交流。