您好,登錄后才能下訂單哦!
如何進(jìn)行mysql的備份與恢復(fù)的探討,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
1,我現(xiàn)在的備份方案為:
A(master)----->B(slave)進(jìn)行實(shí)時(shí)同步,在B(slave)上每周日凌晨3點(diǎn)做一次全備份,周一至周六做
增量備份,增量備份的時(shí)刻選擇,根據(jù)業(yè)務(wù)需求靈活修改。當(dāng)DB出現(xiàn)故障時(shí),或是服務(wù)器業(yè)務(wù)邏輯出現(xiàn)
重大bug,玩家投訴較為嚴(yán)重時(shí),這時(shí)我們需要對(duì)數(shù)據(jù)進(jìn)行恢復(fù)。
2,我現(xiàn)在的恢復(fù)方案為:
首先停掉所有服務(wù)器,在B(slave)上首先進(jìn)行一次全備份恢復(fù):
mysql -uroot -p**** < allbackup.sql
然后選擇時(shí)間點(diǎn)進(jìn)行增量恢復(fù):
mysqlbinlog --start-date="2011-06-15 14:00:00" --stop-date="2011-06-15 17:30:00" mysql-bin.[0-9]* |mysql -uroot -p****
這樣所有的,所有的表單都恢復(fù)到了正常狀態(tài)。
3,這樣做的問(wèn)題是:
相當(dāng)麻煩,很痛苦。如果只是db_account中的一個(gè)表單 tb_account出現(xiàn)了問(wèn)題,其他的數(shù)據(jù)庫(kù)均正常。那么這樣做就太折騰了,
因?yàn)槿珎浞輰?duì)所有的數(shù)據(jù)庫(kù)都生效,這樣的恢復(fù)當(dāng)然也是對(duì)所有的數(shù)據(jù)庫(kù)生效。那么恢復(fù)之后,要在B(slave)上找到想要的恢復(fù)后的數(shù)據(jù),
導(dǎo)入到A(master)中,而其他的數(shù)據(jù)都不能保持不動(dòng)。痛苦?。?!
4,改進(jìn)后的方案為:
對(duì)每個(gè)數(shù)據(jù)庫(kù)進(jìn)行全備份,不用原來(lái)的對(duì)所有的數(shù)據(jù)庫(kù)備份的做法(即下面的做法):
dump -h $HOST -u $USER -p$PASSWORD --opt --all-databases --flush-logs > $BAKDIR/$DATESTR.sql
這樣的話,每個(gè)數(shù)據(jù)庫(kù)的備份數(shù)據(jù)都會(huì)相應(yīng)的生成在一個(gè)sql文件中,也就是說(shuō)原來(lái)的備份目錄下的sql文件由一個(gè)增加到了N個(gè),這樣就
可以去恢復(fù)具體的數(shù)據(jù)庫(kù)了,哪個(gè)數(shù)據(jù)庫(kù)出問(wèn)題就去恢復(fù)哪個(gè)數(shù)據(jù)庫(kù),哪里不會(huì)點(diǎn)哪里,媽媽再也不用擔(dān)心我的學(xué)習(xí)了。
省去了很多麻煩。即你可以這樣寫(xiě):
mysqldump -h $HOST -u $USER -p$PASSWORD --flush-logs db_account > account.sql
mysqldump -h $HOST -u $USER -p$PASSWORD --flush-logs db_test1 > test1.sql
mysqldump -h $HOST -u $USER -p$PASSWORD --flush-logs db_test2 > test2.sql
mysqldump -h $HOST -u $USER -p$PASSWORD --flush-logs db_test3 > test3.sql
那么增量備份怎么辦?
如果基于時(shí)間點(diǎn)的增量恢復(fù)db_account,該怎么辦?有辦法
mysqlbinlog --start-date="2011-06-15 14:00:00" --stop-date="2011-06-15 17:30:00" -d db_account mysql-bin.[0-9]*
可以用-d指定數(shù)據(jù)庫(kù)進(jìn)行增量恢復(fù),這樣就可以對(duì)指定的數(shù)據(jù)庫(kù)進(jìn)行全備份恢復(fù)和增量備份恢復(fù)了,一切是多么的和諧。
5,一點(diǎn)點(diǎn)的小擔(dān)心:
就是在對(duì)具體的一個(gè)數(shù)據(jù)庫(kù)db_account進(jìn)行全備份,flush-logs的時(shí)候,會(huì)刪除db_account的增量數(shù)據(jù)。那么有沒(méi)有以下的可能:
5.1,兩個(gè)數(shù)據(jù)庫(kù)中的增量數(shù)據(jù)在一個(gè)mysql-bin文件中
5.2,一個(gè)數(shù)據(jù)庫(kù)的增量數(shù)據(jù)在兩個(gè)mysql-bin文件中
如果有以上的可能,那么在flush-logs的時(shí)候會(huì)不會(huì)出現(xiàn)什么隱患或是問(wèn)題呢?如db_account在flush-logs的時(shí)候刪除了
一個(gè)文件,但這個(gè)文件中還有其他數(shù)據(jù)庫(kù)的增量數(shù)據(jù)?;蚴钦f(shuō)flush-logs不是基于文件刪除,而是基于數(shù)據(jù)刪除,在所有的
文件中找到db_account的增量數(shù)據(jù),然后做刪除,當(dāng)發(fā)現(xiàn)一個(gè)文件沒(méi)有數(shù)據(jù)的時(shí)候,再刪除該文件。大家都知道的,
mysql-bin的文件是相當(dāng)多的,如果不做刪除清理的話,總有一天硬盤(pán)會(huì)爆炸的。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。