配置文件
先看配置文件 启用了才有这样的记录默认是没有的
linux系统中的 /etc/my.cnf
my.cnf内容:log-bin = mysqlbin # 默认配置,mysqlbin 为binlog文件名称
binlog文件一般放在/var/lib/mysql
比如上面的设置重启数据库会生成mysqlbin.000001文件,并放在/var/lib/mysql下
自定义文件存放位置
修改配置文件,vi /etc/my.cnf
,找到log-bin的部分
配置自动清理在my.cnf文件中,这个文件路径不知道的话执行mysql --help | grep 'Default options' -A 1
,就会列出文件的路径来

然后重启service mysql restart
,去新建的目录下看看,已经有最新的日志了
下面列几个常用的命令
查看bin_log相关信息
show variables like '%log_bin%';
查看日志开启状态
show variables like 'log_%';

查看所有binlog日志列表
show binary logs;
或者
show master logs;

查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点
show master status;

刷新binlog日志
刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果
flush logs;
清空所有binlog日志
reset master;
查看binlog日志内容
日志查看,因为是二进制文件没法用vi等打开,可以用mysql的mysqlbinlog打开,/usr/bin/mysqlbinlog /home/logs/mysql-bin.000001,当然每个人路径可能不一样,这个只能自己去找了。

只查看第一个binlog文件的内容
show binlog events;
查询指定binlog文件的内容,以查看数据库当下执行操作
mysql-bin.000006
可以通过show master status;
指令获取到
show binlog events in 'mysql-bin.000006';
可以从某个位置开始找(比如想查找UPDATE相关的,那过滤下UPDATE,看下大概位置,因为一个binlog文件可能很大全部都导出来会很消耗时间)
show binlog events in 'mysql-bin.000006' FROM 1 LIMIT 15;
查看从库relay_log(从库回放位置点)具体信息
可以查看当前从库回放的位置点,利用其看下relaylog当前在做什么动作
relay-bin
可以通过show slave status;
指令获取到
show relaylog events in 'relay-bin.012100' from 99400503 limit 20;
查看主/从库同步信息
如果涉及主从延迟,可使用如下命令查看具体信息
可以利用其查看当前正在写入的binlog文件
1 | show slave status; |
导出binlog文件
- 这是按照位置导出/查看
mysqlbinlog -u[$User] -p[$Password] -h[$Host] -d[$database] --base64-output=decode-rows --start-position=1 --stop-position=2 --read-from-remote-server -vv mysql-bin.xxx* |[findstr|grep] [table] > xxx.sql
- 这是按照时间导出/查看
mysqlbinlog -u[$User] -p[$Password] -h[$Host] -d[$database] --base64-output=decode-rows --start-datetime="2022-01-25 11:00:31" --stop-datetime="2022-01-25 11:30:00" --read-from-remote-server -vv mysql-bin.xxx* |[findstr|grep] [table] > xxx.sql
1 | -d可以不指定,如果制定则是仅查找当前库的binlog日志 |
如果出现下面这些错误
1 | unknown variable 'default-character-set=utf8mb4' |
先检查my.cnf配置文件中是否存在default-character-set=utf8mb4字段,如果存在,可以通过在命令中添加--no-defaults参数避免该问题。例如:mysqlbinlog --no-defaults -u[$User] -p[$Password] -h[$Host] --read-from-remote-server mysql-bin.XXX > [$File_Name]。
或是下面的错误

可能是找不到文件, 可以指定绝对路径来查找
步骤如下
1 | 1. show variables like '%log_bin_basename%'; |

如果mysqlbinlog工具在操作时出现这样的错误
Found invalid event in binary log
,那很有可能是本地mysqlbinlog版本和远程的mysqlbinlog版本对不上,使用mysqlbinlog -V
来验证下即可