MySQL使用MariaDB的binlog闪回

原文: https://www.yuque.com/wei01/wql35u/xcig4l
8.0之前应该都支持

解压mariadb安装包:
tar xvf mariadb-10.4.20-linux-x86_64.tar.gz 


模拟误删除
session 1:
mysqlslap -a -uroot -proot1234 -c 50 -i 100
mysqlslap: [Warning] Using a password on the command line interface can be insecure.

session 2
delete from tr;
Query OK, 10000 rows affected (2.45 sec)



解析binlog, 找到误删时间点
/root/mariadb-10.4.20-linux-x86_64/bin/mysqlbinlog -uroot -proot1234 --database=test --table=tr -vv --base64-output=DECODE-ROWS mysql-bin.000017 --start-datetime '2021-07-08 14:11:00'> /tmp/raw.sql


#210708 14:11:28 server id 24750  end_log_pos 47123213 CRC32 0xd76755ff         Ignorable
# Ignorable event type 29 (MySQL Rows_query)
# at 47123213
#210708 14:11:28 server id 24750  end_log_pos 47123262 CRC32 0xd9e8559c         Table_map: `test`.`tr` mapped to number 964
# at 47123262
# at 47131469
# at 47139676
# at 47147883
# at 47156090
# at 47164297
# at 47172504
# at 47180711
# at 47188918
# at 47197125
# at 47205332
# at 47213539
#210708 14:11:28 server id 24750  end_log_pos 47131469 CRC32 0x50535c4b         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47139676 CRC32 0x9f9f77b2         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47147883 CRC32 0x59eeedaa         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47156090 CRC32 0xdb0a684a         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47164297 CRC32 0xdf79875c         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47172504 CRC32 0x2e1e01b9         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47180711 CRC32 0xcff83af6         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47188918 CRC32 0x0987243a         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47197125 CRC32 0xe145a0a2         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47205332 CRC32 0x1169c490         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47213539 CRC32 0x483cb228         Delete_rows: table id 964
#210708 14:11:28 server id 24750  end_log_pos 47213682 CRC32 0x735d8aca         Delete_rows: table id 964 flags: STMT_END_F
### DELETE FROM `test`.`tr`
...

###   @2=993 /* INT meta=0 nullable=1 is_null=0 */
###   @3=NULL /* VARSTRING(30) meta=30 nullable=1 is_null=1 */
### DELETE FROM `test`.`tr`
### WHERE
###   @1=10000 /* INT meta=0 nullable=0 is_null=0 */
###   @2=516 /* INT meta=0 nullable=1 is_null=0 */
###   @3=NULL /* VARSTRING(30) meta=30 nullable=1 is_null=1 */
# Number of rows: 10000
# at 47213682
#210708 14:11:28 server id 24750  end_log_pos 47213713 CRC32 0xcd8993e2         Xid = 146956
COMMIT/*!*/;

生成闪回语句
/root/mariadb-10.4.20-linux-x86_64/bin/mysqlbinlog --flashback -uroot -proot1234 --database=test --table=tr --start-position=47123213 --stop-position=47213682 mysql-bin.000017 > /tmp/flash.sql

由于开启GTID所以报错,建议先恢复到一个临时环境,然后再导入到生产环境

[root@mysql1 binlog]# mysql</tmp/flash.sql 
ERROR 1782 (HY000) at line 28: @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.


[root@mysql1 binlog]# mysql</tmp/flash.sql 
[root@mysql1 binlog]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9848
Server version: 5.7.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

[root@localhost][(none)]: use test;
Database changed
[root@localhost][test]: select count(*) from tr;
+----------+
| count(*) |
+----------+
|    10000 |
+----------+
1 row in set (0.01 sec)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值