文章目錄
【目標】使用mysqldump做全備,結合mysql內建的binlog功能實現增量備份
為了操作方便,建議開啟兩個Terminal,一個進行Mysql的相關操作,一個進行linux語句操作。
全備份的過程參考博文:http://blog.csdn.net/jueblog/article/details/9878191
增量備份過程(1)配置My.cnf檔案
(Windows系統下配置my.ini檔案),啟用二進位備份:
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控制台,以:
mysqlbinlog 備份檔案的路徑
的方式來查看備份檔案中的內容。
通過可以看到,MySQL會把每一個操作的時間記錄下來,同時分配一個位置position。
由此,我們可以根據時間或者位置來恢複資料庫檔案。
(5)按時間匯出恢複日誌。
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)按位置進行恢複:
為了檢驗復原,我們可以先將該表清空。
D:\Program Files (x86)\MySQL\mylog>mysqlbinlog --stop-position="102" juelog.000001 | mysql -uroot -pEnter password: ***
即可恢複表中內容。
按時間進行恢複與此同理。
(7)自動刪除備份日誌。
由於備份日誌會佔用大量的硬碟空間,所有我們需要定時的刪除備份日誌。
可以在my.cnf檔案(Windows系統下配置my.ini檔案)中設定EXPIRE_LOGS_DAYS參數。
例如:
EXPIRE_LOGS_DAYS=7
則超過7天的備份日誌會自動刪除。
(8)開啟binlog日誌
mysql -hlocalhost -uroot -pjue -e "set global sql_log_bin=1"; mysql -hlocalhost -uroot -pjue -e "show global variables like 'sql_log_bin'\G";
執行結果:
*************************** 1. row ***************************Variable_name: sql_log_bin Value: ON
(9)禁止binlog日誌
mysql -hlocalhost -uroot -pjue -e "set global sql_log_bin=0";mysql -hlocalhost -uroot -pjue -e "show global variables like 'sql_log_bin'\G";
執行結果:
*************************** 1. row ***************************Variable_name: sql_log_bin Value: OFF
總結
Mysql資料庫會以二進位形式,自動把使用者對mysql資料庫的操作,記錄到備份檔案中。
當使用者希望恢複的時候,可以使用備份檔案,來進行相應的恢複。
備份檔案中會記錄建立表的語句、刪除表的語句、insert語句、delect語句、update語句等,而不會記錄select語句。
增量備份記錄的內容包括:
(1)動作陳述式本身。
(2)操作的時間。
(3)操作的位置。