Docker-Compose实现MySQL之主从复制
1. 主服务器(IP:192.168.186.77)
1.1 docker-compose.yml
services:mysql-master:image: mysql:latest # 使用最新版本的 MySQL 镜像container_name: mysql-master # 容器的名称environment:MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码MYSQL_DATABASE: masterdb # 初始化时创建的数据库MYSQL_USER: master # 初始化时创建的用户MYSQL_PASSWORD: 123456 # 初始化时创建的用户密码ports:- "3306:3306" # 端口映射,将容器内的 3306 端口映射到主机的 3306 端口volumes:- mysql-master-data:/var/lib/mysql # 数据卷映射,用于数据持久化command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW # MySQL 的启动命令,配置二进制日志和服务器 IDvolumes:mysql-master-data: # 定义数据卷,用于存储 MySQL 数据文件,保证数据库数据的持久性
1.2. 启动命令
docker-compose up -d
1.3 测试连接

注:可以使用初始化用户进行测试连接,本文为了方便演示直接连接root用户。
2. 从服务器(IP:192.168.186.216)
2.1 docker-compose.yml
services:mysql-slave:image: mysql:latest # 使用最新版本的 MySQL 镜像container_name: mysql-slave # 容器的名称environment:MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码MYSQL_DATABASE: slavedb # 初始化时创建的数据库MYSQL_USER: slave # 初始化时创建的用户MYSQL_PASSWORD: 123456 # 初始化时创建的用户密码ports:- "3306:3306" # 端口映射,将容器内的 3306 端口映射到主机的 3306 端口volumes:- mysql-slave-data:/var/lib/mysql # 数据卷映射,用于数据持久化command: --server-id=2 --log-bin=mysql-bin --binlog-format=ROW # MySQL 的启动命令,配置二进制日志和服务器 IDvolumes:mysql-slave-data: # 定义数据卷,用于存储 MySQL 数据文件,保证数据库数据的持久性
2.2 启动命令
docker-compose up -d
2.3 测试连接

3. 配置主从复制
3.1 在主服务器上,为从服务器创建一个具有复制权限的用户
CREATE USER 'master_slave'@'%' IDENTIFIED BY '123456' REQUIRE SSL;
GRANT REPLICATION SLAVE ON *.* TO 'master_slave'@'%';
FLUSH PRIVILEGES;
运行结果:
> CREATE USER 'master_slave'@'%' IDENTIFIED BY '123456' REQUIRE SSL
[2024-07-23 17:34:23] 在 20 ms 内完成
> GRANT REPLICATION SLAVE ON *.* TO 'master_slave'@'%'
[2024-07-23 17:34:23] 在 26 ms 内完成
> FLUSH PRIVILEGES
[2024-07-23 17:34:23] 在 21 ms 内完成
3.2 获取主服务器的二进制日志位置信息
SHOW MASTER STATUS;

注:记下File和Position的值,从服务器需要配置。
3.3 在从服务器上,配置复制指向主服务器
CHANGE MASTER TOMASTER_HOST ='192.168.186.77', # 主服务器的 IP 地址MASTER_USER ='master_slave', # 主服务器上配置的复制用户MASTER_PASSWORD ='123456', # 复制用户的密码MASTER_LOG_FILE ='mysql-bin.000004', # 主服务器的日志文件名MASTER_LOG_POS =4494, # 日志文件的位置MASTER_SSL=1;
运行结果:
> CHANGE MASTER TO
MASTER_HOST ='192.168.186.77', # 主服务器的 IP 地址
MASTER_USER ='master_slave', # 主服务器上配置的复制用户
MASTER_PASSWORD ='123456', # 复制用户的密码
MASTER_LOG_FILE ='mysql-bin.000004', # 主服务器的日志文件名
MASTER_LOG_POS =4494, # 日志文件的位置
MASTER_SSL=1
[2024-07-23 17:38:19] [HY000][1287] 'CHANGE MASTER' is deprecated and will be removed in a future release. Please use CHANGE REPLICATION SOURCE instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_HOST' is deprecated and will be removed in a future release. Please use SOURCE_HOST instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_USER' is deprecated and will be removed in a future release. Please use SOURCE_USER instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_PASSWORD' is deprecated and will be removed in a future release. Please use SOURCE_PASSWORD instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_LOG_FILE' is deprecated and will be removed in a future release. Please use SOURCE_LOG_FILE instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_LOG_POS' is deprecated and will be removed in a future release. Please use SOURCE_LOG_POS instead
[2024-07-23 17:38:19] [HY000][1287] 'MASTER_SSL' is deprecated and will be removed in a future release. Please use SOURCE_SSL instead
[2024-07-23 17:38:19] [HY000][1760] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
[2024-07-23 17:38:19] 在 73 ms 内完成
3.4 启动从服务器上的复制过程
START SLAVE;
运行结果:
> START SLAVE
[2024-07-23 17:39:28] [HY000][1287] 'START SLAVE' is deprecated and will be removed in a future release. Please use START REPLICA instead
[2024-07-23 17:39:28] 在 71 ms 内完成
3.5 检查从服务器的复制状态
SHOW SLAVE STATUS;

注:查看Slave_IO_Running和Slave_SQL_Running都应为Yes,说明配置成功。
4. 进行验证
4.1 主服务器执行语句
-- 创建数据库
CREATE DATABASE IF NOT EXISTS replication_test;-- 使用新创建的数据库
USE replication_test;-- 创建表
CREATE TABLE replication_table
(id INT AUTO_INCREMENT PRIMARY KEY,message VARCHAR(255) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 插入数据
INSERT INTO replication_table (message)
VALUES ('你好,这是一条测试消息。');
运行结果:
> CREATE DATABASE IF NOT EXISTS replication_test
[2024-07-23 17:48:19] 33 ms 中有 1 行受到影响
> USE replication_test
[2024-07-23 17:48:19] 在 6 ms 内完成
replication_test> CREATE TABLE replication_table
(
id INT AUTO_INCREMENT PRIMARY KEY,
message VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
[2024-07-23 17:48:19] 在 69 ms 内完成
replication_test> INSERT INTO replication_table (message)
VALUES ('你好,这是一条测试消息。')
[2024-07-23 17:48:19] 53 ms 中有 1 行受到影响
4.2 从服务器执行语句
-- 使用数据库
USE replication_test;-- 查询表以验证复制
SELECT * FROM replication_table;
5. 总结
基于IDEA和Docker-Compose简化操作过程,仅供学习参考,欢迎评论交流。
相关文章:
Docker-Compose实现MySQL之主从复制
1. 主服务器(IP:192.168.186.77) 1.1 docker-compose.yml services:mysql-master:image: mysql:latest # 使用最新版本的 MySQL 镜像container_name: mysql-master # 容器的名称environment:MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码MYSQL_DATABASE: masterd…...
jetson显卡没有加速,而是在用cpu推理?
jetson的库,特别是使用显卡的库,大多需要单独安装 大概率是重装了pytorch,可以使用jetson官网的pytorch! 下面是官网的链接 PyTorch for Jetson - Announcements - NVIDIA Developer Forums 安装完成之后先使用命令查看是否安…...
Linux下如何安装配置Fail2ban防护工具
Fail2ban是一款在Linux服务器上用于保护系统免受恶意攻击的防护工具。它通过监视系统日志,检测到多次失败的登录尝试或其他恶意行为后,会自动将攻击源的IP地址加入防火墙的黑名单,从而阻止攻击者进一步访问服务器。本文将介绍如何在Linux系统…...
js的深浅拷贝
深浅拷贝是编程中对数据复制的两种不同方式,它们在处理对象和数组等复合数据结构时尤为重要。下面将详细解释这两种拷贝方式。 浅拷贝(Shallow Copy) 浅拷贝创建了原始对象的一个新实例,但这个新实例的属性只是原始对象属性的引…...
实验八: 彩色图像处理
目录 一、实验目的 二、实验原理 1. 常见彩色图像格式 2. 伪彩色图像 3. 彩色图像滤波 三、实验内容 四、源程序和结果 (1) 主程序(matlab (2) 函数FalseRgbTransf (3) 函数hsi2rgb (4) 函数rgb2hsi (5) 函数GrayscaleFilter (6) 函数RgbFilter 五、结果分析 1. …...
Python酷库之旅-第三方库Pandas(048)
目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…...
springboot爱宠屋宠物商店管理系统-计算机毕业设计源码52726
目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…...
自训练和增量训练word2vec模型
1、自己准备训练语料文件 根据自己的业务场景准备训练数据,比如用户在商城上的同购行为序列或同浏览行为序列。 我们希望通过自己训练业务相关的语料word2vec模型来获得词嵌入、词相关性查询等。 1.1 准备语料库文件 # 示例:准备自己的一个大规模的语…...
华三路由器开启web访问
配置路由器: # 配置Web用户名为admin,认证密码为admin,服务类型为http,用户角色为network-admin。 [Sysname] local-user admin [Sysname-luser-manage-admin] service-type http [Sysname-luser-manage-admin] authorization…...
C++软件开发值得推荐的十大高效软件分析工具
目录 1、概述 2、高效软件工具介绍 2.1、窗口查看工具SPY 2.2、Dependency Walker 2.3、剪切板查看工具Clipbrd 2.4、GDI对象查看工具GDIView 2.5、Process Explorer 2.6、Prcoess Monitor 2.7、API Monitor 2.8、调试器Windbg 2.9、反汇编工具IDA 2.10、抓包工具…...
vue2老项目中node-sass更换dart-sass
更换原因:node-sass经常会出现node版本问题,就很麻烦 卸载项目中的node-sass sass-loader npm uninstall sass-loader sass 安装dart-sas sass-loader 推荐安装sass1.26.2 sass-loader7.3.1 npm install sass-loader7.3.1 sass1.26.2 从新配置vue.…...
源/目的检查开启导致虚拟IP背后的LVS无法正常访问
情况描述 近期发现48网段主机无法访问8.83这个VIP(虚拟IP),环境是 8.83 绑定了两个LVS实例,然后LVS实例转发到后端的nginx 静态资源;整个流程是,客户端发起对VIP的请求,LVS将请求转发到后端实例…...
类和对象(四)
构造函数中的初始化列表 之前在实现构造函数时,主要是在函数体内进行赋值,而构造函数还有另一种初始化方式,通过初始化列表进行初始化。 初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,…...
<PLC><HMI><汇川>在汇川HMI画面中,如何为UI设置全局样式?
前言 汇川的HMI软件是使用了Qt来编写的,因此在汇川的HMI程序编写过程,是支持使用qt的样式来自定义部件样式的,即qss格式。 概述 汇川的软件本身提供三个系统的style样式,我们可以直接使用,但是,如果系统提供的样式不符合你的需求,那么你可以对其进行修改,或者自己新建…...
在Git项目中添加并应用“.gitignore”文件
在Git项目中添加并应用.gitignore文件 创建或修改.gitignore文件: 在项目的根目录下创建一个名为.gitignore的文件。如果已经有此文件,可以直接修改。 在文件中添加您希望Git忽略的文件和目录。例如: # 忽略所有的log文件 *.log# 忽略所有的…...
LeetCode Hot100 搜索二维矩阵
给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…...
iOS中的KVO(Key-Value Observing)详解
iOS中的KVO(Key-Value Observing)详解 一、KVO概述 KVO(Key-Value Observing),即键值观察/监听,是苹果提供的一套事件通知机制。它允许一个对象(观察者)观察/监听另一个对象&#…...
算法 —— 暴力枚举
目录 循环枚举 P2241 统计方形(数据加强版) P2089 烤鸡 P1618 三连击(升级版) 子集枚举 P1036 [NOIP2002 普及组] 选数 P1157 组合的输出 排列枚举 P1706 全排列问题 P1088 [NOIP2004 普及组] 火星人 循环枚举 顾名思…...
构造+有序集合,CF 1023D - Array Restoration
一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1023D - Array Restoration 二、解题报告 1、思路分析 先考虑合法性检查: 对于数字x,其最左位置和最右位置 之间如果存在数字比x小,则非法 由于q次操作,第q…...
Scrapy 爬取旅游景点相关数据(四)
本节内容主要为: (1)创建数据库 (2)创建数据库表 (3)爬取数据进MYSQL库 1 新建数据库 使用MYSQL数据库存储数据,创建一个新的数据库 create database scrapy_demo;2 新建数据表 CR…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
