配置文件

先看配置文件 启用了才有这样的记录默认是没有的

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
2
show slave status;
show master 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
2
3
4
5
6
-d可以不指定,如果制定则是仅查找当前库的binlog日志
-vv参数为查看具体SQL语句及备注。
--base64-output=decode-rows参数为解析Binlog日志文件。
--read-from-remote-server参数为远程取文件,如果是本地,则删除这个参数。
--如果仅仅是查看,则去掉 > xxx.sql参数即可
--|<findstr|grep> <table>指定具体表,linux用grep,windows用findstr

如果出现下面这些错误

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
2
3
1. show variables like '%log_bin_basename%';
得到: D:\mysql-5.7.28-winx64\data\mysql-bin
2. 将文件后缀拼上就好

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