1. 程式人生 > >開啟mysql的binlog日誌&檢視$備份

開啟mysql的binlog日誌&檢視$備份

1、5.7版本前

 修改my.cnf檔案,新增log-bin=my-bin(my.cnf的位置根據自己安裝的路徑檢視)
# vi /usr/local/mysql/my.cnf
log-bin=my-bin            #my-bin就是bin-log檔案的名字,可以根據各自情況自定義檔名

log_bin是生成的bin-log的檔名,字尾則是6位數字的編碼,從000001開始,按照上面的配置,生成的檔案則為: my_bin.000001 my_bin.000002 ......

或自定義存放bin-log的位置,預設情況下是在mysql data目錄下,如
log-bin=/mysql/data/my-bin
注意:/mysql/data資料夾的許可權需要mysql的。
修改後需要重啟mysql
# service mysql restart

檢視是否開啟
mysql> show variables like 'log_bin%';


2、5.7及以後的版本 

在5.6的版本情況下需要多新增一個引數
server-id=123456789        #123456789是唯一的值就好

3、檢視日誌檔案

(1)檢視所有日誌檔案:
mysql> show binary logs;   或show master logs;

(2)檢視正在寫入的日誌檔案:
mysql> show master status;

(3)檢視當前binlog檔案內容:
mysql> show binlog events;  #可以格式化輸出 show binlog events\G; 或指定日誌檔案檢視show binlog events in 'my-bin.000001';


注:
Log_name:此條log存在哪個檔案中 
Pos:log在bin-log中的開始位置 
Event_type:log的型別資訊 
Server_id:可以檢視配置中的server_id,表示log是哪個伺服器產生 
End_log_pos:log在bin-log中的結束位置 
Info:log的一些備註資訊,可以直觀的看出進行了什麼操作 
(4)手動啟用新的日誌檔案,一般備份完資料庫後執行
 mysql> show master status; 


mysql> flush logs; #結束正在寫入日誌檔案

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
(5)刪除所有二進位制日誌,並從新開始記錄
mysql> show master status;

1 row in set (0.00 sec)
mysql> reset master; #重新開始
c)
mysql> show master status;

還有:
mysql> purge master logs to 'mysql-bin.000002';  #是將'mysql-bin.000002'編號之前的所有日誌進行刪除
mysql> purge master logs before 'yyyy-mm-dd hh:mm:ss' #是將在'yyyy-mm-dd hh:mm:ss'時間之前


4.二進位制日誌檔案匯出

# mysqlbinlog  binlog.000001 >1.sql #到處成sql格式
# mysqlbinlog --start-datetime="2018-03-20 11:25:56" --stop-datetime="2018-03-20 14:20:10" mysql-bin.000001 > /data/test01.log #按時間點匯出
# mysqlbinlog --start-position=203  --stop-position=203 mysql-bin.000001 > /data/test02.log #按事件位置匯出

5.恢復資料

 強烈建議:做任何恢復之前都給資料庫做一個完整備份,新建庫進行恢復。
恢復
 bin-log是記錄著mysql所有事件的操作,可以通過bin-log做完整恢復,基於時間點的恢復,和基於位置的恢復
(1)基於時間點的恢復,如果確認誤操作時間點為2018-03-20 10:00:00執行如下
# mysqlbinlog --stop-date='2018-03-02 9:59:59' mysql-bin.000001 | mysql -uroot -p
然後跳過誤操作的時間點,繼續執行後面的binlog
# mysqlbinlog --start-date='2018-03-20 10:01:00' mysql-bin.000001 | mysql -uroot -p
其中--stop-date='2018-03-20 9:59:59' 和 --start-date='2018-03-20 10:01:00' 
取兩時間點
# mysqlbinlog --start-datetime="2018-03-20 11:25:56" --stop-datetime="2018-03-20 14:20:10" mysql-bin.000001 | mysql -u root -p
#注:其中的時間是你誤操作的時間,而且這個時間點還可能涉及到的不只是誤操作,也有可能有正確的操作也被跳過去了。那麼執行位置恢復
基於位置恢復,通過檢視日誌檔案資訊,確認6259-6362為誤操作點
# mysqlbinlog --stop-position=6259 mysql-bin.000001 | mysql -uroot -p #從1開始至6259的事件讀,不包括6259事件
# mysqlbinlog --start-position=6363 mysql-bin.000001 | mysql -uroot -p #從6259的事件開始讀
# 取兩事件點
mysqlbinlog --start-position=5786 --stop-position=6254 mysql-bin.000001 | mysql -uroot -p
到此為止基本就可以恢復被誤刪的資料了。
當然我們平時還是要管理好資料庫許可權,避免萌新們誤刪資料帶來不必要的麻煩。當我們操作生產環境上的正式資料庫時候一點要在操作之前先備份,提前做好準備。避免給正式資料庫造成不必要的資料汙染。