MySQL完全同步复制的几种实现方法

 更新时间:2025年08月13日 09:41:25   作者:学亮编程手记  
完全同步复制(Fully Synchronous Replication)确保主库上的事务只有在所有从库都确认接收并应用后才会向客户端返回成功响应,本文给大家介绍了MySQL实现完全同步复制的几种方法,需要的朋友可以参考下

引言

完全同步复制(Fully Synchronous Replication)确保主库上的事务只有在所有从库都确认接收并应用后才会向客户端返回成功响应。以下是几种实现完全同步复制的方法:

1. 使用MySQL Group Replication (推荐)

MySQL Group Replication提供了真正的同步复制能力,是官方推荐的完全同步解决方案。

配置步骤

所有节点配置 (my.cnf):

[mysqld]
# 通用配置
server_id = [唯一ID]
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW

# Group Replication配置
plugin_load_add = 'group_replication.so'
transaction_write_set_extraction = XXHASH64
group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 唯一UUID
group_replication_start_on_boot = OFF
group_replication_local_address = "节点IP:33061"
group_replication_group_seeds = "节点1IP:33061,节点2IP:33061,节点3IP:33061"
group_replication_bootstrap_group = OFF
group_replication_consistency = BEFORE_AND_AFTER  # 完全同步关键参数

初始化集群:

-- 在第一个节点执行
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

-- 在其他节点执行
START GROUP_REPLICATION;

2. 使用Galera Cluster (适用于MariaDB/Percona XtraDB Cluster)

Galera提供同步多主复制方案。

配置步骤

所有节点配置:

[mysqld]
wsrep_on = ON
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_name = "my_cluster"
wsrep_cluster_address = "gcomm://node1_ip,node2_ip,node3_ip"
wsrep_node_name = "node1"
wsrep_node_address = "当前节点IP"
wsrep_sst_method = rsync
binlog_format = ROW
default_storage_engine = InnoDB

启动集群:

# 第一个节点
systemctl start mysql --wsrep-new-cluster

# 其他节点
systemctl start mysql

3. 使用半同步复制的严格模式

虽然不是真正的完全同步,但可以配置为接近完全同步的行为。

强化配置

[mysqld]
# 主库配置
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_wait_for_slave_count = [从库数量]
rpl_semi_sync_master_wait_point = AFTER_SYNC
rpl_semi_sync_master_timeout = 18446744073709551615  # 最大可能值,几乎不超时

# 从库配置
rpl_semi_sync_slave_enabled = 1

4. 使用MySQL NDB Cluster (适用于特定场景)

NDB Cluster提供同步复制但使用不同的存储引擎。

完全同步复制的关键考量

  1. 性能影响:完全同步会显著增加事务延迟
  2. 可用性:任何从库故障都会导致整个系统不可用
  3. 网络要求:需要低延迟、高可靠的网络环境
  4. 最少节点数:推荐至少3个节点以避免脑裂问题

生产环境建议

Group Replication是最佳选择,提供:

  • 自动故障检测和恢复
  • 真正的同步复制
  • 官方支持

对于金融级应用,考虑:

SET GLOBAL group_replication_consistency = BEFORE;

这确保读取操作也能获得最新的集群一致状态

监控关键指标:

SELECT * FROM performance_schema.replication_group_members;
SELECT * FROM performance_schema.replication_group_member_stats;

完全同步复制会显著影响性能,只应在确实需要最高级别数据一致性的场景中使用。

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

相关文章

  • SQL HAVING子句在GROUP BY中的条件筛选灵活运用

    SQL HAVING子句在GROUP BY中的条件筛选灵活运用

    这篇文章主要为大家介绍了SQL HAVING子句在GROUP BY中的条件筛选灵活运用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • redhat 5.4下安装MYSQL全过程

    redhat 5.4下安装MYSQL全过程

    自己需要的是用JAVA环境而不是用php+apache这种一键安装的东西,所以果断自己来安装自己想要的东西了,下面与大家分享下redhat 5.4下安装MYSQL全过程,感兴趣的朋友可以参考下哈
    2013-06-06
  • 浅谈MySQL数据同步到 Redis 缓存的几种方法

    浅谈MySQL数据同步到 Redis 缓存的几种方法

    本文主要介绍了浅谈MySQL数据同步到 Redis 缓存的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • mysql生成指定位数的随机数及批量生成随机数的方法

    mysql生成指定位数的随机数及批量生成随机数的方法

    这篇文章主要介绍了mysql生成指定位数的随机数及批量生成随机数的方法,文中给大家介绍了常用mysql函数,需要的朋友可以参考下
    2018-09-09
  • 几个缩减MySQL以节省磁盘空间的建议

    几个缩减MySQL以节省磁盘空间的建议

    这篇文章主要介绍了几个缩减MySQL以节省磁盘空间的建议,主要从表结构和存储内容两个方面来谈减容,需要的朋友可以参考下
    2015-05-05
  • MySQL中substr函数使用方法实例详解

    MySQL中substr函数使用方法实例详解

    MySQL的SUBSTR()函数可以用于从指定字符串的指定位置开始提取指定长度的字符,下面这篇文章主要给大家介绍了关于MySQL中substr函数使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • 读取mysql一个库下面的所有的表table

    读取mysql一个库下面的所有的表table

    本文给大家分享的是如何使用php实现读取mysql一个库下面的所有的表table的代码,有需要的小伙伴可以参考下
    2016-12-12
  • 分析Mysql大量数据导入遇到的问题以及解决方案

    分析Mysql大量数据导入遇到的问题以及解决方案

    这篇文章主要介绍了Mysql大量数据导入遇到的问题以及解决方案,希望我们整理的内容能够帮助到大家。
    2018-02-02
  • 使用squirrel进行sql拼接不生效问题及解决

    使用squirrel进行sql拼接不生效问题及解决

    这篇文章主要介绍了使用squirrel进行sql拼接不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 有关SQL模糊查询

    有关SQL模糊查询

    在进行数据库查询时,有完整查询和模糊查询之分,这里简单介绍下,方便需要的朋友
    2006-12-12

最新评论