MySQL Binlog 記錄所有資料庫變更,每筆操作對應特定事件類型。理解事件類型有助於複制除錯、資料恢復與稽核分析。
enum Log_event_type {
UNKNOWN_EVENT=0, START_EVENT_V3=1, QUERY_EVENT=2, STOP_EVENT=3,
ROTATE_EVENT=4, INTVAR_EVENT=5, LOAD_EVENT=6, SLAVE_EVENT=7,
CREATE_FILE_EVENT=8, APPEND_BLOCK_EVENT=9, EXEC_LOAD_EVENT=10,
DELETE_FILE_EVENT=11, NEW_LOAD_EVENT=12, RAND_EVENT=13,
USER_VAR_EVENT=14, FORMAT_DESCRIPTION_EVENT=15, XID_EVENT=16,
BEGIN_LOAD_QUERY_EVENT=17, EXECUTE_LOAD_QUERY_EVENT=18,
TABLE_MAP_EVENT=19, WRITE_ROWS_EVENT=30, UPDATE_ROWS_EVENT=31,
DELETE_ROWS_EVENT=32, GTID_LOG_EVENT=33, ANONYMOUS_GTID_LOG_EVENT=34,
PREVIOUS_GTIDS_LOG_EVENT=35, TRANSACTION_CONTEXT_EVENT=36,
VIEW_CHANGE_EVENT=37, XA_PREPARE_LOG_EVENT=38, ENUM_END_EVENT
};
# at 4 #160817 11:00:10 server id 1 end_log_pos 120 CRC32 0x03010da1 Start: binlog v 4, server v 5.6.31-log created 160817 11:00:10
BEGIN、STATEMENT 格式 DML、ROW 格式 DDLmysql> SHOW BINLOG EVENTS IN 'mysql-bin.000021'; +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ | mysql-bin.000021 | 120 | Query | 1 | 195 | BEGIN | | mysql-bin.000021 | 195 | Query | 1 | 298 | insert into test.t1 values(1,'a') | | mysql-bin.000021 | 298 | Xid | 1 | 329 | COMMIT /* xid=25 */ | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+
WRITE_ROWS_EVENT (INSERT) - 含新資料UPDATE_ROWS_EVENT - 含修改前後值DELETE_ROWS_EVENT - 含刪除鍵值mysqlbinlog -vv --base64-output=decode-rows 解析| mysql-bin.000027 | 188 | Table_map | 1 | 236 | table_id: 80 (test.t1) | | mysql-bin.000027 | 236 | Write_rows | 1 | 278 | table_id: 80 flags: STMT_END_F | | mysql-bin.000027 | 425 | Update_rows | 1 | 475 | table_id: 80 flags: STMT_END_F | | mysql-bin.000027 | 622 | Delete_rows | 1 | 664 | table_id: 80 flags: STMT_END_F |
max_binlog_size 或 FLUSH LOGS)| mysql-bin.000028 | 120 | Rotate | 1 | 167 | mysql-bin.000029;pos=4 |
SET @@SESSION.GTID_NEXT= 'uuid:seq'# mysql-bin.000033 | 120 | Previous_gtids | 1 | 191 | cad449f2...:1 | | 191 | Gtid | 1 | 239 | SET @@SESSION.GTID_NEXT= 'cad449f2...:2' | ... # mysql-bin.000034 | 120 | Previous_gtids | 1 | 191 | cad449f2...:1-3 | -- 累積前檔案所有 GTID
| mysql-bin.000030 | 120 | Stop | 1 | 143 | |
mysqlbinlog 解析特定事件區間重放