MySQL-Group-Replication-安装流程

技术文档网 2021-05-13

参考: http://www.linuxidc.com/Linux/2017-03/142378.htm

机器准备
qtj001  192.168.56.201/24
qtj002  192.168.56.202/24
qtj003  192.168.56.203/24
安装

~/.my.cnf 配置

[client]
default-character-set=utf8mb4
port=3306
socket=/usr/local/data/mysql/mysql.sock
prompt = "(\u@\h) [\d]> "

[mysqld]
user=qtj
# 字符编码
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

basedir=/usr/local/mysql
datadir=/usr/local/data/mysql
port = 3306
socket=/usr/local/data/mysql/mysql.sock

server_id=201
log-bin=/usr/local/logs/mysql/binlog
log-bin-index=/usr/local/logs/mysql/binlog.index
relay-log=/usr/local/logs/mysql/relaylog
relay-log-index=/usr/local/logs/mysql/relaylog.index

master_info_repository = TABLE
relay_log_info_repository = TABLE
log_slave_updates = ON
binlog_checksum = NONE
binlog_format = ROW
transaction_isolation = READ-COMMITTED
gtid_mode = ON
enforce_gtid_consistency = ON
# GR 配置项 其中loose前缀表示若Group Replication plugin未加载 mysql server仍继续启动
transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = "34888898-43e5-4e23-9378-72ef1edf0757"    # 组名,此处可拿select uuid();生成. 注意:所有机器相同
loose-group_replication_start_on_boot = off    # 在mysqld启动时不自动启动组复制
loose-group_replication_local_address = "192.168.56.201:33061"
loose-group_replication_group_seeds = "192.168.56.201:33061,192.168.56.202:33061,192.168.56.203:33061"
loose-group_replication_bootstrap_group = off

[mysql]
default-character-set = utf8mb4

[mysqld_safe]
general-log-file=/usr/local/logs/mysql/mysql.log
log-error=/usr/local/logs/mysql/mysql_err.log
slow-query-log-file=/usr/local/logs/mysql/mysql_slow_query.log
pid-file=/usr/local/logs/mysql/mysql.pid

复制到其他机器

for i in 2 3; do  scp ~/.my.cnf qtj00$i:~/.my.cnf; done

在各台机器修改如下值(将201替换对应202, 203)

server_id=201
loose-group_replication_local_address = "192.168.56.201:33061"

第一台机器配置

SET SQL_LOG_BIN=0;
CREATE USER mgr@'%';
GRANT REPLICATION SLAVE ON *.* TO mgr@'%' IDENTIFIED BY 'mgr';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='mgr', MASTER_PASSWORD='mgr' FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SELECT * FROM information_schema.plugins WHERE PLUGIN_NAME LIKE '%group%'\G
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members;


CREATE DATABASE sample;
USE test;
CREATE TABLE t_sample(id int PRIMARY KEY, name varchar(20)) CHARACTER SET utf8;
  INSERT INTO t_sampleVALUES(1,'name1');
  INSERT INTO t_sampleVALUES(2,'name2');
  UPDATE t_sample SET name='name2new' WHERE id=2;
  SELECT * FROM t_sample;

第二、三台机器配置

SET SQL_LOG_BIN=0;
create user mgr@'%';
GRANT REPLICATION SLAVE ON *.* TO mrg@'%' IDENTIFIED BY 'mgr';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='mgr', MASTER_PASSWORD='mgr'  FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;
set global group_replication_allow_local_disjoint_gtids_join=ON;  // 也就这里要指定一下
START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;

验证

(root@localhost) [sample]> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 2ff3c37d-711b-11e7-ab04-000c2932d28b | qtj003      |        3306 | ONLINE       |
| group_replication_applier | 91e08a54-7112-11e7-bc89-000c29326c3b | qtj001      |        3306 | ONLINE       |
| group_replication_applier | 95ac3ee3-7118-11e7-b795-000c29ccc0cb | qtj002      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

在第2、3台机器执行:

show databases;
use sample;
select * from t_sample;

验证主从

在第2、3台执行

(root@localhost) [sample]> create database test;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

在第1台执行

(root@localhost) [sample]> create database test;
Query OK, 1 row affected (0.00 sec)

确定 master 机器

(root@localhost) [sample]> SELECT @@read_only, @@super_read_only;
+-------------+-------------------+
| @@read_only | @@super_read_only |
+-------------+-------------------+
|           1 |                 1 |
+-------------+-------------------+

or

SELECT b.member_id, b.member_host, b.member_port
FROM performance_schema.global_status a
JOIN performance_schema.replication_group_members b
ON a.variable_value = b.member_id
WHERE a.variable_name= 'group_replication_primary_member';

+--------------------------------------+-------------+-------------+
| member_id                            | member_host | member_port |
+--------------------------------------+-------------+-------------+
| 91e08a54-7112-11e7-bc89-000c29326c3b | qtj001      |        3306 |
+--------------------------------------+-------------+-------------+
1 row in set (0.00 sec)

相关文章

  1. webpack

    一、安装webpack 安装webpack首先需要安装node.js、node.js自带了软件包管理工具npm 1、查看自己的node版本 node -v 2、全局安装webpack(这里先

  2. 查看mysql数据库及表编码格式

    1.查看数据库编码格式 mysql> show variables like 'character_set_database'; 2.查看数据表的编码格式 mysql> show cre

  3. mysql锁

    mysql锁 共享锁与排他锁 (mysql共享锁排它锁) mysql锁分表锁和行锁 行锁包括共享锁和排他锁 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访

  4. mysql索引及sql优化

    1. 简述myisam和innodb的区别 特性 区别 用途 innodb支持事务,外键和行级锁 适合执行大量的INSERT或UPDATE 不保存表的具体行数 myisam不支持

  5. mysqldump备份成sql文件

    mysqldump备份成sql文件 ============== 假想环境: MySQL 安装位置:D:\MySQL 数据库名称为:myDatabase MySQL root 密码:12345

随机推荐

  1. webpack

    一、安装webpack 安装webpack首先需要安装node.js、node.js自带了软件包管理工具npm 1、查看自己的node版本 node -v 2、全局安装webpack(这里先

  2. 查看mysql数据库及表编码格式

    1.查看数据库编码格式 mysql> show variables like 'character_set_database'; 2.查看数据表的编码格式 mysql> show cre

  3. mysql锁

    mysql锁 共享锁与排他锁 (mysql共享锁排它锁) mysql锁分表锁和行锁 行锁包括共享锁和排他锁 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访

  4. mysql索引及sql优化

    1. 简述myisam和innodb的区别 特性 区别 用途 innodb支持事务,外键和行级锁 适合执行大量的INSERT或UPDATE 不保存表的具体行数 myisam不支持

  5. mysqldump备份成sql文件

    mysqldump备份成sql文件 ============== 假想环境: MySQL 安装位置:D:\MySQL 数据库名称为:myDatabase MySQL root 密码:12345