当前位置:   article > 正文

一文彻底搞懂MySQL主从同步

mysql主从同步

1. 简介

MySQL主从同步是一种数据库复制技术,它可以将一台MySQL数据库(称为主服务器)的数据复制到另一台或多台MySQL数据库(称为从服务器)。主从同步可以用于以下目的:

  • 数据备份: 主从同步可以将主服务器的数据复制到从服务器,从而实现数据的备份。
  • 读写分离: 可以将主服务器配置为只读,并将读操作分流到从服务器,从而减轻主服务器的负载。
  • 高可用性: 如果主服务器发生故障,可以将从服务器提升为主服务器,从而保证数据库的高可用性。

2. 基本原理

  1. 主服务器将所有数据变更记录到二进制日志(binlog)中。
  2. 从服务器连接到主服务器,并从主服务器的二进制日志中获取数据变更信息。
  3. 从服务器将获取到的数据变更信息应用到自己的数据库中,从而使主服务器和从服务器的数据保持一致。

3. 实现方式

1. 基于语句的复制(STATEMENT)

主服务器将所有数据变更语句(例如INSERT、UPDATE、DELETE等)复制到从服务器,从服务器再执行这些语句来实现数据同步。
在 MySQL5.0 以前只支持基于语句的复制。基于语句的复制模式下,主库会记录那些造成数据更改的操作,当备库读取并重放这些操作时,实际上只是把主库上的SQL执行一遍。好处是实现简单,简单的记录并执行这些语句,能让主备保持同步。
但实际上基于语句的复制方式有时会出问题。因为主库上的数据更新除了执行的语句外,可能还依赖于其他因素,例如,同一条 SQL 在主库和备库上的执行时间可能稍有不同,因此在传输带 binlog 中,还包括一些元数据信息,如当前的时间戳,还存在着一些无法被正确复制的 SQL,例如,CURRENT_USER() 函数的语句。存储过程和触发器在使用基于语句的复制模式时也可能存在问题。

2. 基于行的复制(ROW)

主服务器将数据变更记录的二进制日志以行的形式复制到从服务器,从服务器再应用这些变更来实现数据同步。
MySQL5.1开始支持基于行复制,这种方式会将实际的数据记录在 binlog 中,跟其他数据库的实现很像。基于行复制的模式有优点,也有缺陷。好处是可以正确的复制每一行,一些语句可以被更加有效的复制。也有一些情况,基于行复制的代价会比较大,例如:

update tb_user set age=10;
  • 1

由于这条 SQL 会更新全表,使用基于行的开销会很大,因为每一行的数据都会记录到 binlog 中,这使得 binlog 文件庞大,并且会给主库增加额外的负载。

3. 混合模式(MIXED)

以上两种模式的混合使用,一般的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。
因为两种模式各有优缺点以及使用的场合,所以 MySQL 支持在这两种复制模式中动态切换(MIXED模式),MySQL8.0 默认使用基于行复制的方式,理论上基于行的复制模式在整体上更优,且在实际应用中适用于大多数场景,当然也可以使用参数 binlog_format 手动指定复制的模式。

4. 常见的主从架构模式

4.1 一主一从

一主一从模式是最简单的主从架构模式,它由一个主节点和一个从节点组成。主节点负责处理所有写操作,并将其变更同步到从节点。从节点负责处理所有读操作,并从主节点获取最新数据。

优点:

  • 结构简单,易于理解和实现。
  • 成本低,只需两台服务器即可。
  • 性能提升,读操作可以分流到从节点。

缺点:

  • 可用性较低,如果主节点故障,则整个系统不可用。
    -扩展性较差,只能通过增加主节点的性能来提升读写能力。

适用场景:
对读写性能要求不高,对可用性要求较高的场景,例如小型网站、数据库等。

4.2 一主多从

一主多从模式由一个主节点和多个从节点组成。主节点负责处理所有写操作,并将其变更同步到所有从节点。从节点负责处理所有读操作,并从主节点获取最新数据。

优点:

  • 性能提升,读操作可以分流到多个从节点。
  • 可用性提升,如果主节点故障,可以将其中一个从节点提升为主节点。
  • 扩展性较好,可以通过添加从节点来提升读能力。

缺点:

  • 成本较高,需要多台服务器来部署从节点。
  • 数据一致性问题,当主节点发生故障时,从节点的数据可能不一致。

适用场景:
对读写性能要求较高,对可用性要求较高的场景,例如大型网站、数据库等。

4.3 双M

双M模式由两个主节点和多个从节点组成。两个主节点之间相互同步数据,并各自负责一部分写操作。从节点从两个主节点获取最新数据,并负责处理所有读操作。

优点:

  • 可用性更高,即使一个主节点故障,另一个主节点也可以继续提供服务。
  • 数据一致性更好,两个主节点之间相互同步数据,可以保证数据一致性。

缺点:

  • 成本较高,需要多台服务器来部署主节点和从节点。
  • 复杂度较高,需要维护两个主节点之间的同步。

适用场景:
对读写性能要求较高,对可用性和数据一致性要求较高的场景,例如金融系统、电商系统等。

4.4 联级复制

联级复制模式是一种特殊的一主多从模式,它将从节点组织成一个链条,每个从节点只与相邻的两个节点同步数据。

优点:

  • 节省带宽,每个从节点只需要与相邻的两个节点同步数据。
  • 提高扩展性,可以很容易地添加新的从节点。

缺点:

  • 数据一致性问题,如果某个从节点故障,可能会导致数据不一致。
  • 复杂度较高,需要维护从节点之间的同步链条。

适用场景:
对读写性能要求不高,对扩展性要求较高的场景,例如大型分布式系统等。

4.5 多主一从

多主一从模式由多个主节点和一个从节点组成。每个主节点都负责处理一部分写操作,并将其变更同步到从节点。从节点负责处理所有读操作,并从所有主节点获取最新数据。

优点:

  • 读性能高,可以并行从多个主节点读取数据。
  • 扩展性好,可以很容易地添加新的主节点。

缺点:

  • 数据一致性问题,当主节点之间存在冲突时,从节点的数据可能不一致。
  • 复杂度较高,需要维护主节点之间的数据一致性。

适用场景:
对读性能要求较高,对数据一致性要求不严格的场景,例如数据分析系统、报表系统等。

5. 常见问题

  • 主从服务器的版本是否一致: 主从服务器的版本必须一致,否则无法进行同步。
  • 主从服务器的配置是否正确: 主从服务器的配置必须正确,否则无法进行同步。
  • 主从服务器的网络连接是否正常: 主从服务器之间必须能够正常通信,否则无法进行同步。
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/1005909
推荐阅读
相关标签
  

闽ICP备14008679号