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,因此前期的准备工作有很多,那么开始吧.添加一块硬盘,用 ...
随机推荐
- DELPHI PROTOBUF免费的开源支持库fundamentals5
DELPHI PROTOBUF免费的开源支持库fundamentals5 1.源码URL: https://github.com/fundamentalslib/fundamentals5 2.编译P ...
- 【资料】wod食物
注意:1. 除非另外注明, 所有效果持续时间为整个地城2. 某几样食物若使用午饭时间技能, 效果只有LV1 (lunch level -25), 请小心服用. X技能等级 = 技能等级 焖豆属性奖励体 ...
- DevExpress Winform 通用控件打印方法(允许可自定义边距) z
DevExpress Winform 通用控件打印方法,包括gridcontrol,treelist,pivotGridControl,ChartControl,LayoutControl...(所有 ...
- Shell编程入门(第二版)(中)
注:test測试语句一般不单独使用,一般作为if语句的測试条件,如; if test -d file then .... fi test的变量的简写形式"[]" 演示样例-apac ...
- python 实现Hadoop的partitioner和二次排序
我们知道,一个典型的Map-Reduce过程包 括:Input->Map->Partition->Reduce->Output. Partition负责把Map任务输出的中间结 ...
- Linux进程间通信—信号
三.信号(Signal) 信号是Unix系统中使用的最古老的进程间通信的方法之一.操作系统通过信号来通知某一进程发生了某一种预定好的事件:接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认 ...
- 如何把rc.local里执行的shell脚本的日志内容放到其他位置
rc.local的日志内容默认是/var/log/boot.log /etc/rc.d/rc.local文件的文件头是#!/bin/sh ,我们把这修改成#!/bin/sh -x,这样系统启动后就会把 ...
- Page的ResolveClientUrl与ResolveUrl读取路径
Page的ResolveClientUrl与ResolveUrl读取路径 . 一.Page对象的ResolveClientUrl与ResolveUrl Page.ResolveClientUrl(): ...
- 数学图形(1.35)Kappa curve
不知道这个曲线和那个运动品牌背靠背有什么关系.阿迪原先的商标是个三叶草,难道背靠背也是由数学图形来的? 以下是维基上的解释. In geometry, the kappa curve or Gutsc ...
- Linux下Anaconda的安装使用与卸载及问题解决
1. 安装 到官网下载对应的版本文件:Download Anaconda Now! 下载完之后,在终端输入: bash 下载好的文件 整个过程点几下回车就好了.但是到最后一步,会提示是否把anacon ...