一.概述 由於伺服器生成的二進位日誌文件以二進位格式保存,所以如果要想檢查這些文件的文本格式,就會用到mysqlbinlog日誌管理工具。 mysqlbinlog的語法如下: mysqlbinlog [options] log-files log-files2... 其中options有很多選項,常 ...
一.概述
由於伺服器生成的二進位日誌文件以二進位格式保存,所以如果要想檢查這些文件的文本格式,就會用到mysqlbinlog日誌管理工具。
mysqlbinlog的語法如下:
mysqlbinlog [options] log-files log-files2...
其中options有很多選項,常用如下:
選項 |
說明 |
-d, --database=name |
指定資料庫名稱,只列出指定的資料庫相關操作。 |
-o, --offset=# |
忽略掉日誌中的前n行命令 |
-r, --result-file=name |
將輸出的文本格式日誌輸出到指定文件 |
-s,--short-form |
顯示簡單格式,省略掉一些信息 |
--set--charset=char-name |
在輸出為文本格式時,在文件第一行加上set names char-name. |
-- start-datetime=name-stop-datetime=name |
指定日期間隔內的所有日誌 |
--start-position=# --stop-position=# |
指定位置間隔內的所有日誌 |
1.1 開啟binlog日誌
預設情況下是未打開binlog日誌,可以通過以下二種方式查看:
mysql> show binary logs; ERROR 1381 (HY000): You are not using binary logging --或者這樣查看 mysql> show variables like '%log_bin%
開啟binlog日誌,修改my.cnf文件重啟mysql服務,如下所示:
再次查詢binlog日誌狀態:
二. 使用mysqlbinlog查看日誌
--先在test表中插入一條數據退出。 mysql> insert into a values('testbinlog');
-- 查看binlog位置 [root@hsr mysql]# cd /var/lib/mysql [root@hsr mysql]# ls mysql-bin.000001 mysql-bin.index
2.1 使用mysqlbinlog查看日誌 不加任何options參數
[root@hsr ~]# cd /usr/local/mysql/bin [root@hsr bin]# ./mysqlbinlog /var/lib/mysql/mysql-bin.000001
上面的日誌文件除了創建表和刪除表的sql外,操作資料庫的語句都加密了。
2.2 使用參數"--base64-output=decode-row -v"查看具體的sql語句,如下命令
[root@hsr bin]# ./mysqlbinlog --base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001
上圖中 at 291是插入語句的開始位置, at 384是插入語句的結束位置。如果後續該表數據丟失,可以根據這兩個地方執行恢復。也可以根據開始時間和結束時間來恢復,後面再講日誌時具體介紹。
2.3 加-d選項,將只顯示對test資料庫的操作日誌
[root@hsr bin]# ./mysqlbinlog /var/lib/mysql/mysql-bin.000001 -d test
2.4 加-o選項, 忽略掉日誌中的前n個操作。演示下
-- 插入三條數據 INSERT INTO a VALUES('testbinlog2') INSERT INTO a VALUES('testbinlog3') INSERT INTO a VALUES('testbinlog4') [root@hsr bin]# ./mysqlbinlog --base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 -d test -o 14
上圖顯示日誌生成後,從at 898行開始顯示。 14個操作代表:日誌顯示跳過14個at。
2.5 加-r選項
將輸出的文本格式日誌輸出到指定文件,下麵將文件結果輸出到文件resultfile中。
[root@hsr bin]# ./mysqlbinlog --base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 -r resultfile [root@hsr bin]# more resultfile
2.6 加-s 將內容進行簡單顯示
[root@hsr bin]# ./mysqlbinlog --base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 -s
如上圖所示,簡單顯示後,沒有了詳細的sql語句。
2.7 加"--start-datetime--stop-datetime"顯示9:00 ~12:00之間的日誌
[root@hsr bin]# ./mysqlbinlog --base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001
--start-datetime='2018/08/30 09:00:00' --stop-datetime='2018/08/30 12:00:00'
如上圖所示:最後顯示的時間截是1535600091, 轉換後是2018-08-30 11:34:51。 開始和結束日期可以只寫一個。
2.8 加"--start-position=#和--stop-position=#" 和日期範圍類似,不過更精確
[root@hsr bin]# ./mysqlbinlog --base64-output=decode-row -v /var/lib/mysql/mysql-bin.000001 --start-position=944
最後官網文檔 mysqlbinlog