mysqlbinlog 的常用参数, 记一次回滚操作

mysqlbinlog 的常用参数, 记一次回滚操作

mysqkbinlog 官方文档

注意:

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

输出示例

1
2
# at 141
#200309 9:28:36 server id 123 end_log_pos 245 Query thread_id=3350 exec_time=11 error_code=0

第一行 at 表示此事件在 二进制日志文件中的偏移量(position)
第二行 开头是时间的开始时间(前两位表示年份),紧接着是事件的server id, endlog_postion 表示下一个事件的position即当前事件结束的position+1, thread_id 表示哪个线程执行的该事件,exec_time 表示事件花费的时间(在从服务器上此时间表示从服务器上的结束执行时间减去主服务器上的开始执行时间,从而可以看出复制的滞后时间), error_codo 是错误码0代表成功。

常用参数

参数 含义 示例
–base64-output [ AUTO, NEVER,DECODE-ROWS], DECODE-ROWS 指定要将行事件解码并显示为注释的SQL语句通过,需要指定—v选项。同时隐藏了BINLOG语句. DECODE-ROWS
–database 数据库
–offset 偏移量
–start-datetime 开始时间
–stop-datetime 结束时间
–start-position postion 起始位置
–stop-position positon 结束位置
–verbose, -v 构建sql语句

记录一次误删除的回滚

在测试服务器上删除数据的时候,where条件有误,删除了一些重要的数据,由于开启了binlog 并且是ROW模式所以想到了使用mysqlbinlog 找出被删除的数据,并重新插入

show variables like ‘log_bin’; 查看binlog 是否开启

show variables like ‘log_%’; 查看binlog 日志文件位置

1.第一步将最新的binlog日志拷贝出来,通过mysqlbinlog工具将最近时间段的事件导出,

1
sudo mysqlbinlog  --base64-output=DECODE-ROWS -v  --start-datetime='2020-07-22 15:30:00' --stop-datetime='2020-07-22 15:48:00' --database='gemini_base' --start-position=749811837   mysql-bin.000047 >> binlog_output.sql

2.使用grep 过滤出执行误删除操作的事件

1
grep -A21 "DELETE FROM \`gemini_order`.`order_base`" | grep "@" >> row_value

3. 使用正则将提取出值并转成 insert 语句,插入即可