docker部署MySQL主从服务集群方式

 更新时间:2025年11月08日 14:25:49   作者:hello_zzw  
文章介绍了如何创建目录、配置文件和搭建MySQL集群,包括设置主库和两个从库的配置,并详细说明了如何创建复制用户和连接主库

创建目录

mkdir -p ~/mysql/mysql8-cluster/{master,slave1,slave2}/{conf,data,logs}

创建网络

docker network create mysql-cluster-net
# 查看网络:docker network ls

配置文件

主库

~/mysql/mysql8-cluster/master/conf/my.cnf

[mysqld]
# 唯一标识(主从必须不同)
server-id=1
# 开启binlog,指定日志文件名前缀
log_bin=mysql-bin
# 二进制日志格式(row格式支持更精准的同步)
binlog_format=ROW
# 开启GTID(全局事务标识,自动跟踪binlog位置)
gtid_mode=ON
enforce_gtid_consistency=ON
# 忽略系统库同步(可选)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

从库1

~/mysql/mysql8-cluster/slave1/conf/my.cnf

[mysqld]
# 唯一标识(与主库不同)
server-id=2
# 从库也可开启binlog(可选,用于级联复制)
log_bin=mysql-slave-bin
# 开启GTID(与主库保持一致)
gtid_mode=ON
enforce_gtid_consistency=ON
# 中继日志(从库用于暂存主库binlog)
relay_log=mysql-relay-bin
# 从库只读(避免误写,可选)
read_only=ON
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

从库2

~/mysql/mysql8-cluster/slave2/conf/my.cnf

[mysqld]
# 唯一标识(与主库不同)
server-id=3
# 从库也可开启binlog(可选,用于级联复制)
log_bin=mysql-slave-bin
# 开启GTID(与主库保持一致)
gtid_mode=ON
enforce_gtid_consistency=ON
# 中继日志(从库用于暂存主库binlog)
relay_log=mysql-relay-bin
# 从库只读(避免误写,可选)
read_only=ON
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

搭建MySQL服务

-- 主服务
docker run -d --name mysql8-master --network mysql-cluster-net -p 3316:3306  -e MYSQL_ROOT_PASSWORD=123456  -v ~/mysql/mysql8-cluster/master/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/master/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/master/data:/var/lib/mysql mysql:8.0
-- 从服务器1
docker run -d  --name mysql8-slave1 --network mysql-cluster-net -p 3317:3306  -e MYSQL_ROOT_PASSWORD=123456  -v ~/mysql/mysql8-cluster/slave1/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/slave1/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/slave1/data:/var/lib/mysql mysql:8.0
-- 从服务器2
docker run -d  --name mysql8-slave2 --network mysql-cluster-net -p 3318:3306  -e MYSQL_ROOT_PASSWORD=123456  -v ~/mysql/mysql8-cluster/slave2/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/slave2/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/slave2/data:/var/lib/mysql mysql:8.0

主库创建复制用户

# 进入主库容器
docker exec -it mysql-master bash

# 登录MySQL(输入上述ROOT密码)
mysql -u root -p

# 创建复制用户(允许从库连接,用户名:repl,密码:Repl@123)
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl@123';
# 授权复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
# 刷新权限
FLUSH PRIVILEGES;

# 查看主库状态(记录binlog文件和位置,备用)
SHOW MASTER STATUS;

配置从库连接主库

# 进入从库容器
docker exec -it mysql-slave1 bash

# 登录MySQL
mysql -u root -p

# 配置主库连接信息(使用GTID简化配置)
CHANGE MASTER TO
  MASTER_HOST='mysql8-master',  # 主库容器名(同网络内可直接访问)或IP地址
  MASTER_USER='repl',          # 主库创建的复制用户
  MASTER_PASSWORD='Repl@123',  # 复制用户密码
  MASTER_PORT=3306,            # 主库容器内端口(默认3306)
  MASTER_AUTO_POSITION=1;      # 启用GTID自动定位binlog(无需手动填File和Position)

# 启动从库同步进程
START SLAVE;

总结

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

相关文章

  • Docker部署php运行环境(php-fpm+nginx)

    Docker部署php运行环境(php-fpm+nginx)

    Docker 是一种流行的容器化平台,可以帮助开发人员快速创建、部署和管理容器化应用程序,本文将介绍如何使用 Docker 搭建 PHP 开发环境服务器,让您能够轻松地开始 PHP 开发工作,感兴趣的可以了解一下
    2023-11-11
  • Docker多阶段镜像构建与缓存利用性能优化实践指南

    Docker多阶段镜像构建与缓存利用性能优化实践指南

    这篇文章将从原理层面深入解析 Docker 多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少镜像体积,感兴趣的小伙伴可以了解下
    2025-09-09
  • Docker中mysql镜像保存与导入的方法详解

    Docker中mysql镜像保存与导入的方法详解

    Docker 的 MySQL 镜像保存通常有两种场景:一种是保存镜像本身的修改(如配置、初始化数据),另一种是持久化保存容器运行时产生的数据(如数据库表、用户数据),这篇文章主要介绍了Docker中mysql镜像保存与导入的方法详解,需要的朋友可以参考下
    2025-05-05
  • 国内可用的Docker镜像源测试指南

    国内可用的Docker镜像源测试指南

    在使用 Docker 时,由于网络原因,直接从 Docker Hub 拉取镜像可能会遇到速度缓慢甚至无法访问的情况,因此,使用国内的 Docker 镜像源可以显著提升镜像拉取速度,本文将介绍如何选择和测试国内可用的 Docker 镜像源,需要的朋友可以参考下
    2025-02-02
  • Docker搭建Redis Cluster集群的教程详解

    Docker搭建Redis Cluster集群的教程详解

    这篇文章主要为大家详细介绍了Docker搭建Redis Cluster集群的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的可以参考下
    2024-03-03
  • docker内部容器之间的端口访问实现方法

    docker内部容器之间的端口访问实现方法

    alpine-client 与 alpine-server 两容器,前者访问后者监听之端口,以此探析 Docker 内部容器间端口访问机制,这篇文章主要介绍了如何实现docker内部容器之间的端口访问,需要的朋友可以参考下
    2024-04-04
  • Docker容器启动失败的常见原因分析及解决方法

    Docker容器启动失败的常见原因分析及解决方法

    我们在开发部署的时候,用 Docker 打包环境,理论上是“我装好了你就能跑”,但理想很丰满,现实往往一 docker run 下去就翻车了,今天来盘点一下我实际工作中经常遇到的 Docker 容器启动失败的常见原因及解决方法,需要的朋友可以参考下
    2025-05-05
  • docker overlay2 文件夹比较大处理步骤

    docker overlay2 文件夹比较大处理步骤

    本文介绍了Docker默认存储驱动overlay2文件夹变得大时的清理方法,包括清理未使用的Docker对象、删除未使用的容器和镜像、清理日志文件和数据卷等步骤,通过这些步骤,可以有效释放磁盘空间并避免存储空间不足的问题,感兴趣的朋友跟随小编一起看看吧
    2025-03-03
  • Docker容器间通讯直接路由方式实现网络通讯

    Docker容器间通讯直接路由方式实现网络通讯

    今天小编就为大家分享一篇关于Docker容器间通讯直接路由方式实现网络通讯,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 查询Docker镜像DockerFile的方法步骤

    查询Docker镜像DockerFile的方法步骤

    本文主要介绍了查询Docker镜像DockerFile的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论