MySQL中延迟复制的实现

 更新时间:2025年02月24日 09:43:44   作者:妍妍的宝贝  
MySQL延迟复制允许副本服务器滞后源服务器指定时间,用于数据保护、历史检查等,延迟复制通过设置MASTER_DELAY选项实现,下面就来介绍 一下,感兴趣的可以了解一下

1 MySQL 延迟复制介绍

MySQL 5.7 支持延迟复制,使得 副本服务器故意滞后于源服务器至少一个 指定的时间量。默认延迟为 0 秒。使用 CHANGE MASTER TO 选项设置延迟 到 N 秒:MASTER_DELAY

1.1 延迟复制语法:

CHANGE MASTER TO MASTER_DELAY = N;

1.2 延迟复制可用于多种用途:

  • 为了防止用户在MASTER头上出现错误。DBA 可以滚动 将延迟的SLAVE返回到灾难发生前的时间。

  • 检查数据库很久以前的样子,没有必须重新加载备份。例如,如果延迟为 1 周,DBA 需要查看数据库的外观 在最近几天的发展之前,耽误了可以检查SLAVE。

1.3 延迟复制的有关的参数

SHOW SLAVE STATUS 有三个字段 提供有关延迟的信息:

  • SQL_Delay:一个非负整数,表示 副本必须滞后于源的秒数。

  • SQL_Remaining_Delay:此字段包含一个整数,表示 延迟的剩余秒数。

  • Slave_SQL_Running_State:一个字符串 指示 SQL 线程的状态(类似于 )。该值等于 将 SQL 线程的值为 由 SHOW PROCESSLIST显示。Slave_IO_StateState

1.4 延迟复制的操作

延迟复制在哪台机子上做呢?是由哪个线程来完成

  • 延迟复制时用来控制sql线程的,和i/o线程无关
  • 这个延迟复制不是i/o线程过段时间来复制,i/o是正常工作的
  • 是日志已经保存在slave端了,那个sql要等多久进行回放

2 MySQL 延迟复制 实操

2.1 实验环境

MASTER/SLAVE服务器名称          IP地址server-id
MASTERMySQL-01192.168.239.210 10        
SLAVE-1MySQL-02192.168.239.22020
SLAVE-2MySQL-03192.168.239.23030

2.2 对 SLAVE --MySQL-3 进行延迟复制操作

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.239.210
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 194
               Relay_Log_File: mysql-3-relay-bin.000007
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 194
              Relay_Log_Space: 742

             Master_Server_Id: 10
                  Master_UUID: cd27e5ae-5fe3-11ef-a5d8-000c29a51779
             Master_Info_File: /data/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL

# 停止 SQL_thread 进程,停止本地回放
mysql> stop slave sql_thread;
Query OK, 0 rows affected (0.00 sec)

# 改变 本地回放的延迟时间
mysql> change master to master_delay=60;
Query OK, 0 rows affected (0.00 sec)

# 打开本地回放 sql_thread 进程
mysql> start slave sql_thread;
Query OK, 0 rows affected (0.00 sec)

2.3 停止相关进程的原因

为什么要停止本地 sql_thread 进程而不是停止IO_thread呢?

这是由于停止sql_thread 只是 停止的是本地的回放,而不是停止IO_thread的复制。即使停掉本地的回放,IO_thread 进程仍然会对MASTER 的bin-log 进行接收并写入本地的 Relay log,而不是停止写入本地 Relay log 。等待sql_thread进程再次启动进程就会去读取本地Realy log 并 将本地的 Relay log 回放到数据库中。这样子做 能在保证成功修改SLAVE参数的同时也能保持MASTER与SLAVE的数据一致性。

2.4 实验测试

MASTER 上操作

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ZUCONG             |
| mysql              |
| performance_schema |
| shuyan             |
| sys                |
+--------------------+
6 rows in set (0.03 sec)

mysql> use shuyan;
mysql> show tables;
+------------------+
| Tables_in_shuyan |
+------------------+
| wawa             |
+------------------+
mysql> select * from wawa;
+----+------+
| id | name |
+----+------+
|  1 | wawa |
+----+------+
mysql> insert into wawa(id,name) values(2,'shuyan');

SLAVE 上 查看  

MySQL-02 并没有做延迟复制

mysql> select * from shuyan.wawa;
+----+--------+
| id | name   |
+----+--------+
|  1 | wawa   |
|  2 | shuyan |
+----+--------+

MySQL-03 做了60秒的延迟复制

mysql> select * from shuyan.wawa;
+----+------+
| id | name |
+----+------+
|  1 | wawa |
+----+------+

2.5 动图演示全过程

接下来是一个动图的演示 修改 master_delay 参数并增加master 数据 观察slave延迟复制的过程

到此这篇关于MySQL中延迟复制的实现的文章就介绍到这了,更多相关MySQL 延迟复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Centos 6.5 下安装mysql 5.6.21的方法

    Centos 6.5 下安装mysql 5.6.21的方法

    本文给大家带来Centos 6.5 下安装mysql 5.6.21的方法,操作方法比较简单,介绍的非常详细,感兴趣的朋友可以参考下操作步骤
    2016-09-09
  • MySQL中数据查询语句整理大全

    MySQL中数据查询语句整理大全

    查询语句是以后在工作中使用最多也是最复杂的用法,如何精准的查询出想要的结果以及用最合理的逻辑去查询尤为重要,下面这篇文章主要给大家介绍了关于MySQL中数据查询语句的相关资料,需要的朋友可以参考下
    2023-04-04
  • 如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)

    如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)

    本篇文章是对如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • mysql数据插入效率比较

    mysql数据插入效率比较

    今天小编就为大家分享一篇关于mysql数据插入效率比较,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • MySQL海量数据(2亿级表字段)无损更新方案

    MySQL海量数据(2亿级表字段)无损更新方案

    在大型互联网应用中,数据表动辄达到亿级规模,当需要对生产环境中的海量表进行字段更新时,如何在不影响业务正常读写的情况下完成任务,是每个DBA和开发者都会面临的挑战,本文将以一个真实案例详细讲解四种渐进式更新方案及其实现原理,需要的朋友可以参考下
    2025-04-04
  • 软件测试-MySQL(六:数据库函数)

    软件测试-MySQL(六:数据库函数)

    这篇文章主要介绍了MySQL数据库函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • mysql导入sql文件失败的解决方案

    mysql导入sql文件失败的解决方案

    这篇文章主要介绍了mysql导入sql文件失败的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • 浅谈mysql数据库中的换行符与textarea中的换行符

    浅谈mysql数据库中的换行符与textarea中的换行符

    下面小编就为大家带来一篇浅谈mysql数据库中的换行符与textarea中的换行符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 一文带你了解MySQL四大类日志

    一文带你了解MySQL四大类日志

    在MySQL中日志文件可以分为4种:二进制日志文件、错误日志文件、通用查询日志文件和慢查询日志文件,下面这篇文章主要给大家介绍了关于MySQL四大类日志的相关资料,需要的朋友可以参考下
    2023-04-04
  • Linux系统中安装MySQL的详细图文步骤

    Linux系统中安装MySQL的详细图文步骤

    本文的主要内容是在 Linux 上安装 MySQL,以下内容是源于 B站 - MySQL数据库入门到精通 整理而来,需要的朋友可以参考下
    2023-06-06

最新评论