MySQL 5.7: 使用组复制(MySQL Group Replication)
MySQL 5.7: 使用MySQL Router实现应用程序的高可用
MySQL 5.7: 把现有的复制组迁移到InnoDB Cluster
MySQL 5.7: 使用PMM监视和管理数据库html
每一个节点执行以下命令安装官方仓库的MySQL Servernode
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
验证复制插件是否存在:mysql
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...git
该仓库提供了下面的Linux发布版的MySQL软件包:github
- Debian - 7
- Debian - 8
- Debian - 9
- Ubuntu - 14.04 LTS
- Ubuntu - 16.04 LTS
- Ubuntu - 17.04
- Ubuntu - 17.10
该仓库包含下列MySQL软件包和相关工具:sql
- MySQL 8.0 (Development)
- MySQL 5.7 (GA)
- MySQL 5.6 (GA)
- MySQL Cluster 7.5 (GA)
- MySQL Cluster 7.6 (Development)
- MySQL Workbench 6.3 (GA) - Ubuntu Only
- MySQL Router (GA and preview)
- MySQL Utilities
- MySQL Connector / Python
- MySQL Shell (GA and preview)
每一个节点建立目录, 用于放置MGR(MySQL Group Replication)的配置文件数据库
mkdir /etc/mysql/mgr.d
配置文件在本文Git仓库Markdown文件相同目录下, 文件名称依次为:bootstrap
mgr-01.conf mgr-02.conf mgr-03.conf
修改上述三个文件对应的IP地址, 详细的说明参考: https://www.howtoing.com/how-...ubuntu
生成复制组所须要的UUID备用.segmentfault
root# uuidgen 00d17eae-73c8-4a7d-abf5-051bb68a9d7d
用上面生成的UUID替换 loose-group_replication_group_name
https://github.com/developerw...
#!/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/
双十一新购了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'
解决办法:
http://blog.csdn.net/yuanlin6...
set global group_replication_allow_local_disjoint_gtids_join=ON;
对于一个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');
更新2017-11-12:
IP地址的问题参后续文章: MySQL 5.7: 使用MySQL Router实现应用程序的高可用
https://dev.mysql.com/doc/ref...
https://www.howtoing.com/how-...
http://blog.csdn.net/yuanlin6...
https://stackoverflow.com/que...