摘要:我們先來看下對(duì)數(shù)據(jù)庫的完全備份。總結(jié)如果允許數(shù)據(jù)丟失,可以直接使用直接恢復(fù),否則可以通過二進(jìn)制文件進(jìn)行恢復(fù)。現(xiàn)在看來其實(shí)也非常簡(jiǎn)單了,找到開發(fā)服務(wù)器上的二進(jìn)制日志文件就能恢復(fù)了,最后他又一個(gè)一個(gè)表開始建的,誰叫我當(dāng)初又蠢又笨
開啟binlog
show binary logs 檢查bin log是否開啟,Mac OS系統(tǒng)安裝完Mysql沒有my.cnf配置文件,需要自己新建,我的Mysql配置文件放在/etc/my.cnf,將binlog開啟,默認(rèn)如果不給值的話,log-bin 的會(huì)以mysqld-bin 為索引,創(chuàng)建mysqld-bin.00001等;重啟mysql。
定時(shí)備份與還原一般我們會(huì)對(duì)mysql數(shù)據(jù)庫做定時(shí)備份,但是不能夠滿足我們的需求,因?yàn)榭赡軙?huì)丟失數(shù)據(jù),如果我們?cè)诿刻斓脑缟?點(diǎn)進(jìn)行定時(shí)數(shù)據(jù)備份,在當(dāng)天晚上9點(diǎn),數(shù)據(jù)庫掛了,此時(shí)數(shù)據(jù)庫只能備份到當(dāng)天4點(diǎn)之前的所有數(shù)據(jù),4點(diǎn)-9點(diǎn)的數(shù)據(jù)沒辦法通過這種方式恢復(fù),丟失了,這肯定是不能容忍的,通過二進(jìn)制日志文件可以滿足我們的需求,只要不是服務(wù)器、硬盤問題,都能通過這種方式,進(jìn)行數(shù)據(jù)恢復(fù)。我們先來看下對(duì)數(shù)據(jù)庫的完全備份。
mysqldump -uroot -ppassword test > /Users/ksmaster/GitHub/mysql_backup/test_DB0722-10:16.sql
本地生成test_DB0722-10:16.sql文件之后,假如數(shù)據(jù)庫數(shù)據(jù)被人為無意損壞或是數(shù)據(jù)表或庫被誤刪,我們都能夠通過生成的sql文件進(jìn)行數(shù)據(jù)恢復(fù),恢復(fù)當(dāng)天4點(diǎn)之前的數(shù)據(jù)狀態(tài)。假如此處是把整個(gè)庫誤刪了,恢復(fù)如下:
mysql -uroot -ppassword test < /Users/ksmaster/GitHub/mysql_backup/test_DB0722-10:16.sql利用二進(jìn)制日志(binlog)還原
我預(yù)先創(chuàng)建了一個(gè)新的數(shù)據(jù)庫test,表user,之后查看二進(jìn)制日志文件,因?yàn)槲业氖潜镜財(cái)?shù)據(jù)庫,二進(jìn)制日志存放在/usr/local/mysql/data/目錄下,如mysql-bin.000001
我這里有兩個(gè)二進(jìn)制文件,mysql-bin.000001和mysql-bin.000002,如果你沒有執(zhí)行過flush logs或者沒有重啟mysql,一般來說只有一個(gè)mysql-bin.000001,我們先查看下mysql-bin.000001
sudo mysqlbinlog --no-defaults mysql-bin.000001
截圖如下:
可以看到有創(chuàng)建數(shù)據(jù)庫、建表、插入數(shù)據(jù)等sql語句,還有at 417等,我們插入一些臟數(shù)據(jù)或者是錯(cuò)誤數(shù)據(jù),甚至是把數(shù)據(jù)庫刪除都可以,之后我們?nèi)绾卫枚M(jìn)制文件進(jìn)行數(shù)據(jù)恢復(fù)呢?
mysqlbinlog --no-defaults --stop-position="3263" mysql-bin.000001 > /Users/ksmaster/GitHub/mysql_backup/test_backup0722-11:30.sql
我們將mysql-bin.000001的sql語句導(dǎo)出到本地,這里我們只導(dǎo)出位于3263之前的語句,因?yàn)橹蟮臄?shù)據(jù)是錯(cuò)誤的我們不想要;然后進(jìn)行恢復(fù),我們先來看下到處到本地的sql語句是怎樣的:
這里貼代碼的話,無用的代碼太多,只截取部分看看是什么樣子的,其實(shí)就是執(zhí)行過的sql語句,如果我們把數(shù)據(jù)誤刪了,我們可以利用導(dǎo)出的sql語句進(jìn)行數(shù)據(jù)恢復(fù):
mysql -uroot -ppassword < /Users/ksmaster/GitHub/mysql_backup/test_backup0722-11:30.sql
通過這種方式我們可以比較靈活的恢復(fù)自己想要的數(shù)據(jù),并且沒有丟失數(shù)據(jù),只要二進(jìn)制文件在硬盤沒有損壞,都能恢復(fù)我們想要的數(shù)據(jù)。
總結(jié)如果允許數(shù)據(jù)丟失,可以直接使用mysqldump直接恢復(fù),否則可以通過二進(jìn)制文件進(jìn)行恢復(fù)。在這里突然想到我去年還在實(shí)習(xí)的時(shí)候,當(dāng)時(shí)項(xiàng)目剛開始,主力成員加上我和技術(shù)經(jīng)理就三個(gè)人,有次我打開了mysql workbench,有可能是我不小心碰到鍵盤了還是別人搞得,整個(gè)數(shù)據(jù)庫表全沒了...慶幸的是還好是開發(fā)環(huán)境,不是生產(chǎn)環(huán)境..到底是不是我搞的我到現(xiàn)在也不知道是不是我搞得,然后另一個(gè)同事就著急了,工作這么忙項(xiàng)目一個(gè)月之后上線,建表造數(shù)據(jù)這又得浪費(fèi)一些時(shí)間,攤誰身上誰都不樂意,于是他去找另一個(gè)同事,看能不能恢復(fù),最后也沒搞定。現(xiàn)在看來其實(shí)也非常簡(jiǎn)單了,找到開發(fā)服務(wù)器上的二進(jìn)制日志文件就能恢復(fù)了,最后他又一個(gè)一個(gè)表開始建的,誰叫我當(dāng)初又蠢又笨...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/75542.html
閱讀 2328·2021-10-11 10:59
閱讀 2608·2021-10-11 10:58
閱讀 3314·2021-09-08 09:35
閱讀 3813·2021-09-02 15:21
閱讀 1468·2019-08-30 15:53
閱讀 2618·2019-08-29 14:16
閱讀 2079·2019-08-26 14:00
閱讀 2962·2019-08-26 13:52