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 run的--rm选项使用说明

    docker run的--rm选项使用说明

    这篇文章主要介绍了docker run的--rm选项使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker部署安装jenkins的实现步骤

    docker部署安装jenkins的实现步骤

    本文主要介绍了docker部署安装jenkins的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Docker镜像远程(离线)迁移实践

    Docker镜像远程(离线)迁移实践

    本文介绍了如何将本地服务器的指定镜像打包为tar格式的文件并通过scp命令将其传输到另一台服务器,scp命令依赖于ssh协议,具有加密传输、跨主机通用和易用性等特点,通过编写bash脚本,可以简化传输过程,并且可以避免每次传输时手动输入远程服务器密码
    2026-03-03
  • 基于Docker部署GitLab环境搭建的方法步骤

    基于Docker部署GitLab环境搭建的方法步骤

    这篇文章主要介绍了基于Docker部署GitLab环境搭建的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • CentOS版本问题安装Docker报错的解决方案

    CentOS版本问题安装Docker报错的解决方案

    今天小编就为大家分享一篇关于CentOS版本问题安装Docker报错的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 如何解决docker-compose网段路由冲突,docker-compose自定义网络

    如何解决docker-compose网段路由冲突,docker-compose自定义网络

    这篇文章主要介绍了如何解决docker-compose网段路由冲突,docker-compose自定义网络问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 卸载Docker时保留本地镜像和容器方式

    卸载Docker时保留本地镜像和容器方式

    文章讲述了如何在Linux、Windows和Mac系统中备份和恢复Docker镜像和容器,备份过程包括列出本地镜像、保存镜像和导出容器,恢复过程则涉及卸载Docker、重新安装Docker以及使用dockerload和dockerimport命令恢复镜像和容器
    2024-11-11
  • Docker 制作镜像Dockerfile和commit操作

    Docker 制作镜像Dockerfile和commit操作

    这篇文章主要介绍了Docker 制作镜像Dockerfile和commit操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker创建镜像、怎么修改、上传镜像等详细介绍

    Docker创建镜像、怎么修改、上传镜像等详细介绍

    这篇文章主要介绍了Docker创建镜像、怎么修改、上传镜像等详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • Ubuntu使用Docker部署Redis并实现远程访问本地数据库全过程

    Ubuntu使用Docker部署Redis并实现远程访问本地数据库全过程

    这篇文章主要给大家介绍了关于Ubuntu使用Docker部署Redis并实现远程访问本地数据库的相关资料,Redis远程连接是指通过网络连接到Redis服务器,从而可以在不同的机器问和操作Redis数据库,需要的朋友可以参考下
    2024-03-03

最新评论