查看操作历史按照日期筛选日志

项目组同事表示数据在2019年6月25日18点到2019年6月26日9点之间被人改动过,知道是哪个库的哪张表,但是不知道是做了什么改动,目前无法进行测试。

过程:

使用mysqlbinlog解析二进制日志,由于mysql.log 有1.3g,检查了binlog之后,发现昨天的日志有3个Binlog,因此通过该命令解析,但是binlog解析并没有记录登陆的ip。
此处没有使用show binary log events 的原因是被加密了,无法查看。

mysqlbinlog命令参数:

常用参数:

–start-datetime=datetime 从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。
该值格式应符合DATETIME或TIMESTAMP数据类型。
–stop-datetime=datetime 从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。关于datetime值的描述参见–start-datetime选项。该选项可以帮助及时恢复。
–start-position=N 从二进制日志中第1个位置等于N参量时的事件开始读。
–stop-position=N 从二进制日志中第1个位置等于和大于N参量时的事件起停止读。
–base64-output=DECODE-ROWS 会显示出row模式带来的sql变更
-d 与 --database 效果相同,指定一个数据库名称。
–offset=N,-o N 跳过前N个条目。
-v, --verbose Reconstruct pseudo-SQL statements out of row events. -v
-v adds comments on column data types.
-V, --version Print version and exit.

–GTID相关:
–skip-gtids 跳过GTID
–include-gtids=name 打印时间提供的GTID
–exclude-gtids=name 打印所有事件提供的GTID
–print-table-metadata 打印存储于Table_map_log_event的metadata信息。

注意:
1.不要查看当前正在写入的binlog文件
2.不要加–force参数强制访问
3.如果binlog格式是行模式的,请加 -v 参数

查看binlog_format

show variables like ‘binlog_format’;

grep 命令:

-B, --before-context=NUM print NUM lines of leading context 筛选的字前多少行显示

-A, --after-context=NUM print NUM lines of trailing context 筛选的字后多少行显示

-n, --line-number print line number with output lines
--line-buffered flush output on every line

# grep ‘energywise’ * #在当前目录搜索带'energywise'行的文件

# grep -r ‘energywise’ * #在当前目录及其子目录下搜索'energywise'行的文件

# grep -l -r ‘energywise’ * #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件

命令

切换到实例的存储二进制日志的var目录,可以看到符合时间段要求的二进制日志都是mysql-bin.00076 开头,筛选出来的文件中没有打印具体的年月日哦只有时间段的。

/home/mysql/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --start-datetime=‘2019-06-25 9:00:00’ --stop-datetime=‘2019-06-27 9:00:00’ mysql-bin.00076* |grep ‘irl_system’ -A 50 >>/home/mysql/opdir/zfy/20190627/06273.sql

/home/mysql/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --start-datetime=‘2019-06-25 9:00:00’ --stop-datetime=‘2019-06-27 9:00:00’ mysql-bin.000759 |grep ‘irl_system’ -A 50 >>/home/mysql/opdir/zfy/20190627/06274.sql

/home/mysql/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --start-datetime=‘2019-06-25 18:00:00’ --stop-datetime=‘2019-06-26 09:00:00’ mysql-bin.00076* |grep ‘irl_system’ -A 50 >>/home/mysql/0626/06269.sql

此时已经定位了sql,此时的内容包含改之前的内容和更改之后的内容。但想要查看ip,第一次解析的实例的general_log,但是并没有记录ip.

grep “update irl_system” -A50 -B 10 mysql.log.2019062600 > 5.sql

此时来解析dbproxy的日志,项目组通过proxy连接。我们的策略是proxy日志每隔一个小时打印一次,那就非常方便了。

进入到proxy日志目录:

cd /home/mysql/dbproxy_6203/log

grep “update irl_system” -A50 -B 10 dbproxy.log.wf.2019062519 > 5.sql

这样打印出来的就会出现具体的ip地址登陆的用户,具体的语句,但是没有更改之前的值,因此看需求解析二进制还是proxy日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值