查找MySQL的执行日志

Posted 虚惊一百场

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找MySQL的执行日志相关的知识,希望对你有一定的参考价值。

最近遇到了一个很奇怪的事,某个服务线上环境中有一张表的数据总是莫名其妙的消失,说来也很奇怪。但是生产环境又不能做调试,于是只好通过翻各种日志来破案,这里将mysql的log_bin日志的查询过程大致描述一下。

说明一下,binlog是一个记录了mysql所有操作的二进制文件。

首先,确保已经打开日志记录,执行sql命令:

show variables like \'log_bin%\';
如果是ON的话,就说明开启了日志记录,并且这个日志记录默认是File,这就是就是我们接下来要找的文件。如果是记录为TABLE,那就是直接查数据库了。

第一步,找到日志文件位置

一般情况下,日志文件都会在安装目录下的logs中
但是配置文件可以修改日志存储路径,所以我们直接用sql命令查找:
show master status;
这个命令会将最新的一个日志文件地址描述出来。

第二步,找到可编译二进制文件的mysqlbinlog可执行文件

在mysql目录下执行shell命令:
find ./ -name mysqlbinlog
如果没找到,那就直接用shell命令(使用前确保有权限):
find / -name mysqlbinlog

第三步,再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`"

以上是关于查找MySQL的执行日志的主要内容,如果未能解决你的问题,请参考以下文章

linux中怎么查看mysql数据库版本

执行代码时有时不显示对话框片段

MySQL触发器

MySQL慢日志全解析

mysql 日志记录触发器,查找更改的列

如何动态开启mysql的慢查询日志记录