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

04_MySQL 通过 Docker 在同一个服务器上搭建主从集群(一主一从)

04_MySQL 通过 Docker 在同一个服务器上搭建主从集群(一主一从)


🧰 准备工作

1. 拉取 MySQL 镜像

bash复制编辑
docker pull mysql:8.0.26

2. 创建主从配置目录

bash复制编辑mkdir -p /root/mysql/master/conf
mkdir -p /root/mysql/master/data
mkdir -p /root/mysql/master/mysql-filesmkdir -p /root/mysql/slave/conf
mkdir -p /root/mysql/slave/data
mkdir -p /root/mysql/slave/mysql-files

3. 编写 docker-compose.yml 文件

yaml复制编辑version: '3.8'services:mysql-master:image: mysql:8.0.26container_name: mysql-masterrestart: alwaysports:- "3307:3306"environment:MYSQL_ROOT_PASSWORD: 123456volumes:- /root/mysql/master/conf/:/etc/mysql/- /root/mysql/master/mysql-files:/var/lib/mysql-files- master-data:/var/lib/mysqlnetworks:- mysql-netmysql-slave:image: mysql:8.0.26container_name: mysql-slaverestart: alwaysports:- "3308:3306"environment:MYSQL_ROOT_PASSWORD: 123456depends_on:- mysql-mastervolumes:- /root/mysql/slave/conf/:/etc/mysql/- /root/mysql/slave/mysql-files:/var/lib/mysql-files- slave-data:/var/lib/mysqlnetworks:- mysql-netvolumes:master-data:slave-data:networks:mysql-net:driver: bridge

4. 编写主从数据库配置文件

4.1 主库配置(放到 /root/mysql/master/conf/my.cnf
ini复制编辑[mysqld]
# 唯一的server_id
server-id=1# 开启二进制日志功能
log-bin=mysql-bin# 二进制日志缓存大小
binlog_cache_size=1M# 二进制日志过期天数
expire_logs_days=7# 二进制日志格式(mixed/statement/row)
binlog_format=STATEMENT# 忽略复制以下数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema# 只复制指定数据库
binlog-do-db=testdb# 允许 LOAD DATA / SELECT INTO OUTFILE 操作的目录(必须存在)
secure_file_priv=/var/lib/mysql-files
4.2 从库配置(放到 /root/mysql/slave/conf/my.cnf
ini复制编辑[mysqld]
# 唯一的server_id,不能和主库相同
server-id=2# 中继日志文件名
relay-log=relay-log# 设置只读,防止手动写入破坏复制
read_only=1# 允许 LOAD DATA / SELECT INTO OUTFILE 操作的目录(必须存在)
secure_file_priv=/var/lib/mysql-files

5. 启动容器

bash复制编辑
docker compose up -d

6. 容器内操作及权限配置

6.1 进入主库容器及 MySQL
bash复制编辑docker exec -it mysql-master bash
mysql -uroot -p123456
  • 查看 server_id
sql复制编辑
SHOW VARIABLES LIKE 'server_id';
  • 授权 root 用户远程登录权限:
sql复制编辑GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

6.2 进入从库容器及 MySQL
bash复制编辑docker exec -it mysql-slave bash
mysql -uroot -p123456
  • 同样授权 root 用户远程登录权限:
sql复制编辑GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

7. 主从复制配置

7.1 主库授权复制账户
bash复制编辑docker exec -it mysql-master bash
mysql -uroot -p123456
sql复制编辑-- 创建复制用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';-- 授权复制权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';FLUSH PRIVILEGES;
7.2 查询主库状态,记录 FilePosition
sql复制编辑
SHOW MASTER STATUS;

示例输出:

FilePosition
mysql-bin.000004156

7.3 在从库配置主库信息
bash复制编辑docker exec -it mysql-slave bash
mysql -uroot -p123456
sql复制编辑CHANGE MASTER TO MASTER_HOST='172.17.180.75',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=156;

注意:

如果遇到错误,先执行:

sql复制编辑STOP SLAVE;
RESET SLAVE;

然后重新执行 CHANGE MASTER TO 命令。


7.4 启动从库复制线程
sql复制编辑
START SLAVE;
7.5 查看从库复制状态
sql复制编辑
SHOW SLAVE STATUS\G;

确认 Slave_IO_RunningSlave_SQL_Running 都为 Yes


8. 连接测试

  • 使用 Navicat 或其他数据库客户端分别连接主库(端口 3307)和从库(端口 3308)测试。

9. 测试主从复制效果

  • 在主库创建数据库和表:
sql复制编辑CREATE DATABASE testdb;
USE testdb;CREATE TABLE test_table (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50)
);INSERT INTO test_table (name) VALUES ('test1'), ('test2');
  • 查看从库是否同步了 testdb 数据库和数据。
http://www.lryc.cn/news/578120.html

相关文章:

  • Junit_注解_枚举
  • 【区块链安全】代理合约中的漏洞
  • 【C++指南】C++ list容器完全解读(三):list迭代器的实现与优化
  • 【软考高项论文】论信息系统项目的成本管理
  • 渗透测试的重要性及最佳实践
  • 对selenium进行浏览器和驱动进行配置Windows | Linux
  • 调试W5500(作为服务器)
  • 淘宝API接口在数据分析中的应用
  • 非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上
  • 如何解决 Rider 编译输出乱码
  • leetcode:693. 交替位二进制数(数学相关算法题,python3解法)
  • Deepoc 大模型:无人机行业的智能变革引擎
  • Linux进程单例模式运行
  • 【AI News | 20250630】每日AI进展
  • 华为云Flexus+DeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程
  • 本地部署kafka4.0
  • Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
  • 打卡day58
  • 逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
  • 设计模式(六)
  • 深入拆解AOP的Java技术栈:注解、反射与设计模式的完美融合
  • [springboot系列] 探秘JUnit 5: Java单元测试利器
  • xilinx axi datamover IP使用demo
  • 网络协议之网络探测协议ICMP及其应用ping,traceroute
  • Prompt 精通之路(七)- 你的终极 AI 宝典:Prompt 精通之路系列汇总
  • python+uniapp基于微信小程序蜀味道江湖餐饮管理系统nodejs+java
  • Java开发新变革!飞算JavaAI深度剖析与实战指南
  • 计算机是如何⼯作的
  • 【Java EE初阶】计算机是如何⼯作的
  • Android 中 使用 ProgressBar 实现进度显示