mysql group replication 安装&配置详解
一、原起:
之前也有写过mysql-group-replication (mgr) 相关的文章、那时也没有什么特别的动力要写好它、主要是因为在
mysql-5.7.20 之前的版本的mgr都有着各种各样的问题、感觉像是一个半成品、但是5.7.20这个版本的mgr已经基本
可用了。所以接下来打算把整个mgr系列写完。
二、mysql-group-replication 安装环境规划:
主名 ip地址 在mgr中的角色
mtls17 10.186.19.17 primary
mtls18 10.186.19.18 seconde
mtls19 10.186.19.19 seconde
也就是说我打算在mtls17\18\19这三台主机上安装一套mgr数据集群环境、我打算用mtls17主机做主库(primary)
另外两台主机做从库(seconde)
别外、还有一件事我想了很久、就是要不要不mysql的安装过程也加到博客里面、如果加的话就会显得博客特别长、
没有办法凸出重点;可是如果只写mgr相关内容的话、一来读者可能不一定能把环境搭建起来、二来影响博客的质量
思量再三还是决定把mysql安装的相应步骤写进来。
三、下载mysql-5.7.20社区版:
由于三台机器上都要安装、下面的命令要在三台主机上执行
cd /tmp/
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
四、安装mysql:
由于三台主机上都要安装、下面的命令要在三台主机上执行
cd /tmp/
tar -xvf mysql-5.7.-linux-glibc2.-x86_64.tar.gz -C /usr/local/ cd /usr/local/
ln -s mysql-5.7.-linux-glibc2.-x86_64 mysql
注意这里并没有完成mysql的安装、更准确的说、这里只是把mysql安装包解压到了/usr/local而已 。要完成mysql
的安装还有一系列的步骤。
五、创建mysql数据目录 与 增加系统用户mysql:
由于三台主机上都要安装、下面的命令要在三台主机上执行
mkdir -p /database/mysql/data/ useradd mysql chown -R mysql:mysql /database/mysql/data/
chown -R mysql:mysql /usr/local/mysql*
六、增加mysql的配置文件:
由于三台主机上都要安装、所以每台主机上都要加
touch /etc/my.cnf
1、mtls17的配置文件内容如下
[mysqld]
basedir=/usr/local/mysql/
datadir=/database/mysql/data/
port=
socket=/tmp/mysql.sock server_id=
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=mysql-bin
binlog_format=row transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "10.186.19.17:33060"
loose-group_replication_group_seeds= "10.186.19.17:33060,10.186.19.18:33060,10.186.19.19:33060"
loose-group_replication_bootstrap_group= off
2、mtls18的配置文件的内容如下
[mysqld]
basedir=/usr/local/mysql/
datadir=/database/mysql/data/
port=
socket=/tmp/mysql.sock server_id=
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=mysql-bin
binlog_format=row transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "10.186.19.18:33060"
loose-group_replication_group_seeds= "10.186.19.17:33060,10.186.19.18:33060,10.186.19.19:33060"
loose-group_replication_bootstrap_group= off
3、mtls19的配置文件如下
[mysqld]
basedir=/usr/local/mysql/
datadir=/database/mysql/data/
port=
socket=/tmp/mysql.sock server_id=
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=mysql-bin
binlog_format=row transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "10.186.19.19:33060"
loose-group_replication_group_seeds= "10.186.19.17:33060,10.186.19.18:33060,10.186.19.19:33060"
loose-group_replication_bootstrap_group= off
在这里有一些技术细节要说明一下:
上面的三个配置文件省略了所有不必要的配置项、但是看起来还是有点多、这些都是mgr环境要求的。
server_id 每个实例都要不要样
loose-group_replication_group_name:为mgr高可用组起一个名字,这个名字一定要是uuid格式的。
loose-group_replication_local_address:mgr各实例之前都是要进行通信的、这个配置项设置的就是本
实例所监听的ip:端口
loose-group_replication_group_seeds:各mgr实例所监听的ip:端口信息
七、初始化mysql数据库:
这个在三台主机上都要执行
cd /usr/local/mysql/
./bin/mysqld --defaults-file=/etc/my.cnf --datadir=/database/mysql/data// --user=mysql --initialize-insecure
八、配置mysql与systemd结合:
在redhat-7.x 与服务启动相关的脚本、不在是之前的/etc/init.d/目录的下脚本。而是一个/usr/lib/systemd/system/目录
下配置文件。由于三台主机上的mysql都要开机启动、所以三台主机上都要执行如下的操作。
1、增加systemd相关的配置文件/usr/lib/systemd/system/mysql.service
touch /usr/lib/systemd/system/mysql.service
mysql.service 的内容如下
[Unit]
Description=MySQL Server
Documentation=man:mysqld()
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target [Install]
WantedBy=multi-user.target [Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#LimitNOFILE =
#Restart=on-failure
#RestartPreventExitStatus=
2、设置mysql开机启动
systemctl enable mysql
3、如果你使用的是redhat-6.x 那么上面的两步可以用以下命令来完成
#配置开机启动
cd /usr/local/mysql/
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig mysqld on #启动mysql服务
service mysqld start
九、启动mysql:
systemctl start mysql
十、为了方便使用重新设置一下PATH环境变量:
echo 'PATH=/usr/local/mysql/bin/:$PATH' >>/etc/profile source /etc/profile
十一、配置mgr的第一个结点:
mgr中所有的结点都属于一个逻辑上的组、这个组就像是QQ群一样、是由群主建起来的、有了这个上组之后、
其它的结点就可以加入到这个组中来了。 mtls17来建群
以下步骤在mtls17主机上的mysql中执行
第一步:创建用于复制的用户
set sql_log_bin=0;
create user mgruser@'%' identified by 'mtls@352';
grant replication slave,replication client on *.* to mgruser@'%';
create user mgruser@'127.0.0.1' identified by 'mtls@352';
grant replication slave,replication client on *.* to mgruser@'127.0.0.1';
create user mgruser@'localhost' identified by 'mtls@352';
grant replication slave,replication client on *.* to mgruser@'localhost';
set sql_log_bin=1;
第二步:配置复制所使用的用户
change master to
master_user='mgruser',
master_password='mtls@352'
for channel 'group_replication_recovery';
第三步:安装mysql group replication 这个插件
install plugin group_replication soname 'group_replication.so';
第四步:建个群(官方点的说法就是初始化一个复制组)
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;
以下是我完成这四步的过程:
[root@mtls17 mysql]# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'%' identified by 'mtls@352';
Query OK, 0 rows affected (0.01 sec) mysql> grant replication slave,replication client on *.* to mgruser@'%';
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'127.0.0.1' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'localhost' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'localhost';
Query OK, 0 rows affected (0.00 sec) mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec) mysql>
mysql>
mysql> change master to
-> master_user='mgruser',
-> master_password='mtls@352'
-> for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.10 sec) mysql>
mysql>
mysql> install plugin group_replication soname 'group_replication.so';
Query OK, 0 rows affected (0.01 sec) mysql>
mysql>
mysql> set global group_replication_bootstrap_group=on;
Query OK, 0 rows affected (0.00 sec) mysql> start group_replication;
Query OK, 0 rows affected (2.11 sec) mysql> set global group_replication_bootstrap_group=off;
Query OK, 0 rows affected (0.00 sec)
十二、配置mgr的第二个结点:
第二个结点和第一个结点唯一的不同在于它不在要自己去建一个群了、它只要加入第一个结点建的群就可以了
第一步:创建用于复制的用户
set sql_log_bin=0;
create user mgruser@'%' identified by 'mtls@352';
grant replication slave,replication client on *.* to mgruser@'%';
create user mgruser@'127.0.0.1' identified by 'mtls@352';
grant replication slave,replication client on *.* to mgruser@'127.0.0.1';
create user mgruser@'localhost' identified by 'mtls@352';
grant replication slave,replication client on *.* to mgruser@'localhost';
set sql_log_bin=1;
第二步:配置复制所要的用户
change master to
master_user='mgruser',
master_password='mtls@352'
for channel 'group_replication_recovery';
第三步:安装组复制插件
install plugin group_replication soname 'group_replication.so';
第四步:加入前面创建好的复制组
start group_replication;
以下是我完成这四步的过程
[root@mtsl18 mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'%' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'%';
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'127.0.0.1' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'localhost' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'localhost';
Query OK, 0 rows affected (0.00 sec) mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec) mysql>
mysql>
mysql> change master to
-> master_user='mgruser',
-> master_password='mtls@352'
-> for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec) mysql>
mysql>
mysql> install plugin group_replication soname 'group_replication.so';
Query OK, 0 rows affected (0.01 sec) mysql>
mysql> start group_replication;
Query OK, 0 rows affected (6.60 sec)
十三、配置mgr的其它结点:
逻辑上第二个结点与第三、第四、第五 ... 等等结点有着一样的逻辑角色、就也是说它们都不是群主;所以它们的配置
方式和第二个结点是一样的。
以下是我配置第三个结点时的过程
[root@mtls19 mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'%' identified by 'mtls@352';
Query OK, 0 rows affected (0.01 sec) mysql> grant replication slave,replication client on *.* to mgruser@'%';
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'127.0.0.1' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec) mysql> create user mgruser@'localhost' identified by 'mtls@352';
Query OK, 0 rows affected (0.00 sec) mysql> grant replication slave,replication client on *.* to mgruser@'localhost';
Query OK, 0 rows affected (0.00 sec) mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec) mysql>
mysql>
mysql> change master to
-> master_user='mgruser',
-> master_password='mtls@352'
-> for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.12 sec) mysql>
mysql>
mysql> install plugin group_replication soname 'group_replication.so';
Query OK, 0 rows affected (0.02 sec) mysql>
mysql> start group_replication;
Query OK, 0 rows affected (3.23 sec)
十四、验证mgr各个结点是否正常:
mysql> select * from performance_schema.replication_group_members ;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 34760575-c607-11e7-96e3-9a17854b700d | mtls17 | 3306 | ONLINE |
| group_replication_applier | 8816fee3-c77d-11e7-832c-1e1b3511358e | mtsl18 | 3306 | ONLINE |
| group_replication_applier | 8dfc74c1-c77d-11e7-9447-8a7c439b72d9 | mtls19 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
结论:3个结点的状态都是online 说明它们是正常的、进一步说明mgr的安装成功了。
十五、对于mgr配置过程中一些要点问题的回答:
1、官方说mgr是与mysql replication 完全不同的一种数据同步技术、为什么还要加一个复制用户?
(这个上问题针对的是第十二节的第一步&第二步)
答:
一个节点在加入mgr组时、这个加入的过程在逻辑上可以分成两个阶段、第一个阶段基于传统的gtid的复制
方式把这个上结点落下的数据补上去;假设这个阶段用时30分钟、这30分钟内mgr集群还是可以接受数据写入的。
那这30分钟的数据通过什么方式补呢?答案就是这30分钟的数据在第二阶段补、第二阶段就是用的mgr的方式同步
的了、在把数据补上之后就个结点就成功的加入的mgr集群、并为online状态。
2、为什么要安装插件
答:
因为mgr功能是一个插件实现的。
十六、更多:
1、如果你感觉手动安装配置mgr比较费事、我做了一个mysql dba的工具、它能完成myql-group-replication的自动
安装配置 工具的地址:https://github.com/Neeky/mysqltools#mysql-group-replication环境的安装
2、这里只介绍了mgr的安装与配置、并没有对mgr的功能进行测试、是因为我已经写了一份关于mgr功能的测试的报告
测试报告地址:http://www.cnblogs.com/JiangLe/p/7809229.html
----
mysql group replication 安装&配置详解的更多相关文章
- lvs keepalived 安装配置详解【转】
lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...
- Eclipse IDE for C/C++ Developers安装配置详解
Eclipse IDE for C/C++ Developers安装配置详解(转) 转自:http://hi.baidu.com/ltb6w/item/986532efd712460f570f1ddc ...
- Cloudera CDH 、Impala本地通过Parcel安装配置详解及什么是Parcel
本文引用自:Cloudera CDH .Impala本地通过Parcel安装配置详解及什么是Parcelhttp://www.aboutyun.com/forum.php?mod=viewthread ...
- ubuntu14.04 server ftp 服务安装配置详解
ubuntu14.04 server ftp 服务安装配置详解 cheungmine 2016-01-27 http://wiki.ubuntu.com.cn/Vsftpd 0 安装好vsftpd服务 ...
- JDK10安装配置详解
JDK10安装配置详解 1. 下载jdk10 1.1 官网下载jdk7的软件包: 地址:http://www.oracle.com/technetwork/java/javase/dow ...
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ...
- (转)使用LVS实现负载均衡原理及安装配置详解
使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html
- mysql 安装配置详解
作为演示,是不可能完全模拟到生产环境的,因此不可能尽善尽美.由于是在virtualbox里面的centos6.5最小化安装版中安装配置mysql,因此前期的准备工作有很多,那么开始吧.添加一块硬盘,用 ...
随机推荐
- POJ2352【树状数组】
个人NO.1 一开始题意理解有错. 一星星左下边有N颗星星,那它的等级就是N. 一开始理解必须X,Y两个坐标都小于,后来根据样例看了一下只要左下方即可,X,Y坐标都小于等于即可,但不包括星星本身. # ...
- 升级struts到2.5.2遇到的问题及解决方案
原来的版本是2.3.x,由于安全原因需要升级到2.5.2.1,2.5.2版本不再提供xwork.jar ,整合到了 struts-core包中. 2,方法不能访问的问题,需要在每个action配置文件 ...
- Python学习(二)Python 简介
Python 简介 官方指南及文档 Python2.7官方指南(中文版):http://pan.baidu.com/s/1dDm18xr Python3.4官方指南(中文版):http://pan.b ...
- nose的测试报告
有时候我们要让报告整洁美观点,以html展示测试结果,我们可以借助pip install nosehtmloutput插件输出html格式报告 from nose.plugins.plugintest ...
- HTML学习要点
目标 掌握HTML基本语法,了解HTML Document结构,能熟练使用HTML Element对象. 要点 基本概念:什么是HTML.HTML标签? 熟悉常用的HTML标签含义以及应用场合. ht ...
- Nodejs安装使用,以及不错的Nodejs或者JS资料整理
先按照这个教程来学习:Node.js教程 - 菜鸟教程网 在mac上使用brew安装了nodejs,中间还是用到了先下载到cache目录的方法. 但是后来发现这样按照的node,没有安装npm. 找到 ...
- 挑战黑客极限:Pwn2Own 2015成史上“最难”黑客大赛
Pwn2Own是全球最著名.奖金最丰厚的黑客大赛,由美国五角大楼入侵防护系统供应商TippingPoint赞助.近日Pwn2Own 2015公布全新的比赛规则,本届赛事难度超高.史无前例,包括VUPE ...
- vue项目中使用mockjs模拟接口返回数据
Mock.js 是一个模拟数据生成器,利用它,可以拦截ajax请求,直接模拟返回数据,这样前后端只要约定好数据格式,前端就不需要依赖后端的接口,可以直接使用模拟的数据了. 网上介绍mock的教程也较多 ...
- 【python】Django设置SESSION超时时间没有生效?
按手册和网上的方法在settings.py中设置“SESSION_COOKIE_AGE” 和 “SESSION_EXPIRE_AT_BROWSER_CLOSE” 均不生效. 通过查看django的源代 ...
- 转: SVN和Git的一些用法总结
转:http://www.codelast.com/?p=5719 转载请注明出处:http://www.codelast.com/ 以下都是比较基础的操作,高手们请绕道,不必浪费时间来看了. (A) ...