一、mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
二、是否启用了日志
mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
怎样知道当前的日志
mysql> show master status;
顯示二進制日志數目
mysql> show master logs;
看二进制日志文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或者shell>mysqlbinlog mail-bin.000001 | tail
三、查看log
查看 Binlog 日志内容,使用 mysqlbinlog 工具:
mysqlbinlog [选项] binlog文件名
例如,要查看mysql-bin.000003的内容,可以执行:
mysqlbinlog mysql-bin.000003
--start-datetime和--stop-datetime:根据时间范围查看日志。如查看 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 日志内容解析
Binlog 日志包含多个事件(Event),每个事件记录了一次数据库操作。常见的事件类型及解析如下:
Format_desc 事件:
通常是 Binlog 日志的第一个事件,用于描述该 Binlog 日志的格式信息,包括日志版本、创建时间等。例如:
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是事件发生时间,server id 1是服务器 ID,end_log_pos 123表示该事件结束的位置,CRC32 0xabcdef01是 CRC32 校验和。
Query 事件:
记录了一条 SQL 查询语句,通常是INSERT、UPDATE、DELETE等更改数据的操作。例如:
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是事件发生时间,server id 1是服务器 ID,end_log_pos 256是事件结束位置。thread_id=3表示执行该查询的线程 ID,exec_time=0是查询执行时间(秒),error_code=0表示执行无错误。下面的use testdb;指定了操作的数据库,SET TIMESTAMP=1336223520;设置了时间戳,最后是具体的INSERT语句。
Row_event 系列事件(如 Table_map 事件、Write_rows 事件、Update_rows 事件、Delete_rows 事件):
在基于行模式(row - based)的 Binlog 记录中常见。
Table_map 事件:用于映射表的结构信息,例如:
120505 14:33:00 server id 1 end_log_pos 300 CRC32 0x87654321 Table_map: testdb.users mapped to number 123
这里表示testdb数据库中的users表被映射为编号 123。
Write_rows 事件:记录了插入数据的操作。例如:
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表插入了一条数据,数据的具体字段值以@符号表示。
Update_rows 事件:记录更新数据的操作,会包含更新前和更新后的行数据。例如:
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 事件:记录删除数据的操作,包含被删除行的信息。例如:
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 */
四、删除MySQL log bin 日志操作记录
1.SHOW MASTER LOGS;
2.RESET MASTER;
3.service mysql stop
4.关闭4个参数。
#log-bin=mysql-bin
#log-slow-queries=slowquery.log
#long_query_time=3
#binlog_format=mixed
5.service mysql start
