docker容器单机创建3个节点的MySQLMGR集群

docker容器单机创建3个节点的MySQLMGR集群

复制代码
mkdir -p /data/dockerData/mysql1/conf.d
mkdir -p /data/dockerData/mysql1/data
mkdir -p /data/dockerData/mysql2/conf.d
mkdir -p /data/dockerData/mysql2/data
mkdir -p /data/dockerData/mysql3/conf.d
mkdir -p /data/dockerData/mysql3/data

docker run -d \
--name mysql33011 \
-p 33011:3306 \
--net=mysql-network --ip 172.72.0.15 \
-v /data/dockerData/mysql1/conf.d:/etc/mysql/conf.d \
-v /data/dockerData/mysql1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.43 

docker run -d \
--name mysql33012 \
-p 33012:3306 \
--net=mysql-network --ip 172.72.0.16 \
-v /data/dockerData/mysql2/conf.d:/etc/mysql/conf.d \
-v /data/dockerData/mysql2/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.43 


docker run -d \
--name mysql33013 \
-p 33013:3306 \
--net=mysql-network --ip 172.72.0.17 \
-v /data/dockerData/mysql3/conf.d:/etc/mysql/conf.d \
-v /data/dockerData/mysql3/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.43 


cat > /data/dockerData/mysql1/conf.d/my.cnf <<"EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 33011
default-time-zone = '+8:00'
log_timestamps = SYSTEM
log-bin = 1
binlog_format=row
binlog_checksum=NONE
log-slave-updates=1
skip-name-resolve
auto-increment-increment=2
auto-increment-offset=1
gtid-mode=ON
enforce-gtid-consistency=on
default_authentication_plugin=mysql_native_password
max_allowed_packet = 500M

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log=mgr15-relay-bin-ip15


transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "172.72.0.15:33061"
loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17"

report_host=172.72.0.15
report_port=3306

EOF




cat >  /data/dockerData/mysql2/conf.d/my.cnf <<"EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 33012
default-time-zone = '+8:00'
log_timestamps = SYSTEM
log-bin = 1
binlog_format=row
binlog_checksum=NONE
log-slave-updates=1
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
default_authentication_plugin=mysql_native_password
max_allowed_packet = 500M

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log=mgr16-relay-bin-ip16


transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "172.72.0.16:33062"
loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17"

report_host=172.72.0.16
report_port=3306

EOF




cat > /data/dockerData/mysql3/conf.d/my.cnf <<"EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 33013
default-time-zone = '+8:00'
log_timestamps = SYSTEM
log-bin = 1
binlog_format=row
binlog_checksum=NONE
log-slave-updates=1
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
default_authentication_plugin=mysql_native_password
max_allowed_packet = 500M


master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log=mgr17-relay-bin-ip17


transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "172.72.0.17:33063"
loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17"

report_host=172.72.0.17
report_port=3306

EOF

docker restart mysql33011 mysql33012 mysql33013


所有MySQL容器中安装MGR插件
//xxx是容器的名称
docker exec -it mysql33011 mysql -uroot -proot
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

docker exec -it mysql33012 mysql -uroot -proot
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

docker exec -it mysql33013 mysql -uroot -proot
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

在所有节点上创建复制账号
docker exec -it mysql33011 mysql -uroot -proot
docker exec -it mysql33012 mysql -uroot -proot
docker exec -it mysql33013 mysql -uroot -proot

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


启动MGR单主模式

在主节点上启动MGR:
docker exec -it mysql33011 mysql -uroot -proot

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members;

剩余节点需要加入MGR,在剩余节点上执行以下操作:
docker exec -it mysql33012 mysql -uroot -proot
docker exec -it mysql33013 mysql -uroot -proot

START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;
exit;
相关推荐
сокол36 分钟前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
utf8mb4安全女神1 小时前
Linux系统服务相关命令【定时任务设置】【任务进程管理】【防火墙区域应用】
linux·运维·服务器
凯丨1 小时前
Claude Code 自动化开发的完整体系
运维·自动化
我是一颗柠檬3 小时前
【MySQL全面教学】MySQL基础SQL语句Day3(2026年)
数据库·后端·sql·mysql·oracle
MandalaO_O4 小时前
MyBatis 与 MySQL 执行流程
数据库·mysql·mybatis
月走乂山4 小时前
Windows 10 WSL2 安装问题排查与解决全记录
windows·docker·hyper-v·故障排查·wsl2
SilentSamsara4 小时前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程
疯狂成瘾者4 小时前
常见的 Linux 版本
linux·运维·服务器
xingyuzhisuan5 小时前
GPU服务器集群搭建指南——选型、部署、优化+避坑全解析
运维·服务器·人工智能·gpu算力
键盘上的猫头鹰5 小时前
【从零学MySQL(三)】数据增删改(DML)及 SELECT 查询详解
数据库·mysql·数据分析