【SQL】MySQL之使用mysqlbinlog進行增量備份及恢復詳解 增量備份過程 (1)配置My.cnf文件 (Windows系統下配置my.ini文件),啟用二進制備份: [sql] log-bin=D:/Program Files (x86)/MySQL/mylog/juelog 在這裡指定把備份文件放到哪個文件下。 (2)重啟MySQL服務。 重啟後,在所配置的文件目錄下,將出現兩個二進制的配置文件。 如圖: 其中,juelog.index為備份文件的索引,指明有哪些備份文件;juelog.000001即為備份文件,存放用戶對數據庫的所有操作。 索引文件juelog.index中的內容如下: (3)備份日志的自動更新 當對數據庫進行相應的操作時,備份日志會發生相應的更新。這點可以從備份文件的時間上觀察得到。 經檢測,備份文件中會記錄創建表的語句、刪除表的語句、insert語句、delect語句、update語句等,而不會記錄select語句。 (4)查看備份日志中內容 可以使用MySQL自帶的mysqlbinlog程序,來查看備份文件中的內容。 進入cmd控制台,以: [sql] mysqlbinlog 備份文件的路徑 的方式來查看備份文件中的內容。 通過上圖可以看到,MySQL會把每一個操作的時間記錄下來,同時分配一個位置position。 由此,我們可以根據時間或者位置來恢復數據庫文件。 (5)按時間導出恢復日志。 [sql] mysqlbinlog --start-datetime="2013-08-11 23:00:00" --stop-datetime="2013-08-11 23:20:59" juelog.000001 -r Test2.sql 以上操作即是把從2013-08-11 23:00:00到2013-08-11 23:20:59的所有操作都導入進Test2.sql中。 執行成功該語句後,在備份目錄下即會生成Test2.sql文件。 其中,--start-datetime和--stop-datetime是可選的。 按位置導出日志與此同理。 (6)按位置進行恢復: 為了檢驗恢復效果,我們可以先將該表清空。 [sql] D:\Program Files (x86)\MySQL\mylog>mysqlbinlog --stop-position="102" juelog.0000 01 | mysql -uroot -p Enter password: *** 即可恢復表中內容。 按時間進行恢復與此同理。 (7)自動刪除備份日志。 由於備份日志會占用大量的硬盤空間,所有我們需要定時的刪除備份日志。 可以在my.cnf文件(Windows系統下配置my.ini文件)中設置EXPIRE_LOGS_DAYS參數。 例如: [sql] EXPIRE_LOGS_DAYS=7 則超過7天的備份日志會自動刪除。 (8)開啟binlog日志 [sql] mysql -hlocalhost -uroot -pjue -e "set global sql_log_bin=1"; mysql -hlocalhost -uroot -pjue -e "show global variables like 'sql_log_bin'\G"; 執行結果: [sql] *************************** 1. row *************************** Variable_name: sql_log_bin Value: ON (9)禁止binlog日志 [sql] mysql -hlocalhost -uroot -pjue -e "set global sql_log_bin=0"; mysql -hlocalhost -uroot -pjue -e "show global variables like 'sql_log_bin'\G"; 執行結果: [sql] *************************** 1. row *************************** Variable_name: sql_log_bin Value: OFF 總結 Mysql數據庫會以二進制形式,自動把用戶對mysql數據庫的操作,記錄到備份文件中。 當用戶希望恢復的時候,可以使用備份文件,來進行相應的恢復。 備份文件中會記錄創建表的語句、刪除表的語句、insert語句、delect語句、update語句等,而不會記錄select語句。 增量備份記錄的內容包括: (1)操作語句本身。 (2)操作的時間。 (3)操作的位置。