赞
踩
MySQL主从同步是一种数据库复制技术,它可以将一台MySQL数据库(称为主服务器)的数据复制到另一台或多台MySQL数据库(称为从服务器)。主从同步可以用于以下目的:
1. 基于语句的复制(STATEMENT)
主服务器将所有数据变更语句(例如INSERT、UPDATE、DELETE等)复制到从服务器,从服务器再执行这些语句来实现数据同步。
在 MySQL5.0 以前只支持基于语句的复制。基于语句的复制模式下,主库会记录那些造成数据更改的操作,当备库读取并重放这些操作时,实际上只是把主库上的SQL执行一遍。好处是实现简单,简单的记录并执行这些语句,能让主备保持同步。
但实际上基于语句的复制方式有时会出问题。因为主库上的数据更新除了执行的语句外,可能还依赖于其他因素,例如,同一条 SQL 在主库和备库上的执行时间可能稍有不同,因此在传输带 binlog 中,还包括一些元数据信息,如当前的时间戳,还存在着一些无法被正确复制的 SQL,例如,CURRENT_USER() 函数的语句。存储过程和触发器在使用基于语句的复制模式时也可能存在问题。
2. 基于行的复制(ROW)
主服务器将数据变更记录的二进制日志以行的形式复制到从服务器,从服务器再应用这些变更来实现数据同步。
MySQL5.1开始支持基于行复制,这种方式会将实际的数据记录在 binlog 中,跟其他数据库的实现很像。基于行复制的模式有优点,也有缺陷。好处是可以正确的复制每一行,一些语句可以被更加有效的复制。也有一些情况,基于行复制的代价会比较大,例如:
update tb_user set age=10;
由于这条 SQL 会更新全表,使用基于行的开销会很大,因为每一行的数据都会记录到 binlog 中,这使得 binlog 文件庞大,并且会给主库增加额外的负载。
3. 混合模式(MIXED)
以上两种模式的混合使用,一般的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。
因为两种模式各有优缺点以及使用的场合,所以 MySQL 支持在这两种复制模式中动态切换(MIXED模式),MySQL8.0 默认使用基于行复制的方式,理论上基于行的复制模式在整体上更优,且在实际应用中适用于大多数场景,当然也可以使用参数 binlog_format 手动指定复制的模式。
一主一从模式是最简单的主从架构模式,它由一个主节点和一个从节点组成。主节点负责处理所有写操作,并将其变更同步到从节点。从节点负责处理所有读操作,并从主节点获取最新数据。
优点:
缺点:
适用场景:
对读写性能要求不高,对可用性要求较高的场景,例如小型网站、数据库等。
一主多从模式由一个主节点和多个从节点组成。主节点负责处理所有写操作,并将其变更同步到所有从节点。从节点负责处理所有读操作,并从主节点获取最新数据。
优点:
缺点:
适用场景:
对读写性能要求较高,对可用性要求较高的场景,例如大型网站、数据库等。
双M模式由两个主节点和多个从节点组成。两个主节点之间相互同步数据,并各自负责一部分写操作。从节点从两个主节点获取最新数据,并负责处理所有读操作。
优点:
缺点:
适用场景:
对读写性能要求较高,对可用性和数据一致性要求较高的场景,例如金融系统、电商系统等。
联级复制模式是一种特殊的一主多从模式,它将从节点组织成一个链条,每个从节点只与相邻的两个节点同步数据。
优点:
缺点:
适用场景:
对读写性能要求不高,对扩展性要求较高的场景,例如大型分布式系统等。
多主一从模式由多个主节点和一个从节点组成。每个主节点都负责处理一部分写操作,并将其变更同步到从节点。从节点负责处理所有读操作,并从所有主节点获取最新数据。
优点:
缺点:
适用场景:
对读性能要求较高,对数据一致性要求不严格的场景,例如数据分析系统、报表系统等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。