当前位置: 代码网 > it编程>数据库>Mysql > MySQL8.4组复制的实现步骤

MySQL8.4组复制的实现步骤

2025年08月11日 Mysql 我要评论
1 什么是组复制组复制主要解决了传统异步复制主机宕机时可能造成主从节点数据不一致问题mysql group replication,简称mgr将原有的gtid复制功能进行可增强,支持单主模式和多主模式

1 什么是组复制

  • 组复制主要解决传统异步复制主机宕机可能造成主从节点数据不一致问题
  • mysql group replication简称mgr
  • 原有gtid复制功能进行增强支持模式模式
  • 组复制数据库层面到了只要集群大多数主机可用服务可用也就是3服务器集群允许其中1宕机

  • 组复制提供了分布式状态机复制服务器之间具有很强协调性
  • 当服务器属于同一组它们自动进行协调
  • 传统的主从复制方式一个不等数据量主节点执行事务异步发送节点从节点重新执行
  • 组复制采用整组写入避免单点问题
  • 组复制传输数据使用paxos协议paxos协议保证了数据传输一致性原子
  • 基于paxos协议组复制构建一个分布式状态复制机制这是实现多主复制核心技术
  • 组复制提供多写方案
  • mgr保证数据库服务连续可用但是存在以下问题
    • 一个成员不可用连接到客户不能自主转移其他组成员
    • mysql router提供故障转移能力

2 单主模式

2.1 什么是单主模式

  • 模式下只有一个主服务器
  • 主服务器被设置读写模式
  • 组中其他所有成员设置只读模式

2.2 单主模式部署示例

https://dev.mysql.com/doc/refman/8.4/en/group-replication-configuring-instances.html

2.2.1 准备mysql实例10000

  • 创建目录
mkdir -p /opt/mysql/10000/{data,log,tmp} 
  • 准备配置文件
vi /opt/mysql/10000/my.cnf
 
[mysql]
#设置mysql客户端默认编码
default-character-set=utf8
[mysqld]
port=10000
pid-file= /opt/mysql/10000/mysqld.pid
socket= /opt/mysql/10000/mysqld.sock
datadir= /opt/mysql/10000/data
log-error=/opt/mysql/10000/log/mysqld.log
tmpdir=/opt/mysql/10000/tmp
secure-file-priv= null
# disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#服务器唯一id,默认是1
server-id=10000
#启用二进制日志
log-bin=mysql-bin
#最大连接数
max_connections=1000
#设置默认时区
default-time_zone='+8:00'
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
user = mysql
#启用全局事务标识符(gtid)模式
gtid_mode=on
#强制gtid的一致性。这意味着在执行事务时,mysql将确保所有涉及的服务器都使用相同的gtid集。
enforce_gtid_consistency=on
  • 初始化
chown -r mysql:mysql /opt/mysql/10000
mysqld --defaults-file=/opt/mysql/10000/my.cnf --initialize
mysqld --defaults-file=/opt/mysql/10000/my.cnf &
  • 初始化密码
#查看临时密码
cat /opt/mysql/10000/log/mysqld.log|grep "a temporary password"
#登录
mysql -uroot -p'eg+pvd&jj0n=' --socket=/opt/mysql/10000/mysqld.sock
>alter user 'root'@'localhost' identified by '123456';
  flush privileges;
  • 创建同步用户
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
 >create user 'repl'@'%' identified  by '123456';
  grant replication slave on *.* to 'repl'@'%';
  flush privileges;
  • 添加组复制配置
vi /opt/mysql/10000/my.cnf
#组复制设置
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.221.100:33061"
group_replication_group_seeds= "192.168.221.100:33061,192.168.221.100:33062,192.168.221.100:33063"
group_replication_bootstrap_group=off
disabled_storage_engines="myisam,blackhole,federated,archive,memory"

2.2.2 复制mysql实例10001

cp -rf /opt/mysql/10000 /opt/mysql/10001
sed -i "s#10000#10001#g" /opt/mysql/10001/my.cnf
rm -f /opt/mysql/10001/data/auto.cnf
sed -i  "s#group_replication_local_address= '192.168.221.100:33061'#group_replication_local_address= '192.168.221.100:33062'#g" /opt/mysql/10001/my.cnf
chown -r mysql:mysql /opt/mysql/10001
mysqld --defaults-file=/opt/mysql/10001/my.cnf &

2.2.3 复制mysql实例10002

cp -rf /opt/mysql/10000 /opt/mysql/10002
sed -i "s#10000#10002#g" /opt/mysql/10002/my.cnf
rm -f /opt/mysql/10002/data/auto.cnf
sed -i  "s#group_replication_local_address= '192.168.221.100:33061'#group_replication_local_address= '192.168.221.100:33063'#g" /opt/mysql/10002/my.cnf
chown -r mysql:mysql /opt/mysql/10002
mysqld --defaults-file=/opt/mysql/10002/my.cnf &

2.2.4 配置组复制

  • 主库实例10000执行
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> set global group_replication_recovery_get_public_key=on;
  change replication source to source_user='repl', source_password='123456' for channel 'group_replication_recovery';
  set global group_replication_bootstrap_group=on;
  start group_replication;
  set global group_replication_bootstrap_group=off;
  • 从库实例10001执行
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
> start group_replication;
  • 从库实例10002执行
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
> start group_replication;
  • 查看成员
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> select channel_name,member_id,member_host,member_port, member_role from performance_schema.replication_group_members;

2.2.5 组复制数据同步测试

  • 主库实例10000插入数据
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> create database test;
   use test;
   create table test (id int,name varchar(10));
   alter table test add primary key id(id);
   insert into test values(1,'a'),(2,'b'),(3,'c');
  • 从库实例10001查询数据
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
>  use test;
   select * from test;
  • 从库实例10002查询数据
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
>  use test;
   select * from test;

2.2.6 组复制主库宕机测试

  • kill主库实例10000
  • 查看成员

3 多主模式

https://dev.mysql.com/doc/refman/8.4/en/group-replication-multi-primary-mode.html

3.1 什么是多主模式
  • 多主模式下没有成员具有特殊角色
  • 任何组成员加入复制读背设置读写模式可都以处理写事物
3.2 多主模式部署示例
  • 关闭实例10000,10001,10002模式
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
>  stop group_replication;
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=on;
 
 
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
>  stop group_replication;
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=on;
 
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
>  stop group_replication;
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=on;
  • 使用实例10000引导组复制
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> set global group_replication_bootstrap_group=on;
  start group_replication;
  set global group_replication_bootstrap_group=off;
  • 实例10001,10002开启组复制
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
> start group_replication;

mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
> start group_replication;
  • 查看组成员
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
>  select channel_name,member_id,member_host,member_port, member_role from performance_schema.replication_group_members;

到此这篇关于mysql8.4组复制的实现步骤的文章就介绍到这了,更多相关mysql8.4组复制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • MySQL基本查询方式(表的增删查改)

    一、createinsert [into] table_name [(column [, column] ...)] values (value_list) [, (value_l…

    2025年08月11日 数据库
  • MySQL之复合查询解读

    一、基本查询练习回顾1、查询工资高于500或岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的j2、按照部门号升序而雇员的工资降序排序3、使用年薪进行降序排序4、显示…

    2025年08月11日 数据库
  • MySQL慢查询工具的使用小结

    MySQL慢查询工具的使用小结

    使用mysql的慢查询工具可以帮助开发者识别和优化性能不佳的sql查询。以下是详细深入的步骤和代码示例,帮助你使用mysql的慢查询工具来进行查询分析和优化。一... [阅读全文]
  • MySQL容灾备份的实现方案

    MySQL容灾备份的实现方案

    进行mysql的容灾备份是确保数据安全和业务连续性的关键步骤。容灾备份可以分为本地备份和远程备份,主要包括逻辑备份和物理备份两种方式。以下是详细说明和示例代码。... [阅读全文]
  • MySQL中处理数据的并发一致性的实现示例

    MySQL中处理数据的并发一致性的实现示例

    在mysql中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致。mysql通过事务(transacti... [阅读全文]
  • MYSQL中information_schema的使用

    MYSQL中information_schema的使用

    关键要点information_schema 是 mysql 中的一个虚拟数据库,提供关于数据库结构和权限的元数据信息。研究表明,它包含只读表(视图),用户可查... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com