1、检查当前是否开启binlog存储
输入命令show variables like '%log_bin%';
,结果如下
可以看到log_bin的值是ON,说明binlog开启了。
2、查找binlog的存储位置
这个去到数据库的my.cnf配置文件中寻找,有一个log_bin的配置
切换到log_bin的目录下,可以发现有多个binlog日志文件和一个索引文件,这个索引文件记录了binlog日志文件的顺序,每次重启mysql都会生成一个新的binlog日志文件,编号依次递增
3、查看binlog文件
在mysql的bin目录下,有一个binlog日志分析工具mysqlbinlog,在当前目录下,输入下面命令可以查看对应的binlog日志信息
查询某时间段内tacs_log库的操作日志,写到txt文件中
./mysqlbinlog --no-defaults --database=tacs_log --start-datetime="2023-03-03 14:00:00" --stop-datetime="2023-03-03 14:45:00" /app/logs/mysql/mysql-binlog.000056 > temporary.txt
将操作日志输出到屏幕上
./mysqlbinlog --no-defaults --database=tacs_log --start-datetime="2023-03-03 14:00:00" --stop-datetime="2023-03-03 14:45:00" /app/logs/mysql/mysql-binlog.000056 |more
查询某个具体表的日志输出到文件
./mysqlbinlog --no-defaults --database=tacs_log --start-datetime="2023-03-03 14:00:00" --stop-datetime="2023-03-03 14:45:00" /app/logs/mysql/mysql-binlog.000056 |grep auth_service_log_20230206 >1.txt
在查看日志时,发现了一个日志文件好像是乱码,实际上这是经过了base64编码之后的结果,所以,在操作命令上加上解码即可,命令如下
./mysqlbinlog --no-defaults --database=tacs_log --start-datetime="2023-03-03 14:00:00" --stop-datetime="2023-03-03 14:45:00" -vv --base64-output=decode-rows /app/logs/mysql/mysql-binlog.000056 > temporary.txt
可以看到,对应的操作sql已经展示出来,上面是我测试了删除数据,可以看到表、数据都打印出来,根据这些可以进行数据恢复。
4、补充
命令参数解析:
--start-position=103 起始位置
--stop-position=203 结束位置
--start-datetime 起始时间点
--stop-datetime 结束时间点