【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)操作的位置。