mysql组复制清除,mysql group replication 组复制

环境

虚拟机中使用docker搭建mysql实例, 单主模式, 使用的是最新的mysql镜像版本:8.0.21, 按照官方文档弄的也踩了不少坑, 下面的配置有些跟官方文档有些不一样

mysql配置

[mysqld] disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

# 每个实例配置需要配置成不同的id

server_id=1

gtid-mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE

log_bin=binlog

log_slave_updates=ON

binlog_format=ROW

default_authentication_plugin=mysql_native_password

# 不加loose前缀, mysql较新的版本初始化启动时会失败

loose-plugin_load_add='group_replication.so'

# 网上生成的uuid

loose-group_replication_group_name="a31e4bde-840c-11eb-8dcd-0242ac130003"

loose-group_replication_start_on_boot=off

# db1是本MySQL实例的容器名, 同一个docker bridge网络中的容器可以使用容器名互联

loose-group_replication_local_address= "db1:33061"

# 这里填写已经在group中运行的实例的地址, 非主服务器使用, 填写主服务器地址即可

loose-group_replication_group_seeds= "db1:33061"

loose-group_replication_bootstrap_group=off

[client]

default-character-set = utf8

docker-compose配置

文件结构如下: conf文件夹放置配置文件, data文件夹作为容器的数据挂载

.

├── db1

│ ├── conf

│ └── data

├── db2

│ ├── conf

│ └── data

├── db3

│ ├── conf

│ └── data

└── docker-compose.yml

docker-compose配置文件:

version:'3'

networks:

mgr:

name: mgr-net

services:

db1:

image: mysql

container_name: db1

volumes:

- ./db1/conf:/etc/mysql/conf.d

- ./db1/data:/var/lib/mysql

ports:

- 3310:3306

environment:

- MYSQL_ALLOW_EMPTY_PASSWORD=yes

db2:

image: mysql

container_name: db2

volumes:

- ./db2/conf:/etc/mysql/conf.d

- ./db2/data:/var/lib/mysql

ports:

- 3311:3306

environment:

- MYSQL_ALLOW_EMPTY_PASSWORD=yes

db3:

image: mysql

container_name: db3

volumes:

- ./db3/conf:/etc/mysql/conf.d

- ./db3/data:/var/lib/mysql

ports:

- 3312:3306

environment:

- MYSQL_ALLOW_EMPTY_PASSWORD=yes

启动mgr组复制

启动db1 db2 db3三个mysql实例

docker-compose up -d

分别进入这三个容器中执行命令:

进入命令: docker exec -it db1 mysql

创建用户用于分布式恢复

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED BY 'password';

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

GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';

FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

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

在主服务器中引导组复制

在db1 db2 db3 中选择一个作为主服务器,执行以下命令

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

创建数据用于验证组复制

在主服务器中创建数据:

CREATE DATABASE test;

USE test;

CREATE TABLE t1 (c1 INT PRIMARY KEY NOT NULL AUTO_INCREMENT, c2 VARCHAR(10) NOT NULL);

INSERT INTO t1 VALUES (1, 'AAA');

从服务器加入到复制组中

这里就比较简单了, 一条命令就可以了

START GROUP_REPLICATION;

如果上面的命令报错:The member contains transactions not present in the group

可以执行下面的命令进行清理 (尝试部署了很多次这里每次都会报错, 官方文档上也没有说明)

reset master

然后就可以在从服务器中查看到在主服务器中创建的数据了, 如果继续新加服务器到组中, 继续上面的操作即可

查看复制组中的信息

mysql> select member_id, member_state, member_role from performance_schema.replication_group_members;

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

| member_id | member_state | member_role |

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

| 2de181db-847e-11eb-9524-0242ac190004 | ONLINE | SECONDARY |

| 2de2e0f1-847e-11eb-840d-0242ac190003 | ONLINE | PRIMARY |

| 2de387b8-847e-11eb-9846-0242ac190002 | ONLINE | SECONDARY |

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

其他注意

复制组中的服务器在重启之后, 需要手动命令恢复组

# 主服务器

SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

# 从服务器

START GROUP_REPLICATION;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值