MySQL组复制(MGR)全解析 Part 4 MGR单主模式部署前准备
前期回顾
MySQL组复制(MGR)全解析 Part 2 常用复制技术介绍
MySQL组复制(MGR)全解析 Part 3 组复制机制细节
这期的专题我们来介绍MySQL组复制相关的内容
MGR架构
主机名 |
业务IP |
私有IP |
复制用户 |
角色 |
---|---|---|---|---|
rac1 |
11.12.14.29 |
10.10.10.11 |
rpl |
主 |
rac2 |
11.12.14.30 |
10.10.10.12 |
rpl |
从 |
rac3 |
11.12.14.39 |
10.10.10.13 |
rpl |
从 |
1. 配置私网
MGR建议组内成员间的通讯使用专用网络,类似RAC的private ip
我们这里重新添加网卡并设置和业务IP不同的网段地址
RAC1
10.10.10.11
RAC2
10.10.10.12
RAC3
10.10.10.13
最后测试是不是可以相互联通
2. 配置hosts文件
我们将三台服务器的信息写入hosts文件
请原谅我的主机名是rac~
三台服务器
11.12.14.29 rac1
11.12.14.30 rac2
11.12.14.39 rac3
10.10.10.11 rac1-priv
10.10.10.12 rac2-priv
10.10.10.13 rac3-priv
3. 配置存储引擎
MGR需要我们存储数据的存储引擎为innodb,否则会出错
my.cnf文件添加
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
在MySQL 8.0.16之前如果禁用MyISAM时使用mysql_upgrade命令会报错,如果需要可以首先启用MyISAM后再运行
4. 配置复制参数
MGR同时也需要我们设置如下参数
my.cnf文件添加
rac1
server_id=11121429
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/oradata/datalog/mysql/binlog/mysql-bin.log
binlog_format=ROW
rac2
server_id=11121430
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/datalog/mysql/binlog/mysql-bin.log
binlog_format=ROW
rac3
server_id=11121439
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/datalog/mysql/binlog/mysql-bin.log
binlog_format=ROW
最后重新数据库
5. 安装组复制插件
三台服务器
mysql>INSTALL PLUGIN group_replication SONAME 'group_replication.so';
然后通过SHOW PLUGINS;查看是否安装成功
6.配置组复制参数
我们需要配置用于组复制的一些参数
rac1
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="4e551942-aeb6-11e9-a5c8-0050568cef02"
group_replication_start_on_boot=off
group_replication_local_address= "rac1-priv:33061"
group_replication_group_seeds= "rac1-priv:33061,rac2-priv:33061,rac3-priv:33061"
group_replication_bootstrap_group=off
rac2
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="4e551942-aeb6-11e9-a5c8-0050568cef02"
group_replication_start_on_boot=off
group_replication_local_address= "rac2-priv:33061"
group_replication_group_seeds= "rac1-priv:33061,rac2-priv:33061,rac3-priv:33061"
group_replication_bootstrap_group=off
rac3
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="4e551942-aeb6-11e9-a5c8-0050568cef02"
group_replication_start_on_boot=off
group_replication_local_address= "rac3-priv:33061"
group_replication_group_seeds= "rac1-priv:33061,rac2-priv:33061,rac3-priv:33061"
group_replication_bootstrap_group=off
下面来详细说明参数的意义
- plugin_load_add 代表在数据库启动时自动加载的插件(组复制是通过插件的形式集成的)
- group_replication_group_name 告诉插件加入或者新建的组的名称,必须为一个有效的uuid,我们可以使用SELECT UUID()来生成一个
- group_replication_start_on_boot,代表数据库启动时是否自动启动组复制,这里设为off是因为我们还没有建立组复制,在建立完成后我们应该将其设置为ON
- group_replication_local_address 代表用于组成员间内部的通信的地址和端口对,可以使用IP也可以使用域名,不过要保证可以解析的到,推荐的端口为33061,各服务器间端口可以相同也可以不同,这里需要使用私有地址
- group_replication_group_seeds 用于新成员和组建立连接和同步时使用的,如rac3需要加入组,它既可以连接rac1做同步,也可以连接rac2做同步,可以是组内成员子集,一般来说我们这里填写所有的成员信息,这里还是需要用私有地址
- group_replication_bootstrap_group 代表该成员是否引导组,我们设置为off,一般我们手动开启该参数,注意组内只能在一个服务器上开启
7. 从主库恢复从库
由于MGR也是通过基于GTID的复制来进行数据同步的,如果主库的二进制信息有被清过,那么这部分的数据是不会被从库应用的,这时我们我们需要通过备份主库的形式在从库中还原到最近的状态
如果主库也是新建不久,或者所有库都是新库,这时所有的日志都在,就不用这个步骤了,
这部分可以参考我前面的文章,这里就写下步骤,我们使用基于GTID的复制
由于MGR不能有除innodb其他引擎,而一些系统表不符合,这里只导出应用的数据库
http://www.zhaibibei.cn/mysql/replication/
shell> mysqldump -S /data/mysql/data/mysql.sock -usystem -p --databases test --master-data=2 --set-gtid-purged=auto --triggers --events --routines > /tmp/dumpmaster.sql
shell> scp /tmp/dumpmaster.sql root@11.12.14.30:/tmp
shell> chown mysql:mysql /tmp/dumpmaster.sql
mysql> create database test;
mysql> reset master;
shell> mysql -S /data/mysql/data/mysql.sock -usystem -p test </tmp/dumpmaster.sql
8. 参考资料
https://dev.mysql.com/doc/refman/5.7/en/group-replication-getting-started.html
觉得文章不错的欢迎关注,转发,收藏~
- 一种实用的表格行鼠标点击高亮效果
- Lucene:QueryParser中操作符的疑惑
- 利用Boost影响Lucene查询结果的排序
- 利用Boost影响Lucene查询结果的排序
- linq to sql取出随机记录/多表查询/将查询出的结果生成xml
- [原创]Func〈T, TResult〉 泛型委托 以及演变历程(整理自MSDN)
- 上市企业4位数秒下的域名 如今9.9万元出售
- 黑客横行,全球安全系统集成市场将破百亿美元
- 有好东西融资2000万美金:官网启用四拼域名
- 全球首个农业全产业链智能工程“农业大脑”入选ECI
- 大数据说消费正从炫耀转向体验
- 这真是看脸的时代!刷脸购物!
- 苹果公司也瞄准了无人驾驶汽车行业
- 儿童智能手表存在安全漏洞而引发的思考
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- SignalR简介
- 前端基础:jQuery
- Web API--入门--(一)ASP.NET Web API 2(C#)入门
- C# 关键字之 decimal
- 设计模式(8)[JS版]-JavaScript设计模式之如何实现适配器模式???
- Python3与OpenCV3.3 图像处理(二)--图像基本操作
- 前端基础:ECMAScript 6
- 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
- 前端基础:Boostrap
- 设计模式(10)[JS版]-JavaScript如何实现组合模式???
- JavaWeb - Servlet:基本概念,HTTP 协议,Tomcat 服务器
- 漫画:设计模式之 “工厂模式”
- 设计模式(11)[JS版]-JavaScript中的注解之装饰器模式
- JavaWeb - Servlet:重定向和转发,状态管理
- 设计模式(12)[JS版]--JavaScript必会设计模式之外观模式(Façade Pattern)