MySQL主从:延时从库恢复全解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL主从:延时从库恢复全解

延时从库

介绍

是我们认为配置的一种特殊从库.人为配置从库和主库延时N小时,以秒为单位。
SQL线程延时:数据已经写入relaylog中了,SQL线程延迟写入N小时。

延时从库的使用场景

误删除库
误操作表
误删除表

配置多久合适

一般企业建议3-6小时,具体看公司相应人员对于故障的反应时间。

1、配置延迟从库

先搭建一个主从

# 停止sql线程  // 不让他继续写库
stop slave sql_thread;
# 配置延迟 10800秒(三个小时) 生产环境建议3-6个小时
change master to master_delay=10800;
# 开启sql线程
start slave sql_thread;
# 查看主从状态
show slave status\G
mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                    SQL_Delay: 10800
          SQL_Remaining_Delay: 8101

2、延迟从库恢复数据

2-1、故障恢复思路

1主1从,从库延时3小时,主库误删除1个表
1. 三小时内之内 相应人员反馈误删除
2. 停从库SQL线程
3. 获取主库binlog postion 位置点
  * 删除前一个事物 commit 后 postion
  * 删除后一个事物 begin  前 postion
4. 设置延迟为0
5. 将binlog恢复到删除前一个事物
6. 关闭主从
7. 指定删除后的 postion
8. 开启主从
9. 将备份恢复到主库

2-2、误删除库恢复

也可以像2-3 误删除表去操作

# 误删除库  // 主库操作
drop database  test;
# 延时从库停止sql线程  // 延时从库操作
stop slave sql_thread;
# 查看当前正在使用的 Relay_Log_File & Relay_Log_Pos 的位置点  // 延时从库操作
show slave status\G
# mysqlbinlog工具获取删除前一个位置点  // 延时从库操作
mysqlbinlog --base64-output=decode-rows -vvv db83-relay-bin.000007 |grep -A 50 -B 50 'drop database'
# 截取从库relay log中未写入部分到删除前一个位置点的relay log  // 延时从库操作 
mysqlbinlog --start-position=***  --stop-position=***   db83-relay-bin.000007  >/tmp/test.sql
# 恢复到延时从库中  // 延时从库操作
source /tmp/test.sql
# 解除主从关系 // 延时从库操作
stop salve;
reset slave all;
# 后面可以延时从库切换为主库,或者将延时从库中被删的库进行备份,恢复到主库。具体如下:
# 1、切换为主库
直接将业务的IP地址指定为延时从库,或者将读写分离中的主库改为延时从库即可
# 2、将延时从库进行备份(单库备份)  // 延时从库操作
mysqldump -udba  -p  -h127.0.0.1 -P3306  -R -E --triggers --master-data=2  --single-transaction \
 --set-gtid-purged=OFF  -B  database_name   >/tmp/database_name.sql

2-3、误删除表恢复

截取单表relay log 从延时从库的当前同步位置,到删除前一个事务,恢复到延时从库中即可。还可以再复制时跳过删除表的事物继续进行复制。

常用参数

change master to
master_host=
master_user=
master_port=
master_password=
master_delay=
master_log_file=
master_log_pos=

误删除表 // 主库操作

drop table t1;

停止sql线程 // 延时从库操作

stop slave sql_thread;

获取当前binlog日志 // 主库操作

show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000002
         Position: 2897

获取删除前的位置点 // 延时从库操作

mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000002|grep -A 50  -B 50  'DROP TABLE'
COMMIT/*!*/;
# at 2430
# at 2495
DROP TABLE `t1` /* generated by server */
# at 2610
# at 2675
BEGIN

将延时设置为0 // 延时从库操作

change master to master_delay=0;

恢复到删除前一个事物的位置点 // 延时从库操作

start slave sql_thread until master_log_file='mysql-bin.000002',master_log_pos=2430;

查看同步的位置 // 同步完了在进行下面的操作 // 延时从库操作

show slave status\G
          Exec_Master_Log_Pos: 2430

查看数据 // 延时从库操作

select * from t1;

关闭GTID 不关闭报错 1782 报错后在执行也没问题 // 延时从库操作

stop slave;
SET GLOBAL GTID_MODE = 'ON_PERMISSIVE';
SET GLOBAL GTID_MODE = 'OFF_PERMISSIVE';

跳过删除的那条sql的位置点 // 延时从库操作

change master to
master_log_file='mysql-bin.000002',
master_log_pos=2675;

开启主从 // 延时从库操作

start slave;

开启DTID // 延时从库操作

SET GLOBAL GTID_MODE = 'OFF_PERMISSIVE';
SET GLOBAL GTID_MODE = 'ON_PERMISSIVE';
SET GLOBAL GTID_MODE = 'ON';

这里会有两种情况,一种是直接把延时从库提升为主库,直接修改代码里的IP即可。一种为将单表备份恢复到主库,详解如下:

备份延时从库 // 延时从库操作

mysqldump   -R -E --triggers --master-data=2  --single-transaction \
 --set-gtid-purged=OFF   test t1    >/tmp/test_t1.sql

发送到主库 // 延时从库操作

scp /tmp/test_t1.sql  root@10.10.8.183:/tmp

恢复数据 // 后台运行恢复 // 主库操作

nohup mysql -e "use test;set sql_log_bin=0;source /tmp/test_t1.sql" &>/tmp/test_t1.log &

查看进度 // 主库操作

tail -f /tmp/test_t1.log  
watch -n 5 'ps -ef|grep [s]ource'

2-4、主库宕机起不来或者数据库起不来恢复

stop slave;
change master to master_delay=0;
start slave;

2-5、误操作sql恢复

binlog2sql 或者 MyFlsh 回滚 或者 见2-3、误删除表恢复

分享是一种精神

好用点个赞 谢谢


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 监控 关系型数据库
MySQL 延迟从库介绍
本文介绍了MySQL中的延迟从库功能,详细解释了其工作原理及配置方法。延迟从库允许从库在主库执行完数据变更后延迟一段时间再同步,主要用于快速恢复误操作的数据。此外,它还可用于备份、离线查询及数据合规性需求。通过合理配置,可显著提升数据库系统的稳定性和可靠性。
130 4
|
2月前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
543 0
|
9天前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
30 5
|
10天前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
14天前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
25 1
|
27天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
22 2
|
1月前
|
Oracle 关系型数据库 MySQL
shell获取多个oracle库mysql库所有的表
请注意,此脚本假设你有足够的权限访问所有提到的数据库。在实际部署前,请确保对脚本中的数据库凭据、主机名和端口进行适当的修改和验证。此外,处理数据库操作时,务必谨慎操作,避免因错误的脚本执行造成数据损坏或服务中断。
38 0
|
3月前
|
监控 关系型数据库 MySQL
mysql误删的performance_schema库
`performance_schema`库是MySQL性能监控的重要工具,误删除后可以通过上述方法尝试恢复。在操作过程中,重启MySQL服务器是最简单的尝试方法。如果这不起作用,可以尝试使用MySQL的初始化选项,但请注意备份数据以防数据丢失。检查MySQL配置也是一个好的步骤,以确保 `performance_schema`没有被禁用。最后,如果有备份,通过恢复备份来恢复 `performance_schema`库是最保险的方法。在操作过程中,确保遵循最佳实践和操作前备份重要数据。
146 5
|
3月前
|
SQL 监控 关系型数据库
MySQL 延迟从库介绍
我们都知道,MySQL 主从延迟是一件很难避免的情况,从库难免会偶尔追不上主库,特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外,还可以设置延迟从库,顾名思义就是故意让从库落后于主库多长时间,本篇文章我们一起来了解下 MySQL 中的延迟从库。
58 0
|
4天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
17 4

推荐镜像

更多