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

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


🧰 准备工作

1. 拉取 MySQL 镜像

docker pull mysql:8.0.26

2. 创建主从配置目录

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 文件

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- /root/mysql/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- /root/mysql/slave/data:/var/lib/mysqlnetworks:- mysql-netnetworks:mysql-net:driver: bridge

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

4.1 主库配置(放到 /root/mysql/master/conf/my.cnf
[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
[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. 启动容器

docker compose up -d

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

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

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

7. 主从复制配置

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

示例输出:

FilePosition
mysql-bin.000004156

7.3 在从库配置主库信息
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;

注意:

如果遇到错误,先执行:

STOP SLAVE;
RESET SLAVE;

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


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

确认 Slave_IO_RunningSlave_SQL_Running 都为 Yes


8. 连接测试

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

9. 测试主从复制效果

  • 在主库创建数据库和表:
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.pswp.cn/news/912493.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随笔 | 写在六月的最后一天,也写在2025年上半年的最后一天

文章目录 前言.出差.耐心.回归.结语. 前言 又要以最经典的句式开场,转眼间,2025年已经过去了一半。五六月飞逝,但仔细回望,也留下了很多美好的瞬间。 记得之前读过一句话,人们总是高估一年可以做的事情,也…

Prompt Enginering

1.Prompt Engineering 提示词工程 Prompt 给人工智能模型输入文本或指令,这些指令引导模型生成特定的输出 Prompt Engineering:指在使用生成式人工智能模型(比如gpt-4)时,设计优化输入文本(prompt)的过程,以…

CppCon 2018 学习:A Semi Compile/Run-time Map with (Nearly) Zero Overhead Looup

介绍一个 C 和 Java 之间桥接(Bridge)系统的示例代码,它说明了如何在 C 中调用 Java 类(如 java.io.InputStream)的方法。下面是详细解读: 一、内容来源说明 《C ↔ Java Bridge》 目的:演示…

原子级制造革命:双原子镧催化剂登顶Angew,焦耳超快加热技术深度解析

一、突破性成果:双原子镧催化剂的三大里程碑 吉林大学的牛效迪教授,王振旅教授、管景奇教授在《Angewandte Chemie》发表创新研究,通过焦耳超快加热技术成功制备氮配位双原子镧催化剂(La₂-NG),实现三大突…

unix:///var/run/supervisor/supervisor.sock no such file

在 Linux 系统中,如果你遇到 /var/run/supervisor/supervisor.sock 文件不存在的问题,这通常意味着 Supervisor 服务没有正确运行或者其配置文件没有正确设置来创建这个 socket 文件。下面是一些解决这个问题的步骤: 检查 Supervisor 是否正…

Python 编辑器:Geany,不是内部或外部命令,系统找不到指定路径

目录 1 找到设置选项2 开始设置2.1 complie2.2 execute 3 欢迎纠错4 免费爬虫------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内…

Docker安装Mysql、配置文件挂载、修改Mysql编码

1.下载mysql镜像 docker pull mysql:5.72.查看镜像 docker images3.启动mysql镜像 # 1.设置端口映射3306:3306、 # 2.设置文件挂载 # 3.设置mysql密码为“root” sudo docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/mysql-files:/var/lib/mysql-files \ -v /mydata…

vueflow截图功能,线会有黑色背景

vueflow截图功能,线会有黑色背景,解决办法,画线时style里设置fill:‘none’ // 线的默认颜色 const edgesStyle {style: {fill:none,stroke: #6366f1,strokeWidth: 1, // 设置线宽 },markerEnd: {type: MarkerType.ArrowClosed,// color: #6366f1,// w…

16014.rtsp推流服务器

1 ubuntu20.04搭建rtsp服务器,easyplayer进行拉流 在images/stream1 文件下存储了5张图片,作为咱们得原料,运行rtsp服务器,即可。#include <iostream> #include <vector> #include <chrono>

常用测试脚本

Linux 系统 测试网络带宽及网卡吞吐量 shell 脚本 #!/bin/bash # 定义测试时间 time10 # 定义网卡名称 niceth0 # 测试网卡的带宽 echo 网卡带宽&#xff1a;time dd if/dev/zero bs1M count1024 | nc -w $time localhost 9000 > /dev/null # 测试网卡的吞吐量 echo 网卡吞…

华为云 Flexus+DeepSeek 征文|华为云 Flexus 云服务 Dify-LLM 平台深度部署指南:从基础搭建到高可用实践

华为云 FlexusDeepSeek 征文&#xff5c;华为云 Flexus 云服务 Dify-LLM 平台深度部署指南&#xff1a;从基础搭建到高可用实践 引言&#xff1a;正文&#xff1a;一、前期准备1.1 账号注册与充值1.2 控制台操作熟悉 二、一键部署 Dify-LLM 平台2.1 云服务器单机部署2.1.1 访问…

Kafka 核心机制面试题--自问自答

基础篇 Q1: Kafka为什么能这么快&#xff1f; A: Kafka的高性能主要来自三大核心技术&#xff1a; 零拷贝(Zero-Copy)&#xff1a;通过sendfile()系统调用&#xff0c;数据直接从磁盘到网卡&#xff0c;避免了内核态和用户态之间的多次拷贝页缓存(Page Cache)&#xff1a;消…

Git远程仓库迁移与分支关联技术分享

背景 开发中常需切换代码托管平台&#xff08;如Coding → 自建GitLab&#xff09;。以下通过实际命令演示如何安全迁移仓库并解决分支关联问题。 操作步骤及原理分析 1. 查看当前远程仓库 bash git remote -v 输出说明&#xff1a; text origin https://e.coding.net…

HttpURLConnection使用及优化

文章目录 简介使用示例GET请求POST请求 HttpURLConnection优化1. 设置合适的超时时间2. 指定字符编码3. 正确处理响应编码4. 使用压缩传输&#xff08;如果适用&#xff09;5. 关闭连接释放资源6. 启用持久连接&#xff08;Keep-Alive&#xff09;&#xff0c;减少握手开销 简介…

【Springai】项目实战进度和规划

项目概述 新开一个用于学习实践springai的项目&#xff0c;springai-novel是一个基于前后端分离的现代化AI实践应用 前端技术栈 Vue 3 TypeScriptVite Naive UI vicons/ionicons5 后端技术栈 JDK17Spring AI MySQL milvus ollama 已实现功能 (✅) ✅ springaimysql后…

知微传感Lkam系列线扫轮廓仪SDK例程篇:SDK安装及VS工程配置

写在前面 本人从事机器视觉细分的3D相机行业。编写此系列文章主要目的有&#xff1a; 1、便利他人应用3D相机&#xff0c;本系列文章包含公司所出售相机的SDK的使用例程及详细注释&#xff1b;2、促进行业发展及交流。 欢迎与我深入交流&#xff1a;微信号&#xff1a;liu_zhi…

机器学习4——参数估计之贝叶斯估计

贝叶斯估计 问题建模&#xff1a; 后验概率公式&#xff1a; P ( ω i ∣ x , D ) P ( x ∣ ω i , D i ) P ( ω i ) ∑ j 1 c P ( x ∣ ω j , D j ) P ( ω j ) P\left(\omega_i \mid \mathbf{x}, \mathcal{D}\right)\frac{P\left(\mathbf{x} \mid \omega_i, \mathcal{D…

【C++】命令模式

目录 一、模式核心概念与结构二、C 实现示例&#xff1a;遥控器与家电控制三、命令模式的关键特性四、应用场景五、命令模式与其他设计模式的关系六、C 标准库中的命令模式应用七、优缺点分析八、实战案例&#xff1a;数据库事务命令九、实现注意事项如果这篇文章对你有所帮助&…

基于librdkafka开发的C++客户端,生产者生产发送数据失败问题处理

我们的项目使用了开源的librdkafka库&#xff0c;实现向kafka服务器生产发送数据的功能。使用的librdkafka的版本是1.9.0。 作为客户端程序&#xff0c;在开发时和客户协商确认后&#xff0c;支持了SASL_PLAINTEXT认证。以下概念解释引用自通义千问AI SASL (Simple Authentic…

OpenGL之yaw、pitch、fov 和 lookAt

在 3D 图形学中&#xff0c;yaw、pitch、fov 和 lookAt 都是控制摄像机&#xff08;Camera&#xff09;行为的关键参数&#xff0c;但它们的 作用层级 和 使用场景 不同。 1. yaw、pitch、fov 的作用 (1) yaw&#xff08;偏航角&#xff09; 作用&#xff1a;控制摄像机 左右…