最近遇到了一个很奇怪的事,某个服务线上环境中有一张表的用户记录感觉很异常,于是只好通过翻各种日志来破案,这里将mysql的log_bin日志的查询过程大致描述一下。
MySQL binlog 文件是 MySQL 数据库管理系统内部的一种二进制日志文件。
如何查看 MySQL Binlog 文件
查看 MySQL binlog 文件,需要用到 MySQL 提供的 binlog 工具。可以使用以下命令查看当前数据库服务器的 binlog 文件:
mysqlbinlog --help
可以使用以下命令查看指定 binlog 文件的内容:
mysqlbinlog binlog.000001 > binlog.sql
此命令会将 binlog.000001 文件转储到 binlog.sql 文件,并可以使用文本编辑器等工具查看该文件。
Linux下使用mysqlbinlog工具报错(-bash: mysqlbinlog: command not found)
一般我们的mysqlbinlog和mysql安装在同一路径,例如我的 mysql路径就是:/www/server/mysql/bin/mysql
cd /usr/local/bin 命令解释:进入到要映射命令的文件夹
ln -s /www/server/mysql/bin/mysqlbinlog mysqlbinlog 命令解释: 把mysqlbinlog安装目录/www/server/mysql/bin/mysqlbinlog 映射到/usr/local/bin目录下,/www/server/mysql/bin/mysqlbinlog 这个路径一定要是你自己的mysqlbinlog安装路径哦,不要直接复制
或者直接指定目录
/www/server/mysql/bin/mysqlbinlog binlog.000001 > binlog.sql
在mysql-bin.010001中找到关键字
比如我要在mysql-bin.010001中找到delete操作,那么就可以用shell命令:
mysqlbinlog -v ../logs/logbin/mysql-bin.010001 | grep -i delete
其中 -i 表示忽略大小写
由于delete操作十分的多,我还想精确到删除某一张表,那我就可以改写命令:
mysqlbinlog -v ../logs/logbin/mysql-bin.010001 | grep -i 'delete from tableName'
我还想找到delete删除操作的前后几行,比如前三行,后十行,那么我的命令就会变成:
mysqlbinlog -v ../logs/logbin/mysql-bin.010001 | grep -i -A 10 -B 3 'delete from tableName'
还有我的查询条件中包含特殊字符:
mysqlbinlog -v ../logs/logbin/mysql-bin.010001 | grep -i -A 10 -B 3 "insert into tableName (`id`"