MySQL Binlog 日志查看方法及查看內(nèi)容解析
一、Binlog 日志概述
Binlog(二進制日志)記錄了 MySQL 數(shù)據(jù)庫執(zhí)行的所有更改數(shù)據(jù)的操作,包括INSERT、UPDATE、DELETE等。它對于數(shù)據(jù)恢復(fù)、主從復(fù)制以及審計等方面有著至關(guān)重要的作用。
二、查看 Binlog 日志方法
開啟 Binlog 日志功能
默認情況下,MySQL 的 Binlog 日志功能可能未開啟。要開啟它,需要修改 MySQL 的配置文件(通常是my.cnf或my.ini)。在[mysqld]部分添加或修改以下配置:
log-bin=mysql-bin
這里mysql-bin是日志文件名前綴,重啟 MySQL 服務(wù)后,Binlog 日志功能即開啟。
查看當前正在使用的 Binlog 日志文件
使用以下 SQL 命令可以查看當前 MySQL 正在寫入的 Binlog 日志文件名:
SHOW MASTER STATUS;
執(zhí)行結(jié)果類似如下:
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 | 1234 | | | | +------------------+----------+--------------+------------------+-------------------+
其中File列顯示的mysql-bin.000003就是當前正在使用的 Binlog 日志文件名,Position表示當前日志寫入的位置。
查看 Binlog 日志內(nèi)容
- 使用 mysqlbinlog 工具:
- 該工具隨 MySQL 安裝包一同提供。在命令行中,使用以下語法查看 Binlog 日志內(nèi)容:
mysqlbinlog [選項] binlog文件名
例如,要查看mysql-bin.000003的內(nèi)容,可以執(zhí)行:
mysqlbinlog mysql-bin.000003
- 常用選項:
- --start-position和--stop-position:用于指定查看日志的位置范圍。例如,只查看從位置 100 到 200 的內(nèi)容:
mysqlbinlog --start-position=100 --stop-position=200 mysql-bin.000003
- --start-datetime和--stop-datetime:根據(jù)時間范圍查看日志。如查看 2025 - 04 - 01 10:00:00 到 2025 - 04 - 01 11:00:00 之間的日志:
mysqlbinlog --start-datetime="2025-04-01 10:00:00" --stop-datetime="2025-04-01 11:00:00" mysql-bin.000003
- 在 MySQL 客戶端中通過SHOW BINLOG EVENTS命令:
- 語法如下:
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
- 示例:查看mysql-bin.000003從位置 50 開始的 10 條日志事件:
SHOW BINLOG EVENTS IN'mysql-bin.000003' FROM 50 LIMIT 0, 10;
三、Binlog 日志內(nèi)容解析
Binlog 日志包含多個事件(Event),每個事件記錄了一次數(shù)據(jù)庫操作。常見的事件類型及解析如下:
- Format_desc 事件:
- 通常是 Binlog 日志的第一個事件,用于描述該 Binlog 日志的格式信息,包括日志版本、創(chuàng)建時間等。例如:
#120505 14:31:06 server id 1 end_log_pos 123 CRC32 0xabcdef01 Start: binlog v 4, server v 5.7.20 created 120505 14:31:06 at startup
- 其中#120505 14:31:06是事件發(fā)生時間,server id 1是服務(wù)器 ID,end_log_pos 123表示該事件結(jié)束的位置,CRC32 0xabcdef01是 CRC32 校驗和。
- Query 事件:
- 記錄了一條 SQL 查詢語句,通常是INSERT、UPDATE、DELETE等更改數(shù)據(jù)的操作。例如:
#120505 14:32:00 server id 1 end_log_pos 256 CRC32 0x12345678 Query thread_id=3 exec_time=0 error_code=0 use testdb; SET TIMESTAMP=1336223520; INSERT INTO users (name, age) VALUES ('John', 25);
- #120505 14:32:00是事件發(fā)生時間,server id 1是服務(wù)器 ID,end_log_pos 256是事件結(jié)束位置。thread_id=3表示執(zhí)行該查詢的線程 ID,exec_time=0是查詢執(zhí)行時間(秒),error_code=0表示執(zhí)行無錯誤。下面的use testdb;指定了操作的數(shù)據(jù)庫,SET TIMESTAMP=1336223520;設(shè)置了時間戳,最后是具體的INSERT語句。
- Row_event 系列事件(如 Table_map 事件、Write_rows 事件、Update_rows 事件、Delete_rows 事件):
- 在基于行模式(row - based)的 Binlog 記錄中常見。
- Table_map 事件:用于映射表的結(jié)構(gòu)信息,例如:
#120505 14:33:00 server id 1 end_log_pos 300 CRC32 0x87654321 Table_map: `testdb`.`users` mapped to number 123
這里表示testdb數(shù)據(jù)庫中的users表被映射為編號 123。
- Write_rows 事件:記錄了插入數(shù)據(jù)的操作。例如:
#120505 14:33:10 server id 1 end_log_pos 350 CRC32 0x23456789 Write_rows: table id 123 flags: STMT_END_F ### INSERT INTO `testdb`.`users` ### SET ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=30 /* INT meta=0 nullable=0 is_null=0 */
表示向testdb.users表插入了一條數(shù)據(jù),數(shù)據(jù)的具體字段值以@符號表示。
- Update_rows 事件:記錄更新數(shù)據(jù)的操作,會包含更新前和更新后的行數(shù)據(jù)。例如:
#120505 14:34:00 server id 1 end_log_pos 400 CRC32 0x34567890 Update_rows: table id 123 flags: STMT_END_F ### UPDATE `testdb`.`users` ### WHERE ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=30 /* INT meta=0 nullable=0 is_null=0 */ ### SET ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane Doe' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=31 /* INT meta=0 nullable=0 is_null=0 */
- Delete_rows 事件:記錄刪除數(shù)據(jù)的操作,包含被刪除行的信息。例如:
#120505 14:35:00 server id 1 end_log_pos 450 CRC32 0x45678901 Delete_rows: table id 123 flags: STMT_END_F ### DELETE FROM `testdb`.`users` ### WHERE ### @1=1 /* INT meta=0 nullable=0 is_null=0 */,@2='Jane Doe' /* VARCHAR(50) meta=50 nullable=0 is_null=0 */,@3=31 /* INT meta=0 nullable=0 is_null=0 */
通過上述方法和對內(nèi)容的解析,能夠深入了解 MySQL 數(shù)據(jù)庫中數(shù)據(jù)的變化歷史,為數(shù)據(jù)庫的維護和故障排查提供有力支持。
到此這篇關(guān)于MySQL Binlog 日志查看方法及查看內(nèi)容解析的文章就介紹到這了,更多相關(guān)mysql 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
安裝配置MySQLMTOP來監(jiān)控MySQL運行性能的教程
這篇文章主要介紹了安裝配置MySQLMTOP來監(jiān)控MySQL運行性能的教程,MySQLMTOP具有B/S方式的圖形化操作頁面,需要的朋友可以參考下2015-12-12ubuntu server配置mysql并實現(xiàn)遠程連接的操作方法
下面小編就為大家分享一篇ubuntu server配置mysql并實現(xiàn)遠程連接的操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析
這篇文章主要介紹了MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07MySQL數(shù)據(jù)誤刪或者誤更新如何恢復(fù)詳細步驟(一看就會)
本文主要為開發(fā)人員提供在測試環(huán)境中恢復(fù)近期誤操作的少量數(shù)據(jù)的方法,首先介紹了如何下載并安裝MyFlash工具,然后詳細講解了如何利用該工具和MySQL的binlog日志來恢復(fù)誤刪或誤更新的數(shù)據(jù),介紹的非常詳細,需要的朋友可以參考下2024-10-10