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

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;

注:记下FilePosition的值,从服务器需要配置。

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_RunningSlave_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…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...