二進位日誌的檔案的作用
mysql二進位記錄檔用來記錄所有使用者對資料庫操作,即記錄使用者對資料庫操作的sql語句。如果有此檔案,當資料庫發生意外時,可以通過此檔案查看到使用者在此檔案記錄的時間段內使用者所做的操作,再和Database Backup配合使用,即可再現使用者操作,使資料庫恢複。
二進位記錄檔的弊端
二進位記錄檔開啟後,所有對資料庫操作的記錄均會被記錄到此檔案,
所以,當長時間開啟之後,記錄檔會變得很大,佔用磁碟空間。
使用二進位記錄檔恢複資料庫
開啟記錄檔
mysql預設是不開啟記錄檔的功能的,需要我們手動開啟。操作如下:
1、 開啟mysql安裝目錄\my.ini(windows系統是my.ini檔案,linux是my.cnf檔案)。
2、 找到[mysqld]這個標籤,在此標籤下面一行,添加語句:log-bin=binary-log。上面語句中,log-bin說明要開啟二進位記錄檔,binary-log是二進位記錄檔的名字。
(測試的時候我設定的:log-bin=d:/mysql_log/logbin_ouyang.log)
3、 重啟mysql服務。可以在mysql安裝目錄\data 檔案夾下看到“binary-log.數字編號”檔案,
如binary-log.000001。以後每重啟一次mysql服務,都會重建二進位記錄檔,
檔案名稱中的數字編號依次遞增。
(你的上一步給出的檔案名稱,加了個序號 還有一個總的檔案 index檔案 如圖1:)
恢複資料庫
使用記錄檔恢複資料庫必須要有一個Database Backup(只要是在二進位記錄檔功能開啟之後備份的就行)。恢複資料庫時,可以通過時間恢複,也可以通過操作點恢複。
1、通過時間恢複方法如下:
如果我在2011-04-02 00:00:00時刻開啟了二進位記錄檔功能,並備份了資料庫檔案。且在2011-04-02 12:00:00資料庫發生異常,需要恢複到2011-04-02 10:00:00。則操作如下:
l 用備份將資料庫回複到2011-04-02 00:00:00時候的狀態。
l 在命令列輸入如下命令:
mysqlbinlog --stop-date="你想要恢複的時間" 記錄檔的目錄\binary-log.000001 | mysql -u root –p(D:\mysql_log>mysqlbinlog logbin_ouyang.000007 --stop-date="2011-10-23 15:05:00"|mysql -uroot -proot)
這樣,系統會自動執行從二進位日誌有記錄開始截止到2011-04-02 10:00:00,使用者所做過的所有操作。與stop-date對應的,還有start-date屬性,可以設定執行記錄的開始時間。也可以兩個屬性都設定。
2、通過操作點恢複方法如下:
在命令列中輸入mysqlbinlog D:\binary-log.000003 > D:\log.txt,執行後開啟log.txt,
查看裡面語句,可以發現:在每個操作之前,都會有一個獨特的編號,如下紅字顯示:
/*!*/;# at 450 /*編號450*/#110402 15:31:50 server id 1 end_log_pos 529 Query thread_id=2 exec_time=0 error_code=0SET TIMESTAMP=1301729510/*!*/;DROP TABLE `jwc`
此編號隨著運算元增多而變大。和時間一樣是一個標記,通過操作點恢複的語句如下:
mysqlbinlog --stop-position="450" mysql安裝目錄\data\binary-log.000001 | mysql -u root –p
這樣,系統會自動執行二進位日誌中編號最低的語句到編號450語句。
與stop-position對應的,還有start-position屬性,可以設定執行記錄的開始編號。
附:(你應該看看)
1.0 mysqlbinlog 是mysql內建的一個日誌操作工具!
2.0 如果直接開啟log檔案 可能會是亂碼,所以我們一般會:
D:\mysql_log>mysqlbinlog logbin_ouyang.000003 >log_3.txt 複製下 然後用記事本開啟!
就可以清楚的看到 操作的編號了 或者說(行號)
3.0 如果發生了錯誤的操作!如果可以的話!你應該立馬停止資料庫!然後恢複資料!
4.0 如果只是去掉某一個語句,你可以選擇恢複兩次 ,如圖:
D:\mysql_log>mysqlbinlog logbin_ouyang.000009 --stop-position=10625|mysql -uroot -proot D:\mysql_log>mysqlbinlog logbin_ouyang.000009 --start-position=10843|mysql -uroo t –proot
5.0 如果發生 Could not read entry at offset 1478: Error in log format or read error. 類似的錯誤!
請檢查你的編號是否正確!注意這個編號 不是一些編輯器顯示的那個行號哦,# at 450 /
經常delete 、update錯了!所有給自己個文檔!當然我也希望你永遠的用不上這個文檔 ! 周末愉快! (排版有的亂哈!多多包涵!)