小试MySQL 组复制,这边建议上云解放双手

MySQL 组复制

MySQL 组复制(Group Replication)是 MySQL 提供的一种高可用性和容错性的复制解决方案,首次作为插件引入是在 MySQL 5.7 版本中。具体支持的版本如下:

  1. MySQL 5.7

    • 组复制在 MySQL 5.7.14 中以 Beta 版形式引入,作为一个可选插件。
    • 需要手动安装和配置插件(group_replication.sogroup_replication.dll)。
    • 支持单主模式(Single-Primary Mode)和多主模式(Multi-Primary Mode),但功能相对基础,稳定性在早期版本中可能不如后续版本。
  2. MySQL 8.0

    • 从 MySQL 8.0 开始,组复制插件默认包含在发行版中,无需单独下载。
    • 改进了性能、稳定性和功能,例如支持 IPv6、通信协议优化(如消息压缩和分片)。
    • MySQL 8.0.17 引入了对补丁版本(Patch Version)的兼容性检查,使得组内成员版本管理更严格。
    • 当前最新版本(截至 2025 年 4 月 2 日)是 MySQL 8.0 的某个子版本,建议使用最新的 GA(生产就绪)版本以获得最佳支持。
  3. MySQL 8.4

    • MySQL 8.4 是最新的长期支持版本(LTS),继续支持组复制,并在此基础上优化了高可用性和管理功能。
    • 建议在生产环境中使用此版本,因为它包含了最新的修复和改进。

版本兼容性注意事项:

  • 组复制推荐所有组成员运行相同的主版本(如全为 8.0 或全为 8.4),以确保最佳兼容性和性能。
  • 在升级过程中,可以临时混合不同版本(如 8.0.16 和 8.0.17),但新版本成员可能以只读模式加入,直到所有成员升级到同一版本。
  • 不支持从较新版本向较旧版本复制(例如,从 8.0 到 5.7)。

如何入门 MySQL 组复制

以下是入门 MySQL 组复制的基本步骤,假设你使用的是 MySQL 8.0 或 8.4,并在一组三台服务器上进行配置(最低推荐数量为 3,以确保多数派仲裁)。

1. 环境准备
  • 硬件要求:至少 3 台服务器,建议网络延迟低、带宽充足。
  • 软件要求:安装 MySQL 8.0 或 8.4(确保组复制插件已包含)。
  • 网络要求:支持 IPv4(8.0.14 起支持 IPv6),确保服务器间双向通信畅通。
2. 检查插件

登录 MySQL,确认组复制插件是否可用:

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS WHERE PLUGIN_NAME = 'group_replication';

如果未安装,可手动安装:

INSTALL PLUGIN group_replication SONAME 'group_replication.so';
3. 配置 MySQL 实例

编辑每台服务器的 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf),添加以下内容:

[mysqld]
# 唯一服务器 ID
server_id = 1  # 每台服务器需不同,例如 1、2、3
# 启用二进制日志
log_bin = mysql-bin
# 记录从节点更新
log_slave_updates = ON
# 使用 InnoDB 引擎
default_storage_engine = InnoDB
# 组复制相关配置
group_replication_group_name = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  # 使用 uuidgen 生成唯一 UUID
group_replication_local_address = "192.168.1.1:33061"  # 本地 IP 和端口,每台不同
group_replication_group_seeds = "192.168.1.1:33061,192.168.1.2:33061,192.168.1.3:33061"  # 所有成员地址
group_replication_bootstrap_group = OFF  # 仅在第一台启动时设为 ON
group_replication_single_primary_mode = ON  # 单主模式,设为 OFF 则为多主模式
transaction_write_set_extraction = XXHASH64  # 事务写集提取算法
binlog_checksum = NONE  # 关闭校验和以避免兼容性问题

注意

  • 每台服务器的 server_idgroup_replication_local_address 必须唯一。
  • group_replication_group_name 在所有服务器上保持一致。
4. 创建复制用户

在每台服务器上创建用于组复制的用户:

SET SQL_LOG_BIN = 0;  # 避免用户创建被复制
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
SET SQL_LOG_BIN = 1;
5. 启动组复制
  • 第一台服务器(引导节点)

    1. 设置引导组:
      SET GLOBAL group_replication_bootstrap_group = ON;
      
    2. 启动组复制:
      START GROUP_REPLICATION;
      
    3. 关闭引导模式:
      SET GLOBAL group_replication_bootstrap_group = OFF;
      
  • 其他服务器
    直接启动组复制:

    START GROUP_REPLICATION;
    
6. 验证组状态

检查组成员状态:

SELECT MEMBER_ID, MEMBER_HOST, MEMBER_STATE FROM performance_schema.replication_group_members;
  • MEMBER_STATEONLINE 表示正常运行。
  • 在单主模式下,可通过以下命令查看主节点:
    SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ROLE = 'PRIMARY';
    
7. 测试复制

在主节点上创建数据库和表,插入数据,检查其他节点是否同步:

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'Test');
8. 最佳实践
  • 监控:定期检查 performance_schema.replication_group_members 表。
  • 备份:使用 mysqldumpPercona XtraBackup 定期备份数据。
  • 升级:逐步升级所有成员至相同版本,避免混合版本运行太久。

资源推荐

  • 官方文档:MySQL 8.0 Reference Manual - Group Replication(https://dev.mysql.com/doc/refman/8.0/en/group-replication.html)
  • 教程:DigitalOcean 的 MySQL 组复制配置指南(适用于 Ubuntu 等系统)。

通过以上步骤,你可以快速入门 MySQL 组复制并搭建一个高可用数据库集群!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值