当前位置: 首页 > 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.lqws.cn/news/581113.html

相关文章:

  • MetaGPT: 多智能体框架(还没装好...)
  • 大数据系统架构实践(三):Hbase集群部署
  • 机器学习06 集成学习
  • R1-Searcher使用强化学习增强语言模型解决问题的搜索能力
  • 手机屏暗点缺陷修复及相关液晶线路激光修复原理
  • 超大js文件多层级引用缓存在网络较差的时候无法调用使用问题
  • 设计模式-单例模式
  • FPGA矩阵算法实现
  • PHP安装使用教程
  • 如何在Linux服务器中配置Oracle数据库
  • 大数据(4)-spark
  • vue3 + luckysheet 实现在线编辑Excel
  • stm32 freertos下基于 hal库的模拟I2C驱动实现
  • Python 安装使用教程
  • 【知识】RPC和gRPC
  • 实现ModbusTCP转Profinet网关协议转换功能的网关设备
  • Install Ubuntu 24.04 System
  • reactor-test
  • 如何在 iOS 上线前做好安全防护?IPA 混淆与逆向防护实践详解
  • 什么是IOC(控制反转)?—— 用生活实例解读Spring核心概念
  • 【硬核数学】2.7 理论与现实的鸿沟:深度学习的数值稳定性挑战《从零构建机器学习、深度学习到LLM的数学认知》
  • 使用OpenSSL接口读取pem编码格式文件中的证书
  • Java外观模式实现方式与测试方法
  • 链表题解——设计链表【LeetCode】
  • 大模型-分布式推理简介
  • linux 操作docker的基本命令docker仓库
  • ubuntu下免sudo执行docker
  • 自动驾驶:特斯拉 Model Y全自动驾驶交付的技术原理
  • 笨方法学python -练习6
  • 设计模式精讲 Day 19:观察者模式(Observer Pattern)