资讯详情

一个延迟库恢复的案例

  • GreatSQL未经授权,社区原创内容不得随意使用。请联系小编,注明来源。
  • 导语

在日常工作中常工作中被误删。今天,我将简要介绍如何使用延迟库快速恢复数据库。

步骤

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数据。

总结

以上只是模拟数据错误删除的恢复过程。通过闪回工具,甚至手动找到相应的错误删除数据,恢复速度会更快,但对于truncatedropdelete忘了带where条件 使用闪回工具可能无法删除,比备份恢复使用延迟库更有效。

另外需要注意的是,如果从图书馆开始MTS,注意打开 slave_preserve_commit_order=1 防止从库误删操作先执行。

Enjoy GreatSQL :)

文章推荐:

金融级应用GreatSQL正式开源 https://mp.weixin.qq.com/s/cI_wPKQJuXItVWpOx_yNTg

Changes in GreatSQL 8.0.25 (2021-8-18 https://mp.weixin.qq.com/s/qcn0lmsMoLtaGO9hbpnhVg

MGR及GreatSQL资源汇总 https://mp.weixin.qq.com/s/qXMct_pOVN5FGoLsXSD0MA

GreatSQL MGR FAQ https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

在Linux下源码编译安装GreatSQL/MySQL https://mp.weixin.qq.com/s/WZZOWKqSaGSy-mpD2GdNcA

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee:

https://gitee.com/GreatSQL/GreatSQL

GitHub:

https://github.com/GreatSQL/GreatSQL

Bilibili:

https://space.bilibili.com/1363850082/video

微信&QQ群:

可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697

微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

标签: an6xap6xrn6x传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台