mysqlbinlog
(2023-08-15 15:05:17)
标签:
mysqlbinlog |
分类: 服务器 |
binlog是mysql的二进制日志。binlog只记录变更相关的操作信息,如语句执行时间、时长、操作数据等额外信息。不包括select、show操作。
作用:
1 查看mysql的变更
2 mysql数据备份与恢复
3 mysql的主从复制
binlog的格式
1 statement模式
描述:记录数据库执行的原始SQL语句;
优点:不需要记录每一行的变化,日志量相对较小,节省IO,提高性能,主从复制网络带宽小;
缺点:由于记录的是SQL执行语句,为了保证这些语句能在slave端执行,必须记录上下文信息保证slave上执行能得到与master相同的结果;某些SQL函数无法使用,比如sysdate(),会出现主从数据不一致的问题。
2 row模式
描述:记录一行数据在更改前和更改后的变化;
优点:保证数据绝对一致性;不管sql是什么,引用什么函数,只记录执行后的结果;
缺点:row模式下二进制文件最大,占用硬盘空间,网络带宽高,对性能有一定影响;
3 mixed模式
描述:statement模式与row模式的结合,默认采用statement模式,特殊情况会转row模式;
使用了类似uuid()、user()、current_user()等不确定的函数
使用了UDF
使用了临时表
使用了insert delay函数
binlog二进制日志的查看
show variables like 'binlog_format';
binlog日志开启
在mysql配置文件中添加log_bin选项开启
log_bin=dir/filename
比如:log_bin=mysql-bin,以后产生的日志文件名称mysql-bin.000001;
dir为文件路径,默认放在数据目录下;
filename指定binlog文件名称;
形如mysql-bin.000001;
重启mysql服务或执行flush logs都会产生新的binlog日志文件;
linux配置文件路径:/etc/my.cnf(若没有,可通过locate my.cnf查找位置)
Windows配置文件路径:/my.ini
binlog文件路径
若指定为绝对路径,则为指定路径:
log_bin=C:\mysql-binlog\mysql-bin
若不指定绝对路径则默认当前目录下Data文件夹下:log_bin=mysql-bin
binlog文件:mysql-bin.000001
查看binlog日志是否开启
show variables like 'log_bin';
查看所有二进制文件列表
show binary logs;
查看当前正在写入的二进制文件
show master status;
查看二进制文件内容
mysqlbinlog mysql.000001
删除binlog文件
binlog日志文件中存储的大量信息,长时间不会清理会占用磁盘空间;
手工删除
1 删除所有二进制文件
reset master;
2 根据编号删除二进制文件
purge binary logs to 'xxx'
3 根据创建时间删除二进制文件
purge binary logs before '2022-06-01 00:00:00'
自动清理
设置expire_logs_days参数,表示自动清理;默认值为0,表示不开启;启用后mysql启动或flush
logs时删除超出当前天数的binlog;
设置15天自动过期,直接在配置文件my.ini加入 expire_logs_days=15;
查看expire_logs_days参数设置
show variables like 'expire_logs_days'
binlog刷盘时机
bin log的write和fsync时机是由参数 sync_binlog 控制,默认是 0 。
为0的时候,表示每次提交事务都只 write,由系统自行判断什么时候执行fsync。虽然性能得到提升,但是机器宕机,page
cache里面的 binglog 会丢失;
为1的时候,表示每次提交事务都会执行fsync,更加安全;
binlog常用命令
-- 查询binglog日志列表
show binary logs;
-- 查询第一个(最早)的binlog日志
show binlog events;
-- 指定查询 mysql-bin.000077 日志
show binlog events in 'mysql-bin.000077';
-- 指定查询 mysql-bin.000077 日志,并且从pos=1024开始查
show binlog events in 'mysql-bin.000077' from 1024;
-- 指定查询 mysql-bin.000077 日志,并且从pos=1024开始查起,查询10条
show binlog events in 'mysql-bin.000077' from 1024 limit
10;
-- 指定查询 mysql-bin.000077 日志,并且从pos=1024开始查起,偏移2行,查询10条
show binlog events in 'mysql-bin.000077' from 1024 limit
2,10;

加载中…