基于GTID恢复误篡改数据
问题描述:创建测试库和测试表,先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;
基于GTID恢复误篡改数据的更多相关文章
- Mysql基于GTID复制模式-运维小结 (完整篇)
先来看mysql5.6主从同步操作时遇到的一个报错:mysql> change master to master_host='192.168.10.59',master_user='repli' ...
- mysqlbinlog工具基于日志恢复详细解释
如果每天都会生成大量的二进制日志,这些日志长时间不清理的话,将会对磁盘空间带来很大的浪费,所以定期清理日志是DBA维护mysql的一个重要工作 1)RESET MASTER在上面查看日志存放的文件夹中 ...
- Mysql基于GTID主从复制
Mysql5.6基于GTID全局事务的复制 什么是GTID? GTID(Global Transaction Identifiers)是全局事务标识 当使用GTIDS时,在主上提交的每一个事务都会 ...
- 基于GTID的Mysql-Mha高可用方案探索
声明: 本篇文章内容整理来源于互联网以及本人自己的梳理总结,目的是从零到一的搭建起来mysql mha高可用架构. 一.软件概述 MHA(Master High Availability)目前在MyS ...
- 深入MySQL复制(二):基于GTID复制
相比传统的MySQL复制,gtid复制无论是配置还是维护都要轻松的多.本文对gtid复制稍作介绍. MySQL基于GTID复制官方手册:https://dev.mysql.com/doc/refman ...
- Mysql5.7实现主从复制、基于GTID的主从复制、并行复制
(一.主从复制) 一.mysql主从复制原理 mysql的默认复制方式是主从复制.Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制, ...
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- MySQL 5.7基于GTID复制的常见问题和修复步骤(二)
[问题二] 有一个集群(MySQL5.7.23)切换后复制slave报1236,其实是不小心在slave上执行了事务导致 Got fatal error 1236 from master when r ...
- MySQL5.7配置基于GTID的复制
MySQL5.7下配置GTID复制的方法: 修改主库和从库的配置文件,加入下列部分的配置项:主库:[mysqld]log-bin=mysql-binbinlog_format= ROWgtid-mod ...
随机推荐
- Java学习日报8.6
<构建之法:现代软件工程>读后感 比起一般的教学类书籍,这本书更像是一本传记小说,作者邹欣以自己或者说一些典型的软件工程师为例子,详细介绍了一个软件工程师的工作内容,全书给我的感觉就是以一 ...
- Servlet3.0提供的@WebServlet注解引用参数详情介绍
Servlet3.0提供的@WebServlet注解: servlet3.0所提供的@webservlet注解,用来将某个类注解为一个servlet类,简化了web.xml上的servlet配置, @ ...
- Linux操作系统的文件目录结构
一 --- 导读 首先记住一句经典的话:"linux世界中,万事万物皆为文件" 二---linux的目录结构示意图和windows下的目录结构示意图(本图需要背诵) 三---各目录 ...
- Java图片的灰度处理方法
通过看网上各种大牛的总结,和自己亲身测试总结一下Java图片的灰度处理方法 (1)我们熟知的图片中的像素点有RGB值. (2)图片灰度化的方式大概分为四种,第一种是最大值法(取颜色RGB中的最大值作为 ...
- Oracle RedoLog-二进制格式分析,文件头,DML,DDL
上篇文章,简单介绍了 RedoLog 是什么,以及怎么从 Oracle Dump 二进制日志.接下来,分析下 Redo Log 二进制文件的格式,主要包括:文件头,重做日志头,DML-INSERT 操 ...
- 在.NET Core中使用Channel(一)
我最近一直在熟悉.net Core中引入的新Channel<T>类型.我想在它第一次发布的时候我了解过它,但是有关文章非常非常少,我不能理解它们与其他队列有什么不同. 在使用了一段时间后, ...
- Win Task 任务管理器 批量杀进程方法
Example Kill All Chrome & Chrome Driver taskkill /IM chromedriver.exe /F taskkill /IM chrome.exe ...
- PHP 获取重复数组中 第二多的元素
$target = ["重复项目", "repeat", "repeat", "重复", "重复项目" ...
- springboot异常处理之404
ps: 推荐一下本人的通用后台管理项目crowd-admin 以及newbee-mall增强版,喜欢的话给个star就好 源码分析 在springboot中默认有一个异常处理器接口ErrorConto ...
- Burp suite的系列介绍 (1)
前言 为了进行Web安全方面的学习,Burp suite是必备的工具之一,我们将会从多个模块进行逐步的学习. Burp suite的应用场景 1.HTTP服务端接口测试. 2.HTTP客户端和HTTP ...