mysql ---------binlog

1、基礎知識

在mysql5.0以前版本支持文本格式和二進制格式的日誌,但是在mysql5.0後版本就只支持二進制格式的日誌。因爲二進制日誌在性能、信息處理等方面有更多的優點。

2、啓用mysql二進制日誌

mysql二進制日誌由配置文件my.cnf的log-bin選項負責啓用的。

mysql服務器默認會在數據根目錄創建兩個新文件:XXX-bin.000001和XXX-bin.index。若配置選項沒有給出文件名,mysql將使用mysql-bin來命名這兩個文件,其中.index文件包含一份完整的日誌文件清單。如下:

[root@xin-c ~]# vim /etc/my.cnf


wKiom1c6tVrwDunWAAAZ82lL7ek348.png


默認沒有打開,我們將註釋打開:


wKioL1c6tkKAfJs0AAASy4JzaQM895.png


重啓服務

[root@xin-c ~]# /etc/init.d/mysqld restart

wKiom1c6tc7gjnH2AAAOHnRT7Mg760.png


[root@xin-c ~]# cd /data/mysql/

wKioL1c6tvqgftDwAABld3Ou2iY968.png

mysql會把用戶對所有數據庫的內容和結構的修改情況記入XXX-bin.n文件,但是不會記錄SELECT和沒有實際更新的UPDATE語句。

當然我們也可以通過相關命令查詢,mysql是否已經開啓binlog日誌。如下:

mysql> show variables like 'log_%';


wKiom1c6t6jTaW_9AAB5XyEkA_0357.png


3、binlog日誌文件的生成

當mysql停止或重啓時,服務器會把日誌文件記入下一個日誌文件,mysql會在重啓時生成一個新的日誌文件,文件序號依次遞增。

wKioL1c6usXCBk48AAD30t34icg717.png

如果日誌文件超過max_binlog_size(在my.cnf文件中配置)系統變量配置的上限時,也會生成新的日誌文件。

注: /etc/my.cnf 默認情況下是沒有這個選項的,需要自定義添加:

[root@xin-m mysql]# vim /etc/my.cnf 

wKioL1c6u-3S4YOzAACygoxYH5c767.png

除此之外,如果在mysql命令中執行flush logs命令也會生成新的日誌文件。


mysql> flush logs;


wKiom1c6u3qAVr90AADR9YMlBMA549.png

4、查看系統中的binlog日誌

查看系統中的binlog日誌,使用show master logs命令。如下:

mysql> show master logs;


wKioL1c6vSmyb40eAABs0no0Fc8142.png

5、查看binlog日誌文件

mysql提供了mysqlbinlog命令來查看日誌文件,在記錄每條變更日誌的時候,日誌文件都會把當前時間給記錄下來,以便進行數據庫恢復。如下:

[root@xin-m mysql]# mysqlbinlog mysql-bin.000004| more


wKioL1c6vwuy8RIHAADOpbSUL0o633.png



6、使用binlog日誌進行數據庫恢復

如果遇到災難事件,應該用最近一次製作的完整備份恢復數據庫,然後使用備份之後的binlog日誌件把數據庫恢復到最接近現在的可用狀態。

使用binlog日誌進行恢復時需要依次進行,即最早生成的日誌文件要最先恢復。恢復數據的命令格式如下:

mysqlbinlog xxx-bin.000001|mysql -uroot –p'password' dataname


-u  指定數據庫用戶名 –p 用戶名對應的密碼 dataname 數據庫的名字 


7、binlog命令行參數詳解

my.cnf配置文件有關binlog配置如下:

[root@xin-m mysql]# cat /etc/my.cnf |grep -v ^#|grep -v ^$


wKiom1c6wVLyuX5lAACKJE1muz4489.png



8、刪除binlog日誌

8.1刪除部分binlog日誌

刪除binlog部分日誌,我們可以日誌名稱和日誌生成的時間來進行刪除。刪除命令如下:

mysql> purge master logs to 'mysql-bin.000009';


根據日誌名稱刪除,只刪除log_name之前的日誌,log_name本身不會被刪除。

wKiom1c6w-Oi4RjhAAFc0vV-QL8375.png



通過上圖我們可以看到,mysql-bin.000009之前的日誌已經被全部刪除。

[root@xin-c mysql]# ll --full-time

mysql> purge master logs before '2016-05-17 15:27:53';


根據日誌生成的時間刪除,只刪除date之前的日誌,date本身不會被刪除。

wKiom1c6yLCQl9kXAAF5gkgW1ec105.png



8.2刪除全部binlog日誌

刪除之前所有的binlog日誌,並重新生成新的binlog,後綴從000001開始。使用命令:

mysql> reset master;


wKiom1c6yeWxic10AAE8_9gLyKY159.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章