当前位置: 代码网 > it编程>数据库>Mysql > MySQL中延迟复制的实现

MySQL中延迟复制的实现

2025年02月24日 Mysql 我要评论
1 mysql 延迟复制介绍mysql 5.7 支持延迟复制,使得 副本服务器故意滞后于源服务器至少一个 指定的时间量。默认延迟为 0 秒。使用change master to选项设置延迟 到n秒:m

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 延迟复制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com