mysql binlog 查询执行记录 并恢复

MYSQL · 2023-09-07

客户误删数据库。删了10来条用户。想办法恢复下。
从数据库删掉的,只能从数据库这边找了。通过活动记录可以关联到删除用户的ID。有了一丝希望,但不多。
没有其他数据做支撑,空有id,啥也不是!

网上查了查,mysql 有binlog, 若开启可记录文件操作,insert,update操作。

-- 查询binlog开启状态
show variables like 'log_%';

使用mysqlbinlog,可以使用 find / -name "mysqlbinlog" 查找这家伙在哪里。
直接全部导出太大 可筛选范围 并将 筛选内容 导出到 /www/0907.sql 这个文件中

/www/server/mysql/bin/mysqlbinlog --start-datetime="2023-09-07 08:00:00" --stop-datetime="2023-09-07 13:59:59" /www/server/data/mysql-bin.000023 -r  /www/0907.sql

然后 就可以搜索到 写入记录 ,再根据之前缺少的ID恢复数据即可。

扩展:
mysqlbinlog /data/mysql_data/bin.000008 --database EpointFrame --base64-output=decode-rows -vv --skip-gtids=true |grep -C 1 -i "delete from Audit_Orga_Specialtype" > /opt/sql.log

/data/mysql_data/bin.000008:需要解析的 binlog 日志。

database:只列出该数据库下的行数据,但无法过滤 Rows_query_event。

base64-output=decode-rows -vv:显示具体 SQL 语句。

skip-gtids=true:忽略 GTID 显示。

grep -C 1 -i "delete from dataex_trigger_record":通过管道命令筛选出所需 SQL 及执行时间。

/opt/sql.log:将结果导入到日志文件,方便查看。
参考:
技术分享 | MySQL binlog 日志解析
mysql查看binlog日志

binlog
Theme Jasmine by Kent Liao