运维笔记39 mysql5.7新特性(Mysql Group Replication)
2017-04-08 00:26
567 查看
概述:
mysql5.7引入了一个很令人振奋的新特性,让mysql的主从复制更加方便简单,而且扫清了MySQL进入金融行业最后的障碍。
集群拓扑:
mysql版本: Ver 14.14 Distrib 5.7.17
发行版版本:Red Hat Enterprise Linux Server release 7.0 (Maipo)
建议下载Bundle版本,这种版本相当于全家桶版本,解压后直接无脑yum安装即可。(建议使用梯子下载。或者将链接拷贝到迅雷上,要不然下载速度感人)
解压后如下:
虽然全安装上肯定没有问题,但是想embedded(嵌入式版本)总不需要安装了吧,最后选择安装的rpm包如下。
安装好后要注意了,由于使用的是rhel7.0所以默认使用的服务管理是SysV,我们这里要在/etc/systemd/system创建systemctl的脚本全局配置文件,在/etc/systemd/system下创建mysql.service.d目录,并在其下创建override.conf配置文件。
配置内容如下:
配置这些之后,要使用systemctl重新加载一遍。
现在就可以使用systemctl命令控制mysql的服务了。
在mgr1,mgr2,mgr3上均写入如下配置
mgr是以一个插件的形式来安装的,下面是安装mgr插件,在mgr1,mgr2,mgr3上都要执行。
查看是否安装成功
看到上面的显示后说明安装成功。
2)
在my.cnf配置文件中加入如下配置
mysql mgr部分官方文档
但是官方文档没有说清一些配置,我们直接采用会踩坑。
首先设置
设置后就相当于以设置这个参数的机器为复制的master。这里也是官方文档提到的。之后直接开启集群即可
但是我们出现了启动错误
我们观察配置文件后,发现了如下的ERROR
经过查阅后我们加入如下参数
现在再启动集群问题就解决,在其他机器上,只需执行查阅后的那两个步骤和开启集群,同步集群就配置好了。
如果看到如下显示代表确实配置成功
如上代表3个节点都配置好了。
现在创建db1库并创建test表插入一些数据测试
插入数据的时候出现了如上问题,这里原因是group_replaction环境下面,表必须有主键不然不允许往里insert值。所以修改表t1,将id字段设置程主键即可。
现在插入成功在mgr2上查询
通过上面测试表示mgr已经配置成功。
mysql5.7引入了一个很令人振奋的新特性,让mysql的主从复制更加方便简单,而且扫清了MySQL进入金融行业最后的障碍。
集群拓扑:
mysql版本: Ver 14.14 Distrib 5.7.17
发行版版本:Red Hat Enterprise Linux Server release 7.0 (Maipo)
一.mysql5.7的yum安装(在systemd下)
在mysql官网上下载rpm包进行安装:建议下载Bundle版本,这种版本相当于全家桶版本,解压后直接无脑yum安装即可。(建议使用梯子下载。或者将链接拷贝到迅雷上,要不然下载速度感人)
解压后如下:
[root@mgr1 mysql]# ls mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar mysql-community-client-5.7.17-1.el7.x86_64.rpm mysql-community-common-5.7.17-1.el7.x86_64.rpm mysql-community-devel-5.7.17-1.el7.x86_64.rpm mysql-community-embedded-5.7.17-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm mysql-community-libs-5.7.17-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm mysql-community-server-5.7.17-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm mysql-community-test-5.7.17-1.el7.x86_64.rpm
虽然全安装上肯定没有问题,但是想embedded(嵌入式版本)总不需要安装了吧,最后选择安装的rpm包如下。
yum install mysql-community-server-5.7.17-1.el7.x86_64.rpm \ mysql-community-client-5.7.17-1.el7.x86_64.rpm \ mysql-community-common-5.7.17-1.el7.x86_64.rpm \ mysql-community-libs-5.7.17-1.el7.x86_64.rpm \ mysql-community-test-5.7.17-1.el7.x86_64.rpm \ mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
安装好后要注意了,由于使用的是rhel7.0所以默认使用的服务管理是SysV,我们这里要在/etc/systemd/system创建systemctl的脚本全局配置文件,在/etc/systemd/system下创建mysql.service.d目录,并在其下创建override.conf配置文件。
[root@mgr1 mysql.service.d]# pwd /etc/systemd/system/mysql.service.d [root@mgr1 mysql.service.d]# ls override.conf
配置内容如下:
[Service] LimitNOFILE=1024 #打开文件描述符的限制 PIDFile=/var/lib/mysql/mysqld.pid #指定pid文件的位置 Nice=0 #启动等级 LimitCore=1 #限制的cpu数 #Environment="LD_PRELOAD=/path/to/malloc/library" Environment="TZ=Asia/Shanghai" #设置市区
配置这些之后,要使用systemctl重新加载一遍。
[root@mgr1 mysql.service.d]# systemctl daemon-reload
现在就可以使用systemctl命令控制mysql的服务了。
二 配置mgr
2.1主从复制配置
mgr是一种主从复制的自动化,所以在配置他之前,仍然要先配置主从复制。在mgr1,mgr2,mgr3上均写入如下配置
server_id=1 #每台的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=binlog binlog_format=ROW
2.2 mgr的环境准备
1)mgr是以一个插件的形式来安装的,下面是安装mgr插件,在mgr1,mgr2,mgr3上都要执行。
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; Query OK, 0 rows affected (0.01 sec)
查看是否安装成功
mysql> show plugins; *************************** 45. row *************************** Name: group_replication Status: ACTIVE Type: GROUP REPLICATION Library: group_replication.so License: GPL 45 rows in set (0.00 sec)
看到上面的显示后说明安装成功。
2)
在my.cnf配置文件中加入如下配置
transaction_write_set_extraction = XXHASH64 loose-group_replication_group_name = "5f847ff2-d701-11e6-819c-b8ca3af6e36c" loose-group_replication_start_on_boot = off loose-group_replication_local_address = "mgr1.mo.com:23306"#这里每台机器上是不一样的 loose-group_replication_group_seeds = "mgr1.mo.com:23306,mgr2.mo.com:23307,mgr3.mo.com:23308" loose-group_replication_bootstrap_group = off loose-group_replication_single_primary_mode = true loose-group_replication_enforce_update_everywhere_checks = false
三 开启mysql集群
这里可以参考mysql的官方文档mysql mgr部分官方文档
但是官方文档没有说清一些配置,我们直接采用会踩坑。
首先设置
mysql> SET GLOBAL group_replication_bootstrap_group = ON;
设置后就相当于以设置这个参数的机器为复制的master。这里也是官方文档提到的。之后直接开启集群即可
mysql> START GROUP_REPLICATION;
但是我们出现了启动错误
我们观察配置文件后,发现了如下的ERROR
2017-04-07T15:08:13.077950Z 0 [Warning] Plugin group_replication reported: '[GCS] Connection attempt from IP address 172.25.3.201 refused. Address is not in the IP whitelist.'
经过查阅后我们加入如下参数
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON; mysql> SET GLOBAL group_replication_ip_whitelist='172.25.3.201/24,127.0.0.1/8';
现在再启动集群问题就解决,在其他机器上,只需执行查阅后的那两个步骤和开启集群,同步集群就配置好了。
如果看到如下显示代表确实配置成功
mysql> select * from performance_schema.replication_group_members\G *************************** 1. row *************************** CHANNEL_NAME: group_replication_applier MEMBER_ID: 2b5b9e8b-1b6d-11e7-a53a-52540096854f MEMBER_HOST: mgr3.mo.com MEMBER_PORT: 3306 MEMBER_STATE: ONLINE *************************** 2. row *************************** CHANNEL_NAME: group_replication_applier MEMBER_ID: 2f2d2c9c-1abc-11e7-8c6c-5254008dffba MEMBER_HOST: mgr1.mo.com MEMBER_PORT: 3306 MEMBER_STATE: ONLINE *************************** 3. row *************************** CHANNEL_NAME: group_replication_applier MEMBER_ID: c36fcb84-1b78-11e7-b3eb-525400ad6241 MEMBER_HOST: mgr2.mo.com MEMBER_PORT: 3306 MEMBER_STATE: ONLINE 3 rows in set (0.00 sec)
如上代表3个节点都配置好了。
现在创建db1库并创建test表插入一些数据测试
mysql> insert into test values(1,'mo'); ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin
插入数据的时候出现了如上问题,这里原因是group_replaction环境下面,表必须有主键不然不允许往里insert值。所以修改表t1,将id字段设置程主键即可。
mysql> alter table test modify id int primary key; Query OK, 0 rows affected (0.75 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into test values(1,'mo'); Query OK, 1 row affected (0.55 sec)
现在插入成功在mgr2上查询
mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | mo | +----+------+
通过上面测试表示mgr已经配置成功。
相关文章推荐
- MySQL5.7新特性笔记
- Mysql5.7新特性(学习笔记)
- mysql的event学习笔记---新特性
- Mysql运维管理工具innotop安装笔记
- 《转》MySQL 5.7版本新特性连载
- MySQL 5.7提供了一个新的特性-虚拟列
- MySQL 5.7新特性
- 本周技术关注[面向webapps运维]: Mysql Host '...' is blocked 错误 - Metro的
- mysql 5.7压缩包安装笔记
- MySQL索引特性笔记
- MySQL 5.7版本新特性连载(五)
- MySQL 5.7 新特性详解
- 初试mysql5.7.2新特性:多源复制(MySQL 5.7 multi-source replication)
- 退役笔记N#MySQL = lambda sql : sql + ' Source Code 4 Secondary Buffer Pool For InnoDB '
- 退役笔记二#MySQL = lambda sql : sql + ' Source Code 4 InnoDB '
- Mysql5.7新特性
- MySQL 运维笔记(一)—— 终止高负载SQL
- 退役笔记一#MySQL = lambda sql : sql + ' Source Code 4 Explain Plan '
- 退役笔记N#MySQL = lambda sql : sql + ' Source Code 4 Double Write '
- mysql5.7新特性