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

 更新时间:2026年01月06日 15:34:46   作者:MrZhou周  
本文档详细介绍了如何在单机上使用Docker创建一个包含三个节点的MySQL MGR集群,通过一系列步骤,包括安装Docker、配置MySQL MGR以及启动多个容器,成功构建了一个高可用的MySQL集群环境

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;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot打包成Docker镜像的项目实践

    SpringBoot打包成Docker镜像的项目实践

    Spring Boot和Docker,可以方便地将应用程序部署到不同的环境中,本文主要介绍了SpringBoot打包成Docker镜像的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Docker compose一键安装mirai搭建QQ机器人最快操作方法

    Docker compose一键安装mirai搭建QQ机器人最快操作方法

    这篇文章主要介绍了Docker compose一键安装mirai,搭建QQ机器人最快方法,详细介绍了mirai基本操作,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 数据卷(Data Volumes)及dockefile详解

    数据卷(Data Volumes)及dockefile详解

    在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作,今天给大家介绍下数据卷(Data Volumes)及dockefile的相关知识,感兴趣的朋友一起看看吧
    2023-01-01
  • docker在win10家庭版下构建laravel开发环境的教程详解

    docker在win10家庭版下构建laravel开发环境的教程详解

    这篇文章主要介绍了docker在win10家庭版下构建laravel开发环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 部署OceanBase-ce全过程

    部署OceanBase-ce全过程

    这篇文章主要介绍了部署OceanBase-ce全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • dockerfile介绍与使用小结

    dockerfile介绍与使用小结

    Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 只需要在Dockerfile上添加或者修改指令, 就可生成 docker 镜像,本文给大家介绍dockerfile介绍与使用小结,感兴趣的朋友一起看看吧
    2023-11-11
  • 修改docker默认存储位置的两种方法

    修改docker默认存储位置的两种方法

    本文主要介绍了修改docker默认存储位置的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Docker使用阿里加速器安装centos教程

    Docker使用阿里加速器安装centos教程

    这篇文章主要介绍了Docker使用阿里加速器安装centos教程,需要的朋友可以参考下
    2017-04-04
  • docker容器如何优雅的终止详解

    docker容器如何优雅的终止详解

    最近公司在试验如何将项目部署到docker容器中去,这其中涉及到一个技术环节,那就是如何让docker容器优雅的终止。所谓优雅终止,指的就是程序在退出前有清理资源,保存必要中间状态,持久化内存数据的机会。下面通过这篇大家一起由简单到复杂逐一考量一下。
    2016-11-11
  • Docker如何安装禅道

    Docker如何安装禅道

    文章介绍了如何在服务器上安装和运行禅道容器,包括查看容器、下载镜像、安装禅道、配置网络和端口、以及初次登录和修改密码的步骤
    2024-11-11

最新评论