当前位置: 首页 > news >正文

MySQL8.4组复制

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

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.3 配置组复制
  • 主库实例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.4 组复制数据同步测试
  • 主库实例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.5 组复制主库宕机测试
  • 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;

相关文章:

  • Linux服务器时间同步——Chronyd
  • 核心知识点:惯性导航(Inertial Navigation)
  • JDBC连接数据库精准提炼
  • 具身智能(Embodied AI)
  • 把 jar 打包成 exe
  • CTA-861-G-2017中文pdf版
  • 【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack (下)
  • CppCon 2014 学习第3天:Viewing the world through array-shaped glasses
  • 传输层协议TCP(上)
  • 知识隔离的视觉-语言-动作模型:训练更快、运行更快、泛化更好
  • 【仿生系统】qwen的仿生机器人解决方案
  • 工程化架构设计:Monorepo 实战与现代化前端工程体系构建
  • Webug4.0靶场通关笔记03- 第3关SQL注入之时间盲注(手注法+脚本法 两种方法)
  • 【AI论文】ScienceBoard:评估现实科学工作流程中的多模态自主代理
  • Unity Button 交互动画
  • 易经六十四卦象解释数据集分享!智能体知识库收集~
  • 使用MFC 写dap上位机在线烧写FLASH
  • UE路径追踪Path Tracing和Lumen的区别
  • 从 0 到 1 的显示革命:九天画芯张锦解码铁电液晶技术进化史
  • lua的注意事项2
  • wordpress是否有商城插件/seo教程之关键词是什么
  • 市场调研报告模板/刷排名seo软件
  • wordpress 顶级分类/新站seo快速排名 排名
  • asp 网站支持多语言/找百度
  • 经典网站首页/谷歌推广哪家公司好
  • 欧美做愛网站/百度推广优化排名怎么收费