【windows】環境下mysql的數據備份以及恢復
無論是剛剛入行的‘猿友’還是入行很久的‘老猿’,我相信都會遇到過因為各種原因(很多情況下是自己誤刪了數據庫)的操作.drop databases xxxxx
而誤刪了線上項目的數據庫是一件很恐怖的事情,那么如果大家遇到這種情況怎么辦呢?首先不要着急(我感覺說了也白說-,-),先看一看自己的mysql是否開啟了binlog日志功能,如果沒有???game over !!!
關於查看binlog日志有沒有開啟,請到自己的Mysql文件下找my.ini中的[mysqld],里面是否有log-bin=mysql-bin,有則表示開啟了(沒有開啟的趕緊開啟,不然都沒后悔葯吃!!!)
為了方便新手閱讀,在此我從數據備份開始講。
【數據備份】
- 首先我們先建一個測試用的數據庫drop_test
- 並在drop_test中新建一張test表,表內容隨意(反正是測試用的)
- 數據內容如下

在確保了binlog開啟了之后,在mysql文件夾中的bin文件夾中有一個mysqldump.exe,這個就是常用的數據庫備份工具之一,我們執行此程序,備份我們的drop_test數據庫
執行語句:mysqldump -uroot -p -B -F -R -x --master-data=2 drop_test > d:\backups\drop_test_bac.sql;這是完全備份,用於備份此語句執行時(到這時刻為止)的數據庫數據

輸入密碼后,即可在D:\backups目錄下看到文件drop_test_bac.sql

我們可以打開看看,發現里面存了數據庫drop_test的表信息以及表內容
假如我們在備份之后,又操作了數據庫(往drop_test數據庫中增加了內容)

而這個時候,我們誤刪除了數據庫drop_test(悲劇的執行了drop database drop_test),導致數據庫drop_test沒了!!!

這個時候不要慌,首先我們先從備份的數據庫文件中還原數據
執行語句:mysql -uroot -p > d:\backups\drop_test_bac.sql

執行結束后我們將發現drop_test數據庫又回來了,並且里面的表還在,數據.....嗯?怎么只恢復了一部分數據?還有一部分呢?????

我們在做備份數據庫之后,又新增了一些數據,假如在新增之后我們刪除了數據庫,那么新增的那部分怎么辦?不要急,首先我們打開drop_test_bac.sql,找到類似-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=107;這句話,這句話告訴我們,將那些新增的數據保存在了mysql-bin.000009的第107節點里,接下來我們就要考慮從這里恢復我們的數據。
這個mysql-bin.000009在我們的mysql文件夾中的data文件夾里(我的是phpstudy環境,默認在這里),我們先拷貝到d:\backups文件夾里

通過mysqlbinlog命令將mysql-bin.000009二進制文件轉成sql文件(剛開始我的mysql的bin文件夾里沒有mysqlbinlog工具,我是到網上下了一個,如果沒有的同學可以問我要,也可以自己網上找)
執行語句:mysqlbinlog -d drop_test d:\backups\mysql-bin.000009 > d:\backups\009bac_bin.sql

執行結束后我們在d:\backups文件夾里會生成009bac_bin.sql文件

將此文件里的drop操作刪除(不然恢復了又直接刪除了-,-)
接下來就是恢復此文件數據了
執行語句:mysql -uroot -p > d:\backups\009bac_bin.sql
數據恢復完成!!!

PS:第一次發微博,有些地方寫得不好的地方歡迎大家指出!!!
