服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - MySQL系列连载之主从复制原理

MySQL系列连载之主从复制原理

2023-08-24 18:10未知服务器之家 Linux

导读 MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送

导读 MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

Mysql 复制(Replication)

1、Mysql 复制作用
  • 负载平衡(load balancing)
  • 备份
  • 高可用性(high availability)和容错
2、Mysql 复制原理

主要有三步(如下图):

master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

slave将master的binary log events拷贝到它的中继日志(relay log);

slave重做中继日志中的事件,将改变它自己的数据。

MySQL系列连载之主从复制原理

具体说明:

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary log拷贝到它自己的中继日志。 首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。 Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会休眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

SQL slave thread处理该过程的最后一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。所以slave上数据一般要慢于master上数据。即master与slave之间的数据在一定时间内会不同步。

Mysql 复制(Replication)类型

1、一主多从模式

注,由一个master和一个slave组成复制系统是最简单的情况。Slave之间并不相互通信,只能与master进行通信。

MySQL系列连载之主从复制原理

具体说明:

如果写操作较少,而读操作很多时,可以采取这种架构。你可以将读操作分布到其它的slave,从而减小master的压力。

但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。

这种架构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。

一些建议:

不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎)

用一个slave作为备用master,只进行复制

用一个远程的slave,用于灾难恢复

发送复制事件到其它slave,当设置log_slave_updates时,你可以让slave扮演其它slave的master。

此时,slave把SQL线程执行的事件写进自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它
MySQL级联复制(A->B->C)log_slave_updates

MySQL主从结构实际中是用到最多的一种架构。

新上的两台服务器B和C,要替换掉之前旧的服务器A,同时,B和C是新的主从关系。因此,配置成级联复制,来迁移数据,也方便切换。

架构图如下:

master A ——> slave B ——> slave C

有这么情况发生了,服务器B可以正常复制服务器A的数据,服务器B和C主从状态Slave_IO_Running和Slave_SQL_Running都是yes的,但是服务器C却无法复制新的数据。

原因分析:

1. 检查服务器B有没有开启二进制日志log_bin

2. log_slave_updates是否启用

log_slave_updates是将从服务器从主服务器收到的更新记入到从服务器自己的二进制日志文件中。

上面的问题是由于没有启用log_slave_updates = 1导致的。

总结:

因此,对于mysql级联复制,上游的从服务器不仅仅要开启log_bin还要开启log_slave_updates,否则将导致下游的从服务器无法更新复制。

2、双主模式

注,Master-Master复制的两台服务器,既是master,又是另一台服务器的slave。
MySQL系列连载之主从复制原理

具体说明:

主的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。

这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:

在第一个服务器上执行:

mysql>UPDATEtblSETcol=col+1;

在第二个服务器上执行:

mysql>UPDATEtblSETcol=col*2;

那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。

实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),

这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,

你可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。

但是,可以通过其它一些方式来模拟这种多主服务器的复制。

3、主从模式

注,这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。

MySQL系列连载之主从复制原理

4、带从服务器的Master-Master结构(Master-Master with Slaves)

注,这种结构的优点就是提供了冗余。在地理上分布的复制结构,它不存在单一节点故障问题,而且还可以将读密集型的请求放到slave上。

MySQL系列连载之主从复制原理

总结:一般常用的两种复制类型一种是主从模式,另一种是一主多从模式。在这我们主要讲解主从模式复制。

原文来自:


延伸 · 阅读

精彩推荐
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10