问题描述:创建测试库和测试表,先update数据,在delete数据,在update数据,通过gtid查找两次update的值。

参考文档:https://baijiahao.baidu.com/s?id=1661214737415657389&wfr=spider&for=pc

1.创建测试数据

create database back_gtid charset utf8mb4;
use back_gtid; create table tmp(id int, name varchar(20));
insert into tmp values(1,'zs'),(2,'ls'),(3,'ww'),(4,'zl'),(5,'qb');
commit;

2.全库导出

mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction -S /data/3308/mysql.sock | gzip > /tmp/full_$(date +%F).sql.gz

3.修改数据

use back_gtid;
update tmp set name = 'ZS' where id=1;
commit;
update tmp set name = 'LS' where id =2;
commit;
insert into tmp values(6,'aa'),(7,'bb'),(8,'cc');
commit;
delete from tmp where id = 5;
commit;

4.删除所有数据

use back_gtid;
delete from tmp;
commit;

5.再插入数据新的数据

use back_gtid;
insert into tmp values(9,"dd"),(10,"ee");
commit;

6.准备多实例测试库3309,做中转库做数据测试

systemctl start mysqld3309.service

7.全库恢复

cd /tmp
gunzip full_2021-02-01.sql.gz

8.从备份中找到创建库时的GTID,跳过误删除部分,加上新插入的数据行,查找删除库前的position号,从6开始

[root@mysql-test /tmp 20:00:05]# grep -A 10 "GTID_PURGED" full_2021-02-01.sql
SET @@GLOBAL.GTID_PURGED='b7ccf235-5f7b-11eb-a983-000c29a61c0a:1-5'; --
-- Position to start replication or point-in-time recovery from
-- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000021', MASTER_LOG_POS=1180; --
-- Current Database: `back_gtid`
--

9.查看当前的gtid值,现在的位置号是11,说明从备份数据到现在为止的操作是6-11,现在要在6-11的区间内排除误删数据的操作

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000021 | 2890 | | | b7ccf235-5f7b-11eb-a983-000c29a61c0a:1-11 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)

10.每一次事务的提交,都对应一个GTID号,从模拟执行过程看,需要10就是删除表数据的元凶,恢复时要排除它

从下面的events中可以看到,delete操作的位置号是10,

mysql> show binlog events in 'mysql-bin.000021';
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000021 | 4 | Format_desc | 8 | 123 | Server ver: 5.7.32-log, Binlog ver: 4 |
| mysql-bin.000021 | 123 | Previous_gtids | 8 | 154 | |
| mysql-bin.000021 | 154 | Gtid | 8 | 219 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:1' |
| mysql-bin.000021 | 219 | Query | 8 | 325 | create database test3308 |
| mysql-bin.000021 | 325 | Gtid | 8 | 390 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:2' |
| mysql-bin.000021 | 390 | Query | 8 | 497 | drop database back_gtid |
| mysql-bin.000021 | 497 | Gtid | 8 | 562 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:3' |
| mysql-bin.000021 | 562 | Query | 8 | 687 | create database back_gtid charset utf8mb4 |
| mysql-bin.000021 | 687 | Gtid | 8 | 752 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:4' |
| mysql-bin.000021 | 752 | Query | 8 | 878 | use `back_gtid`; create table tmp(id int, name varchar(20)) |
| mysql-bin.000021 | 878 | Gtid | 8 | 943 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:5' |
| mysql-bin.000021 | 943 | Query | 8 | 1020 | BEGIN |
| mysql-bin.000021 | 1020 | Table_map | 8 | 1074 | table_id: 109 (back_gtid.tmp) |
| mysql-bin.000021 | 1074 | Write_rows | 8 | 1149 | table_id: 109 flags: STMT_END_F |
| mysql-bin.000021 | 1149 | Xid | 8 | 1180 | COMMIT /* xid=21 */ |
| mysql-bin.000021 | 1180 | Gtid | 8 | 1245 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:6' |
| mysql-bin.000021 | 1245 | Query | 8 | 1322 | BEGIN |
| mysql-bin.000021 | 1322 | Table_map | 8 | 1376 | table_id: 111 (back_gtid.tmp) |
| mysql-bin.000021 | 1376 | Update_rows | 8 | 1428 | table_id: 111 flags: STMT_END_F |
| mysql-bin.000021 | 1428 | Xid | 8 | 1459 | COMMIT /* xid=650 */ |
| mysql-bin.000021 | 1459 | Gtid | 8 | 1524 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:7' |
| mysql-bin.000021 | 1524 | Query | 8 | 1601 | BEGIN |
| mysql-bin.000021 | 1601 | Table_map | 8 | 1655 | table_id: 111 (back_gtid.tmp) |
| mysql-bin.000021 | 1655 | Update_rows | 8 | 1707 | table_id: 111 flags: STMT_END_F |
| mysql-bin.000021 | 1707 | Xid | 8 | 1738 | COMMIT /* xid=652 */ |
| mysql-bin.000021 | 1738 | Gtid | 8 | 1803 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:8' |
| mysql-bin.000021 | 1803 | Query | 8 | 1880 | BEGIN |
| mysql-bin.000021 | 1880 | Table_map | 8 | 1934 | table_id: 111 (back_gtid.tmp) |
| mysql-bin.000021 | 1934 | Write_rows | 8 | 1993 | table_id: 111 flags: STMT_END_F |
| mysql-bin.000021 | 1993 | Xid | 8 | 2024 | COMMIT /* xid=654 */ |
| mysql-bin.000021 | 2024 | Gtid | 8 | 2089 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:9' |
| mysql-bin.000021 | 2089 | Query | 8 | 2166 | BEGIN |
| mysql-bin.000021 | 2166 | Table_map | 8 | 2220 | table_id: 111 (back_gtid.tmp) |
| mysql-bin.000021 | 2220 | Delete_rows | 8 | 2263 | table_id: 111 flags: STMT_END_F |
| mysql-bin.000021 | 2263 | Xid | 8 | 2294 | COMMIT /* xid=656 */ |
| mysql-bin.000021 | 2294 | Gtid | 8 | 2359 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:10' |
| mysql-bin.000021 | 2359 | Query | 8 | 2436 | BEGIN |
| mysql-bin.000021 | 2436 | Table_map | 8 | 2490 | table_id: 111 (back_gtid.tmp) |
| mysql-bin.000021 | 2490 | Delete_rows | 8 | 2581 | table_id: 111 flags: STMT_END_F |
| mysql-bin.000021 | 2581 | Xid | 8 | 2612 | COMMIT /* xid=661 */ |
| mysql-bin.000021 | 2612 | Gtid | 8 | 2677 | SET @@SESSION.GTID_NEXT= 'b7ccf235-5f7b-11eb-a983-000c29a61c0a:11' |
| mysql-bin.000021 | 2677 | Query | 8 | 2754 | BEGIN |
| mysql-bin.000021 | 2754 | Table_map | 8 | 2808 | table_id: 111 (back_gtid.tmp) |
| mysql-bin.000021 | 2808 | Write_rows | 8 | 2859 | table_id: 111 flags: STMT_END_F |
| mysql-bin.000021 | 2859 | Xid | 8 | 2890 | COMMIT /* xid=666 */ |
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
45 rows in set (0.00 sec)

11.将二进制文件导出为sql文件,从6-11也就是现在位置,但是需要排除恢复误删除的区间内的10

mysqlbinlog --skip-gtids --include-gtids="b7ccf235-5f7b-11eb-a983-000c29a61c0a:6-11" --exclude-gtids="b7ccf235-5f7b-11eb-a983-000c29a61c0a:10" /data/3308/mysql-bin.000021 > /tmp/gtid-bin.sql;

12.将备份恢复到临时库,先恢复之前备份的数据,在恢复提取出来的数据是否正确

mysql -uroot -p -S /data/3309/mysql.sock

 set sql_log_bin=0;
 source /tmp/full_2021-02-01.sql;
 source /tmp/gtid-bin.sql;

13.查询验证

use back_gtid;
select * from tmp;

14.没问题可以恢复到生产

mysqldump -uroot -p --set-gtid-purged=OFF -S /data/3309/mysql.sock back_gtid tmp > /tmp/gtid-tmp.sql

mysql -uroot -p -S /data/3308/mysql.sock
set sql_log_bin=0;
use back_gtid;
source /tmp/gtid-tmp.sql;

15.查询验证3308是否恢复

use back_gtid;
select * from tmp;
set sql_log_bin=1;

最新文章

  1. noip2016十连测round1
  2. C. Santa Claus and Robot 思考题
  3. [推荐]dubbo分布式服务框架知识介绍
  4. js判断浏览器种类以及版本号(从jquery1.8中抠出来的)
  5. iOS 中的加密方式
  6. mysql的几种隐式转化
  7. struts2中的国际化
  8. Redis 小白指南(四)- 数据的持久化保存(草稿)
  9. Git 本地保存账号密码的删除或修改
  10. SpringBoot学习笔记(2) Spring Boot的一些配置
  11. 【转】Anaconda下安装pyecharts步骤及常见错误
  12. vue的一些注意点
  13. Java相关问题整理
  14. INotifyPropertyChanged
  15. 菜鸟随谈 Bootstrap 框架
  16. orcal安装
  17. 委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
  18. C++学习笔记(HelloWorld,类型和值)
  19. go 接口
  20. SQL的三种连接方式内连接、左连接、外连接

热门文章

  1. myeclipse经常弹出Subversion Native Library Not Available框解决办法
  2. Springboot 添加druid监控
  3. 手写系列:call、apply、bind、函数柯里化
  4. MySQL性能分析show profiles详解
  5. linux串口通信 接收信息不完整 读取不全
  6. 感谢 Gridea,让我有动力写作
  7. 一些php文件函数
  8. 商品类型的下拉框绑定一个事件,通过ajax获取属性
  9. js 鼠标点击页面出现文字
  10. Kali Debian 修改时区