当前位置: 首页 > news >正文

30分钟快速搭建Mysql主从环境

拉取mysql镜像

docker pull mysql:5.7

dockerCompose yml 文件

version: '3.8' services: mysql-master: # 服务名称 image: mysql:5.7 # 镜像信息 container_name: mysql-master # 容器名称 environment: # 环境变量配置 MYSQL_ROOT_PASSWORD: root123 # root 密码 MYSQL_ROOT_HOST: '%' # 权限 volumes: # 容器卷 - ./msmysql/master/conf/my.cnf:/etc/mysql/my.cnf - ./msmysql/master/data:/var/lib/mysql ports: # 端口 - "3306:3306" command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: # 网络连接 - mysql-net mysql-slave1: image: mysql:5.7 container_name: mysql-slave1 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_ROOT_HOST: '%' volumes: - ./msmysql/slave1/conf/my.cnf:/etc/mysql/my.cnf - ./msmysql/slave1/data:/var/lib/mysql ports: - "3307:3306" command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - mysql-net mysql-slave2: image: mysql:5.7 container_name: mysql-slave2 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_ROOT_HOST: '%' volumes: - ./msmysql/slave2/conf/my.cnf:/etc/mysql/my.cnf - ./msmysql/slave2/data:/var/lib/mysql ports: - "3308:3306" command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - mysql-net # 自定义网络连接,连接方式为 bridge 方式。 host 方式等,这里选择 bridge 方式,为后续操作简化 # bridge 内的容器服务可以通过容器名访问,省去dns 解析. networks: mysql-net: driver: bridge

这里注意: 为什么使用自定义创建的网络连接 并使用bridge 方式。

docker compose 在进行排版时,如果使用brideg 并且服务不指明网络 。 dockerCompose 就会自动创建一个名称为 服务名-default 的网络。

容器卷

msmysql | |---master | |--conf | |---my.cnf | |--data | |---slave1 | |--conf | |---my.cnf | |--data | |---slave2 | |--conf | |---my.cnf | |--data

my.cnf配置

配置 主my.cnf
[mysqld] # 服务id 唯一标识不能重复 server-id=1 # 开启二进制日志,主从复制的数据文件 log_bin=mysql-bin # 需要同步的数据库名称, 这里不做添加 # binlog-do-db=xxxx # 设置binlog 格式 binlog_format=STATEMENT # 设置网络允许远程连接 bind-address=0.0.0.0
从库配置 my.cnf
[mysqld] #服务唯一表示 server-id=2 #从库开启日志 便于级联复制 log_bin=mysql-bin #读日志 relay-log=mysql-relay #允许远程连接 bind-address=0.0.0.0 [mysqld] #服务唯一表示 server-id=3 #从库开启日志 便于级联复制 log_bin=mysql-bin #读日志 relay-log=mysql-relay #允许远程连接 bind-address=0.0.0.0

启动服务配置

  1. 启动dockerCompose 排版文件
docker compose -f msmysql.yml up -d
  1. 进入主服务,并配置 主从账号和获取主服务信息
mysql -uroot -proot123

进入mysql 服务,并查看当前用户

use mysql ; select user, host from user;

这时候会发现,只有root用户是有所有权限 %
现在创建一个可以连接主从服务的用户

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl123';

查看 master的binlog日志和开始间距

show master status;

会看到如图显示

+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 405 | | | | +------------------+----------+--------------+------------------+-------------------+

file ,用于slave 服务读取主服务的开始文件,

position ,位置用于 slave 服务开始读取配置。

登录从服务器
docker exec -it /bin/bash #登录数据库 mysql -uroot -proot123; show slave status\G; #未启用时可看到 Slave_IO_Running: No Slave_SQL_Running: No
设置从库同步
change to master_host: Master的ip master_port:Master的端口号,因为用的是docker中的mysql,所以这里指的是宿主机映射到到mysql容器的端口 master_user:用于数据同步的用户 master_password:用于同步的用户的密码 master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值 master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值 master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 #连接数据库输入以下配置,其中FILE与POS为主服务器看到参数 CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='repl123', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=405, MASTER_CONNECT_RETRY=60; #启动同步功能 start slave

设置完成后,重启slave1,slave2 容器,并登录查看数据库状态

#查看slave配置信息 show slave status\G;

log_file, log_pos 都要与主库保持一致。

如果两个 slave 变成yes,证明启动成功。

测试

登录主数据库

#进入主数据库,新建数据库mytestcreate DATABASE mytest;#进入slave1数据库,查看数据库列表show databases;#可看到存在mytest表#进入slave2数据库可看到一样结果,证明主从配置生效
http://www.jsqmd.com/news/1292256/

相关文章:

  • 超越基础画框:Python实现专业级目标检测可视化方案
  • 应变式、电感式与电容式传感器:原理、选型与实战应用指南
  • 如何判断飞檐机构的技术实力?
  • 2026年有哪些值得推荐的游戏BI工具
  • 00-1-Web架构全景与linux基础知识总结
  • 字符串处理全解析:从基础操作到生产环境实战指南
  • 2026PDF转JPG工具最全教程!免费在线、电脑、手机方法手把手教 - 工具软件使用方法推荐
  • OpenAI 事件复盘:Agent 安全,至少评估五项能力
  • 图片压缩在线使用:理赔材料上传失败先过这张自检清单 - AI测评专家
  • 西西北家谱编修与印刷服务标准化白皮书(2026 版)| 五花马印务编制 - 品牌观察室
  • 字符串编程全解析:从基础操作到KMP算法与动态规划实战
  • 2026 年至今,九江评价高的工业园区沙盘直销厂家深度解析与优选指南,别再盲目跟风园区投资,它竟能让你的企业选址少花几十万还避大坑 - 行业鉴选官
  • Java垃圾回收机制原理与性能优化指南
  • 记一次 Windows 11 下 BAT 文件失效问题:用 PowerShell 包装器曲线救国
  • OpenCV形态学操作:从腐蚀膨胀到开闭运算的C++实战指南
  • C语言课程设计:用N-S图提升结构化编程与算法可视化能力
  • Fiddler Everywhere抓包实战:解密MP4与M3U8视频流下载
  • 万宁市防水补漏_2026海南东海岸热带滨海城市漏水维修流程攻略与五大正规团队推荐 - 雨婺虹房屋维修
  • 如何在Android上安全擦除SIM卡(完整指南)
  • VL53L1X激光测距模块在STM32平台的企业级架构设计与性能优化实践
  • STM32 ADC+DMA配置实战:CubeMX图形化实现多通道连续采集
  • 技术从业者的注意力管理:从算法意识到工程化实践
  • 2026 年更新:衢江比较好的热塑性弹性体回收平台怎么联系,别再当冤大头!这种废品卖的价居然比废铁高两倍多-展生源回收TPE热塑性弹性体 - 实业推荐官【官方】
  • 高可用微信消息队列设计:应对营销活动期间的流量暴增
  • IP查询的责任边界
  • 【AI自媒体矩阵搭建终极指南】:从0到1构建高变现力矩阵的7大核心模块与避坑清单
  • 2026年寄大件家具哪个物流便宜?家用家具寄件划算方式全攻略 - 快递物流资讯
  • 网盘直链下载助手终极指南:3步实现满速下载,告别客户端依赖
  • 读半导体简史11应用时代
  • 报名照片怎么改大小kb:后台上传慢时先分清三种卡口 - 办公小帮手