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