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完全同步复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql数据库中子查询的使用

    Mysql数据库中子查询的使用

    本文给大家分享mysql数据库中子查询的使用,非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • MySQL中JOIN连接的基本用法实例

    MySQL中JOIN连接的基本用法实例

    大家对join应该都不会陌生,join可以将两个表连接起来,下面这篇文章主要给大家介绍了关于MySQL中JOIN连接用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 在Centos7中利用Shell脚本实现MySQL数据备份

    在Centos7中利用Shell脚本实现MySQL数据备份

    备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程,本文将给大家介绍了在Centos7中利用Shell脚本实现MySQL数据备份,文中有详细的图文介绍,需要的朋友可以参考下
    2023-12-12
  • 解决mysql报错You must reset your password using ALTER USER statement before executing this statement问题

    解决mysql报错You must reset your password&nb

    文章介绍了在Linux系统中解决MySQL 5.7及以上版本root用户密码过期无法登录的问题方法,以及如何处理系统权限表mysql.user结构错误的问题
    2024-11-11
  • 解析mysql 缓存如何使用内存

    解析mysql 缓存如何使用内存

    本篇文章是对mysql中的缓存如何使用内存进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 在windows环境下配置并随意切换两种mysql版本的方法

    在windows环境下配置并随意切换两种mysql版本的方法

    这篇文章主要介绍了mysql:如何在windows环境下配置并随意切换两种mysql版本,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Navicat for MySQL 11注册码\激活码汇总

    Navicat for MySQL 11注册码\激活码汇总

    Navicat for MySQL注册码用来激活 Navicat for MySQL 软件,只要拥有 Navicat 注册码就能激活相应的 Navicat 产品。这篇文章主要介绍了Navicat for MySQL 11注册码\激活码汇总,需要的朋友可以参考下
    2020-11-11
  • MYSQL初始化数据目录的实现步骤

    MYSQL初始化数据目录的实现步骤

    本文主要介绍了MYSQL初始化数据目录的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • MySQL中datetime和timestamp的区别及使用详解

    MySQL中datetime和timestamp的区别及使用详解

    这篇文章主要介绍了MySQL中datetime和timestamp的区别及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • MySQL数据库备份和还原的常用命令小结

    MySQL数据库备份和还原的常用命令小结

    MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下
    2012-03-03

最新评论