mysql开启和解析binlog日志
binlog介绍
binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息,可用于主从复制和数据恢复,可使用mysqlbin命令查看二进制日志的内容。
binlog格式
binlog的格式也有三种:STATEMENT、ROW、MIXED 。
1、STATMENT模式:基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。
优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。
缺点:在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
2、基于行的复制(row-based replication, RBR):不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。
优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。
缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。
3、混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
binlog 常用参数
参数名 | 含义 |
---|---|
log_bin = {on | off | base_name} | 指定是否启用记录二进制日志或者指定一个日志路径 |
sql_log_bin ={ on | off } | 指定是否启用记录二进制日志 |
expire_logs_days | 指定自动删除二进制日志的时间,即日志过期时间 |
log_bin_index | 指定mysql-bin.index文件的路径 |
binlog_format = { mixed | row | statement } | 指定二进制日志基于什么模式记录 |
max_binlog_size | 指定二进制日志文件最大值 |
binlog_cache_size | 指定事务日志缓存区大小 |
max_binlog_cache_size | 指定二进制日志缓存最大大小 |
sync_binlog = { 0 | n } | 指定写缓冲多少次,刷一次盘 |
开启binlog
1)检查状态
log_bin 为 off 说明未开启
show variables like 'log_%';
+----------------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------------+--------------------------------------------+
| log_bin | OFF |
2)配置binlog
修改my.ini配置文件
# 配置binlog文件路径
log_bin = D:\Program Files\MySql_Bin\mysql-bin
# 配置模式
binlog_format = statement
# 配置文件大小
max_binlog_size = 100m
# 配置过期时间
expire_logs_days = 30
3)重新启动服务
log_bin 为 on 说明开启
mysql> show variables like 'log_%';
+----------------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------------+--------------------------------------------+
| log_bin | ON |
| log_bin_basename | D:\Program Files\MySql_Bin\mysql-bin |
| log_bin_index | D:\Program Files\MySql_Bin\mysql-bin.index |
4)查看文件
D:\Program Files\MySql_Bin 的目录 ..
2020/02/03 16:12 120 mysql-bin.000001
2020/02/03 16:12 44 mysql-bin.index
5)查看内容
方式1
mysql> show binlog events in "mysql-bin.000001" ;
方式2
利用mysqlbinlog.exe命令
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe
查看命令参数
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe --help
查看所有内容日志
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe --database=sharding E:\MySql_Bin\mysql-bin.000001
查看指定数据库指定时间段的日志
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe --start-datetime="2020-02-03 16:35:01" --stop-datetime="2020-02-03 16:39:01" --database=sharding E:\MySql_Bin\mysql-bin.000001