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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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
相关文章
|
10天前
|
SQL 监控 关系型数据库
MySQL 延迟从库介绍
本文介绍了MySQL中的延迟从库功能,详细解释了其工作原理及配置方法。延迟从库允许从库在主库执行完数据变更后延迟一段时间再同步,主要用于快速恢复误操作的数据。此外,它还可用于备份、离线查询及数据合规性需求。通过合理配置,可显著提升数据库系统的稳定性和可靠性。
|
23天前
|
监控 关系型数据库 MySQL
mysql误删的performance_schema库
`performance_schema`库是MySQL性能监控的重要工具,误删除后可以通过上述方法尝试恢复。在操作过程中,重启MySQL服务器是最简单的尝试方法。如果这不起作用,可以尝试使用MySQL的初始化选项,但请注意备份数据以防数据丢失。检查MySQL配置也是一个好的步骤,以确保 `performance_schema`没有被禁用。最后,如果有备份,通过恢复备份来恢复 `performance_schema`库是最保险的方法。在操作过程中,确保遵循最佳实践和操作前备份重要数据。
36 5
|
14天前
|
SQL 监控 关系型数据库
MySQL 延迟从库介绍
我们都知道,MySQL 主从延迟是一件很难避免的情况,从库难免会偶尔追不上主库,特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外,还可以设置延迟从库,顾名思义就是故意让从库落后于主库多长时间,本篇文章我们一起来了解下 MySQL 中的延迟从库。
36 0
|
1月前
|
SQL 监控 关系型数据库
mysql统计数据库大小
通过这些方法,数据库管理员可以有效地监控和规划MySQL数据库的存储需求,确保数据库的稳定运行。
46 3
|
1月前
|
SQL 监控 关系型数据库
mysql统计数据库大小
通过这些方法,数据库管理员可以有效地监控和规划MySQL数据库的存储需求,确保数据库的稳定运行。
37 2
|
2月前
|
存储 SQL 关系型数据库
(三)MySQL之库表设计篇:一、二、三、四、五范式、BC范式与反范式详解!
几种设计范式,大部分小伙伴应该仅了解过三范式,对于其他的应该未曾接触,那在本篇中会重点阐述库表设计时,会用到的这些范式。
|
24天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之连接到MySQL的从库时遇到其他服务也连接到了从库,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
27天前
|
SQL 缓存 关系型数据库
Mysql跨库操作
Mysql跨库操作
58 0
|
1月前
|
SQL 监控 关系型数据库
mysql统计数据库大小
通过这些方法,数据库管理员可以有效地监控和规划MySQL数据库的存储需求,确保数据库的稳定运行。
39 0
|
21天前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
91 2

热门文章

最新文章