组复制的限制

存储引擎必须为Innodb

每个表必须提供主键

只支持ipv4,网络需求较高

一个组最多只能有9台服务器

不支持 Replication event checksums,

不支持 Savepoints

多主模式不支持SERIALIZABLE事务隔离级别

多主模式不能完全支持级联外键约束

多主模式不支持在不同节点上对同一个数据库对象并发执行DDL(在不同节点上对同一行并发进行RW事务,后发起的事务会失败)

配置过程

每个节点执行如下命令安装官方仓库的MySQL Server

apt-get update

cd /tmp

wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb

dpkg -i mysql-apt-config_0.8.9-1_all.deb

apt-get update

aptitude install -y mysql-server

验证复制插件是否存在:

root@iZwz98pmxwulw67n9gxnl2Z:/etc/mysql# ll /usr/lib/mysql/plugin/

total 4120

drwxr-xr-x 3 root root 4096 Nov 11 11:14 ./

drwxr-xr-x 3 root root 4096 Nov 11 11:14 ../

...

-rw-r--r-- 1 root root 1751560 Sep 14 01:01 group_replication.so

...

注意: 不要安装Ubuntu 16.04自带的MySQL, 16.04自带的MySQL安装后没有 group_replication.so 这个东西, 一定要通过 mysql-apt-config_0.8.9-1_all.deb 提供的仓库安装. MySQL 官方版本的最新版本的仓库可以在这里下载: https://dev.mysql.com/downloa...

每个节点创建目录, 用于放置MGR(MySQL Group Replication)的配置文件

mkdir /etc/mysql/mgr.d

修改MGR配置文件

配置文件在本文Git仓库Markdown文件相同目录下, 文件名称依次为:

mgr-01.conf

mgr-02.conf

mgr-03.conf

生成复制组所需要的UUID备用.

root# uuidgen

00d17eae-73c8-4a7d-abf5-051bb68a9d7d

用上面生成的UUID替换 loose-group_replication_group_name

上传配置文件

#!/bin/bash

# mkdir /etc/mysql/mgr.d

scp mgr-01.conf root@172.18.149.213:/etc/mysql/mgr.d/mgr.cnf

scp mgr-02.conf root@172.18.149.214:/etc/mysql/mgr.d/mgr.cnf

scp mgr-03.conf root@172.18.149.215:/etc/mysql/mgr.d/mgr.cnf

在每一个节点的 /etc/mysql/my.cnf 文件最后一行添加如下指令:

!includedir /etc/mysql/mgr.d/

更换MySQL的数据盘

双十一新购了3台本地SSD的ECS, 想把MySQL的数据目录移动到独立的SSD(/dev/vdb)上. 因此停止数据指标移动数据目录:

格式化磁盘

fdisk /dev/vdb

创建挂载点

mkdir /data

创建文件系统

mkfs.ext4 /dev/vdb1

查看磁盘UUID

blkid

复制 /dev/vdb1 的UUID, 在 /etc/fstab 下添加:

UUID=${UUID} /data ext4 errors=remount-ro 0 1

用你自己的磁盘UUID替换 ${UUID}

挂载文件系统

mount /dev/vdb1 /data

创建软连接并启动MySQL

mv /var/lib/mysql /data

ln -s /data/mysql /var/lib/mysql

systemctl start mysql

目录权限问题

启动数据库查看日志(tail -f /var/log/mysql/error.log)发现如下错误消息:

2017-11-11T03:24:49.003621Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable

2017-11-11T03:24:49.003637Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable

2017-11-11T03:24:49.003642Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error

2017-11-11T03:24:49.604050Z 0 [ERROR] Plugin 'InnoDB' init function returned error.

2017-11-11T03:24:49.604070Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

2017-11-11T03:24:49.604076Z 0 [ERROR] Failed to initialize plugins.

2017-11-11T03:24:49.604079Z 0 [ERROR] Aborting

解决办法

编辑如下文件

vi /etc/apparmor.d/usr.sbin.mysqld

在文件末尾 } 的上一行添加下面两行:

/data/mysql/ r,

/data/mysql/** rwk,

/data/mysql 为新的数据目录路径. 上面两行的作用是分配目录的读写权限, Ubuntu 16.04 默认的MySQL数据目录为 /var/lib/mysql.

复制配置

进入MySQL控制台

mysql -uroot -p

在所有节点执行如下命令:

SET SQL_LOG_BIN=0;

CREATE USER 'repl'@'%' IDENTIFIED BY 'password' REQUIRE SSL;

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

# 验证插件是否安装成功

mysql> SHOW PLUGINS;

+----------------------------+----------+--------------------+----------------------+---------+

| Name | Status | Type | Library | License |

+----------------------------+----------+--------------------+----------------------+---------+

...

| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |

+----------------------------+----------+--------------------+----------------------+---------+

配置第一个节点

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

配置余下节点

START GROUP_REPLICATION;

加入组的问题

事务问题, 各个节点的事务状态不一致. 所有节点加入集群前最好不要修改任何数据, 否则就会出现下面的错误.

2017-11-10T19:07:26.918531Z 0 [ERROR] Plugin group_replication reported: 'This member has more > executed transactions than those present in the group. Local transactions: c3c274ff-c63e-11e7-> b339-00163e0c0288:1-4 > Group transactions: 2e6bfa69-0439-41c9-add7-795a9acfd499:1-10,

c5898a84-c63e-11e7-bc8b-00163e0af475:1-4'

set global group_replication_allow_local_disjoint_gtids_join=ON;

IP地址变化的问题

对于一个3节点的单主集群来说, 当主节点挂了, 另外两个节点会自动选主. 其中一个会成为主节点, 并自动切换为读写模式.

因为对于单主模式来说, 只有主节点能够执行写操作. 那么我们如何知道主节点的IP地址呢?

可以在任意一个MySQL节点上通过如下SQL获取主节点的IP地址

SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID = (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member');

参考资料

mysql 组复制详解_MySQL 5.7: 使用组复制(MySQL Group Replication)相关推荐

  1. mysql 外键详解_mysql外键详解

    1.1.MySQL中"键"和"索引"的定义相同,所以外键和主键一样也是索引的一种.不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确 ...

  2. mysql嵌套查询详解_MySQL嵌套查询实例详解

    本文实例分析了MySQL嵌套查询.分享给大家供大家参考,具体如下: MySQl从4.11版后已经完全支持嵌套查询了,那么下面举些简单的嵌套查询的例子吧(源程序来自MySQL User Manual): ...

  3. mysql数据存储过程详解_mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...

  4. mysql主从复制原理详解_MySQL主从复制没使用过?三大步骤让你从原理、业务上理解透彻...

    成长是一棵树,总是在你不知不觉的情况下快乐长大:成长是一株草,总是在你不知不觉的情况下长满大地:成长是一朵花,总是在你不知不觉的情况下开满山头. 这不,随着时间的迁移.项目网站的用户量.数据量持续上升 ...

  5. mysql 二进制日志详解_Mysql二进制日志详解

    引言 注:图片取自网络 提一下比较重要的几个: 重做日志(Redo Log):重做日志是实现mysql事务的持久性的原理之一,当新增数据时,Redo Log会备份新数据,在事务提交前,只要持久化Red ...

  6. mysql grant all详解_MySQL grant 语法的详细解析

    以下的文章是MySQL grant语法的详细解析,如果你对MySQL grant 语法的相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了.我们大家都知道MySQL数据库赋予用户权限命令的简单格 ...

  7. mysql 操作指令详解_Mysql常用命令详解

    Mysql安装目录 数据库目录 /var/lib/mysql/ 配置文件 /usr/share/mysql(mysql.server命令及配置文件) 相关命令 /usr/bin(mysqladmin ...

  8. mysql grant命令详解_MySQL授权命令grant的使用方法详解

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant权限 on数据库对象 to用户 一.grant 普通数据用户,查询.插入.更新.删除 数 ...

  9. mysql字段类型详解_MySQL字段类型详解

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段 ...

  10. mysql select语句详解_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

最新文章

  1. 只允许指定IP远程桌面连接_使用IP安全策略
  2. 【python】 针对python3 下无法导入tkinter
  3. leecode第二十一题(合并两个有序链表)
  4. python个人网站系统_利用基于Python的Pelican打造一个自己的个人纯静态网站
  5. ASP.NET部署与安装_MSI制作图文教程.
  6. Oracle11g新特性:在线操作功能增强-Oracle11g在线重建索引功能增强 (转载)
  7. 620安装linux_Linux运维基础 Linux的quot;桑巴quot;
  8. 张雨石:关于深度学习中的dropout的两种理解
  9. 约瑟夫环c语言代码顺序存储,约瑟夫环问题算法的C语言代码实现
  10. 磁盘不见了只剩一个c盘_非常的奇葩,终于解决了硬盘从盘盘符消失的问题
  11. 气象报告是什么计算机领域,计算机辅助翻译系统在亚运气象服务方面地应用报告.pdf...
  12. 使用laravel搭建博客网站-博客的注册功能
  13. 宇枫资本女性刚工作理财建议
  14. git 怎么把以前的账号注销_QQ号被注销了,我的游戏账号怎么办?腾讯只用一句话让玩家没话说...
  15. UE4-PixelStreaming(虚幻引擎4-像素流技术)笔记
  16. 白杨SEO:品牌口碑业务指什么?企业品牌口碑如何推广与预防公关危机?
  17. 创新洞见|2023年B2B业务为何必须采用PLG增长策略
  18. Outer space invaders(代码源div.1 P5)
  19. 豆瓣FM产品分析 | 纯粹极简的听歌APP
  20. 【项目管理一点通】(16) 如何分解任务

热门文章

  1. mxnet入门--第5篇
  2. Linux 高性能集群搭建(1)---ssh节点通信
  3. OpenCV人工智能图像处理学习笔记 第6章 计算机视觉加强之机器学习中 SVM和HOG特征
  4. 七月算法机器学习 9 推荐系统与应用 小案例
  5. A New Romance Is Likely to End up like Your Previous Relationship 为什么每次恋爱总会走向相似的结局?
  6. 修改Noteexpress插入参考文献序号的颜色
  7. 190226每日一句
  8. 190225每日一句
  9. Atitit 信息安全体系 资料书籍表 1. 《信息安全原理与技术 2 1.1. 第2章 工具箱: 鉴别、 访问控制与加密 2 1.2. 第3章 程序和编程 漏洞 木马 病毒 3 1.3. We
  10. paip.提升稳定性---c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out