首页 > 其他分享 >#yyds干货盘点#一个延迟库恢复的案例

#yyds干货盘点#一个延迟库恢复的案例

时间:2023-03-24 10:02:21浏览次数:39  
标签:70b5e873a570 yyds mysql 11ec 盘点 干货 Master SQL id

在日常工作中可能会存在误删数据的情况,今天就简单介绍下如何利用延迟库进行数据库的快速恢复。

1.环境准备

建立一个测试的主从库,写入一些测试数据,非本文要点,过程略。


2.设置延迟同步

在原有同步信息的基础上进行如下操作,设置延迟同步1小时。

# 设置延迟1小时
mysql> stop slave;
mysql> CHANGE REPLICATION SOURCE TO SOURCE_DELAY=3600; 
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.5.160
                  Master_User: repl
                  Master_Port: 3314
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
        Seconds_Behind_Master: 6536
                    SQL_Delay: 3600  -> 设置后,这里可以看到延迟的信息
          SQL_Remaining_Delay: NULL
           Retrieved_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:2-53662
            Executed_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:1-36546,
d2c64073-2cb5-11ec-b4d1-70b5e873a570:1-2
1 row in set, 1 warning (0.00 sec)

3.假设在主库上进行了一个误删的操作

# 误删一条id=9998的数据
mysql> delete from t1 where id=9998;
Query OK, 1 row affected (0.32 sec)

# 主库已经没有了
mysql> select * from t1 where id=9998;
Empty set (0.00 sec)

# 从库还能查到数据
mysql> select * from t1 where id=9998;
+-----+------+------+------+------+
| id  | c1   | c2   | c3   | c4   |
+-----+------+------+------+------+
| 9998| 983  | xAP9 | mQeN | 8Eu2 |
+-----+------+------+------+------+
1 row in set (0.00 sec)

4.解析主库的binlog文件

这个步骤目的是找到主库执行删除操作时候相应的GTID值的上一个GTID值

# 先解析出binlog
mysqlbinlog -vvv --base64-output=decode-rows mysql-bin.000001 > 01.sql

# 找到被删那条记录的GTID,再往上一条记录

SET @@SESSION.GTID_NEXT= '4b4539dd-2fc1-11ec-949b-70b5e873a570:54230'/*!*/;
# at 15959245
#211103 14:43:25 server id 33145160  end_log_pos 15959316       Query   thread_id=53817 exec_time=0     error_code=0
# at 15959377
#211103 14:43:25 server id 33145160  end_log_pos 15959436       Delete_rows: table id 270 flags: STMT_END_F
### DELETE FROM `test`.`t1`
### WHERE
###   @1=9998 /* INT meta=0 nullable=0 is_null=0 */
###   @2='983' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
###   @3='xAP9' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
###   @4='mQeN' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
###   @5='8Eu2' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
# at 15959436
#211103 14:43:25 server id 33145160  end_log_pos 15959463       Xid = 163705
COMMIT/*!*/;
# at 15959463

5.从库设置同步停止的时间点

通过步骤4找到的删除操作的GTID值,我们修改下从库的同步状态,需要说明的是,当主库出现误删数据的时候,延迟库一定要第一时间停止同步。

# 从库同步到删数据的gtid值,再往上一条gtid,设置同步截止点
mysql> STOP SLAVE;
mysql> START REPLICA UNTIL SQL_AFTER_GTIDS='4b4539dd-2fc1-11ec-949b-70b5e873a570:54229';
mysql> START SLAVE;

6.复制同步停止

# 等待同步到对应截止点后,同步的SQL线程会停止
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.5.160
                  Master_User: repl
                  Master_Port: 3314
                Connect_Retry: 60
             Slave_IO_Running: Yes
            Slave_SQL_Running: No -> 到达设定的GTID值后,SQL线程会中断
              Until_Condition: SQL_AFTER_GTIDS -> 设置后这里会出现同步截止的关键信息
             Master_Server_Id: 33145160
                  Master_UUID: 4b4539dd-2fc1-11ec-949b-70b5e873a570
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 3600
          SQL_Remaining_Delay: NULL
           Master_Retry_Count: 86400
           Retrieved_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:2-54230
            Executed_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:1-54229,
d2c64073-2cb5-11ec-b4d1-70b5e873a570:1-3
                Auto_Position: 1

7.数据恢复

后续我们可以对这个表进行相应操作,例如把这个表导出再导入到主库,然后再恢复中间的logbin数据。


标签:70b5e873a570,yyds,mysql,11ec,盘点,干货,Master,SQL,id
From: https://blog.51cto.com/u_11365839/6146820

相关文章

  • #yyds干货盘点# LeetCode面试题:插入区间
    1.简述:给你一个无重叠的,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1:输入:i......
  • 企业必备的13种ISO体系认证大盘点!
    企业必备的13种ISO体系认证大盘点!今天小编为各位朋友们介绍下13种体系认证(含CMA和CNAS)的咨询业务,小编整理了一些,给大家一个知识和信息储备:一、ISO9001质量管理体系ISO9001......
  • 技术干货 从DBA视角看数据库运维管理平台
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:z文章来源:GreatSQL社区原创DBA岗位......
  • #yyds干货盘点# LeetCode程序员面试金典:最长单词
    题目:给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则......
  • #yyds干货盘点# LeetCode面试题:合并区间
    1.简述:以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入......
  • #yyds干货盘点#vue设置跨域proxy
    创建​​vue.config.js​​文件//方法1module.exports={devServer:{host:'localhost',port:'8083',proxy:{'/api':{//......
  • # yyds干货盘点 # 怎么用Python把左边这种转成右边这种?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【惜君】问了一个​​Pandas​​处理Excel的问题,这里拿出来给大家分享下。下面是粉丝自己写的代码:二、实现过程看上去是......
  • #yyds干货盘点#php curl发送post请求,向接口发送请求并返回数据
    在微信开发中,很多请求都是用curl实现的,并不是跳转的curl或者ajax。index.php<?php//api接口$url="server.php";//发送请求functionhttpGet($url){$curl=curl_init(......
  • Java基础干货分享(一)
    ​Java中数据类型分为基本数据类型和引用数据类型,基本数据类型有8种:1、byte2、char3、short 4、int5、long6、float7、double8、boolean。8种基本类型的包装类对......
  • #yyds干货盘点# LeetCode程序员面试金典:最小K个数
    题目:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入:arr=[1,3,5,7,2,4,6,8],k=4输出:[1,2,3,4]代码实现:classSolution{publicint[]......