09-MySQL主从复制
01-主从复制原理
MySQL主从复制是一种用于实现数据备份、读写分离和扩展性的技术。它基于二进制日志(Binary Log)来将主数据库上的更改操作同步到一个或多个从数据库。
MySQL主从复制的基本原理如下:
- 主服务器(Master)记录二进制日志:主服务器记录所有对数据库的修改操作,包括更新、插入和删除等,并将这些操作记录在二进制日志中。
- 从服务器(Slave)连接到主服务器:从服务器通过配置文件指定主服务器的地址和认证信息,然后与主服务器建立连接。
- 从服务器请求复制数据:从服务器向主服务器发送复制请求,请求成为主服务器的一个从服务器。
- 主服务器接受复制请求:主服务器接受从服务器的复制请求,并将相关的复制信息记录到主服务器的二进制日志中。
- 从服务器获取并应用复制数据:从服务器连接到主服务器后,开始从主服务器的二进制日志中获取复制数据,并将这些数据应用到自己的数据库中,实现数据的同步。
- 周期性地重复复制过程:从服务器会周期性地检查主服务器的二进制日志,获取新的复制数据并应用到自己的数据库中,以保持与主服务器的数据同步。
主从复制可以实现以下功能:
- 数据备份和恢复:通过主从复制,从服务器作为备份,可以随时恢复到主服务器的数据状态。
- 读写分离:主服务器负责处理写操作,从服务器负责处理读操作,从而分担了主服务器的负载。
- 高可用性:如果主服务器发生故障,可以快速切换到从服务器,保证系统的高可用性。
02-主从复制实战
2-1 主服务器设置
主服务容器的部署工作大体分为以下 5 步 :
- 新建主服务器容器实例 3307
- 进入
/root/mysql/conf目录下新建my.cnf - 修改完配置重启主容器实例,进入主容器
- 主容器实例内创建数据同步用户
首先依旧得部署数据卷,具体流程工作如下:
mkdir -p /root/mysql/conf
mkdir -p /root/mysql/log
mkdir -p /root/mysql/data
docker run -d -p 3307:3306 --privileged=true -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=8888 --name mysql mysql:5.7
然后在/root/mysql/conf下编辑文件my.cnf,将如下内容写入后重启主容器
[mysqld]
## 设置serverid,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能
log-bin=mall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间按,默认为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免从slave端复制中断
## 1062错误是指一些主键重复,1032错误是因为主从数据库不一致
slave_skip_errors=1062
然后我们需要在主容器内创建数据同步用户,创作用户代码如下:
#首先链接mysql服务器
mysql -uroot -p
# 代码将创建一个名为replication_user的用户,并授予其在所有数据库和表上进行复制操作的权限。
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
# 执行以上SQL语句后,刷新MySQL权限以使更改生效:
FLUSH PRIVILEGES;
- 将password替换为实际的密码。建议使用强密码来保护用户账号。
- '%'表示该用户可以从任意主机连接到MySQL服务器。如果您只希望特定IP地址或主机名可以连接,请相应地修改连接限制。
2-3 从服务器设置
从服务容器的部署工作大体分为以下 5 步 :
- 新建从服务器容器实例 3307
- 进入
/root/mysql-salve/conf目录下新建my.cnf - 修改完配置重启从容器实例,进入从容器
- 在主数据库中查看主从数据同步状态
首先依旧得部署数据卷,具体流程工作如下:
mkdir -p /root/mysql-slave/cnf
mkdir -p /root/mysql-slave/log
mkdir -p /root/mysql-slave/data
docker run -d -p 3308:3306 --privileged=true -v /root/mysql-slave/log:/var/log/mysql -v /root/mysql-slave/data:/var/lib/mysql -v /root/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=8888 --name mysql-2 mysql:5.7
然后在/root/mysql-slave/conf下编辑文件my.cnf,将如下内容写入后重启从 容器
[mysqld]
## 设置serverid,同一局域网中需要唯一,主机101,从机202
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能
log-bin=mall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间按,默认为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免从slave端复制中断
## 1062错误是指一些主键重复,1032错误是因为主从数据库不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave讲复制时间写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super用户权限除外)
read_only=1
然后我们可以在主数据库中查看目前的主从同步状态:

继而进入mysql-slave容器中,开始在从数据库中配置主从复制。
CHANGE MASTER TO MASTER_HOST='<主服务器IP地址>',MASTER_USER='<主服务器复制用户>',MASTER_PASSWORD='<主服务器复制用户密码>',MASTER_PORT=<主服务器端口>,MASTER_LOG_FILE='<主服务器二进制日志文件>',MASTER_LOG_POS=<主服务器日志位置>;
实际操作中需要注意更多的东西,比如我的实际操作内容是:
CHANGE MASTER TO MASTER_HOST='192.168.254.128',MASTER_USER='slave',MASTER_PASSWORD='king1977',MASTER_PORT=3307,MASTER_LOG_FILE='mall-mysgl-bin.000001',MASTER_LOG_POS=749,MASTER_CONNECT_RETRY=30;
然后我们需要在从数据中查看主从同步状态:**show slave status \G;**,此时可以看到主从状态并未开启,我们需要开启主从同步状态。

在从数据库中开启主从数据同步命令如下:
start slave;
# 然后重新检查主从同步状态,如果两个状态未同时为YES,可以执行以下内容
# 在备库执行
stop slave;
reset slave;
start slave;
03-主从复制测试
主服务器上创建新的数据库和数据表,输入内容如下:
create database db_01;
use db_01;
crate table tb_01(id int,name varchar(20));
此时主服务器和从服务器数据库内容如下:
主服务器数据库

从服务器数据库

至此一主一从的主从复制顺利完成,在后续的学习实战中,我想要实现一主多从的自动化部署,这点后续可以作为学习的重点。
相关文章:
09-MySQL主从复制
01-主从复制原理 MySQL主从复制是一种用于实现数据备份、读写分离和扩展性的技术。它基于二进制日志(Binary Log)来将主数据库上的更改操作同步到一个或多个从数据库。 MySQL主从复制的基本原理如下: 主服务器(Master࿰…...
virtualBox虚拟机局域网访问配置
在VirtualBox中,桥接网络是一种网络连接类型,它允许虚拟机连接到物理网络上的路由器或交换机,在物理网络上获得独立的网络地址和访问权限。 一、设置VirtualBox桥接网络的步骤: 打开VirtualBox软件,并选择你想要配置…...
IDEA高效编程快捷键
IDEA高效编程快捷键 for循环快捷键 快速生成for循环 foriTABfor (int i 0; i < ; i) {}在for循环中使用索引 iterTABfor (String s : list) {}在for循环中进行if条件判断 ifnTABif (list null) {} soutTAB快捷键 System.out.println();psfEnter快捷键 p…...
nginx实现vue和后端的双机负载
nginx配置文件,项目是前后端分离的,前端vue,后端springboot 前端使用nginx实现双机负载,前端的访问端口是95280,后端2个服务实例的端口分部为9098,9099 nginx.conf的配置文件 #user root; worker_processes 1;#err…...
ARMday03(寄存器读写、栈、程序状态寄存器、软中断和异常、混合编程)
单寄存器内存读写指令 将一个寄存器中的数值写入到内存,或者从内存中读取数据放在某一个指定寄存器中 指令码和功能 1.向内存中写: str{条件码} 目标寄存器,[目标地址]:将目标寄存器的4字节数值写入到目标地址为首地址的空间中 strh{条件码…...
Excel中功能区的存放位置很灵活,可以根据需要隐藏或显示
在这个简短的教程中,你将找到5种快速简单的方法来恢复Excel功能区,以防丢失,并学习如何隐藏功能区,为工作表腾出更多空间。 功能区是Excel中所有操作的中心点,也是大多数可用功能和命令所在的区域。你觉得功能区占用了你太多的屏幕空间吗?没问题,只需单击鼠标,它就被隐…...
HelloGitHub 社区动态,开启新的篇章!
今天这篇文章是 HelloGitHub 社区动态的第一篇文章,所以我想多说两句,聊聊为啥开启这个系列。 我是 2016 年创建的 HelloGitHub,它从最初的一份分享开源项目的月刊,现如今已经成长为 7w Star 的开源项目、1w 用户的开源社区、全网…...
【学术综述】-如何写出一篇好综述-写好综述要注意的问题
文章目录 1.前置1.1 SSD 的结构1.2 FTL的架构和作用 2 动机-why?3 做了什么【做了哪些方面的survey】?4 背景知识【上下文】5 研究的问题6 每个问题对应的解决方案 从昨天晚上【2023.11.09 22:00】到今天22:29的,花了一天的时间在读这篇surve…...
ClickHouse介绍和使用
ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区(可选)4.3.2. primary key 主…...
数码管动态扫描
/*----------------------------------------------- 内容:数码管使用动态扫描显示,所以可以同时看到数码管同时显示数字或者字符。 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不…...
Webpack 中 loader 的作用是什么?常用 loader 有哪些?
说说webpack中常见的Loader?解决了什么问题?- 题目详情 - 前端面试题宝典 1、loader 是什么 loader是 webpack 最重要的部分之一。 通过使用不同的 loader,我们能够调用外部的脚本或者工具,实现对不同格式文件的处理。 loader…...
c#,字段和属性的区别
c#,string test和string test{ges;set;}有什么区别 在C#中,string test和string test { get; set; }表达了两种不同的成员声明,它们在类中的作用和访问方式是不同的。 string test: 这是一个字段(field)声明。它声明了一个类型…...
ideal一键部署SpringBoot项目jar包到服务器
一 简介 我们在开发环境部署项目一般通过ideal将项目打包成jar包,然后连接linux服务器,将jar手动上传到服务中,重启服务。 概括的说流程是这样的: 本地打包->上传到服务器->kill掉以前的服务->重新启动jar包服务 每次总是循环这一…...
宝塔部署QQ机器人,提示OpenSSL 1.0.2k-fips 26 Jan 2017
1、报错预览 Traceback (most recent call last):File "/www/wwwroot/python/bot-one/main.py", line 5, in <module>import requestsFile "/www/wwwroot/python/bot-one/343ae0eb0d491a10a1a00c0621b03ed0_venv/lib/python3.9/site-packages/requests/_…...
K8S篇之简述K8S底层原理
k8s底层原理 Kubernetes(简称k8s)是一个开源的容器编排平台,它可以自动化地部署、扩展和管理容器化应用程序。 Kubernetes 底层原理是其能够实现这些功能的关键。 1 节点和控制平面 Kubernetes 由两个主要组件组成:节点Node和控…...
打开ps提示,计算机中丢失d3dcompiler_47.dll怎么解决?
“d3dcompiler_47.dll丢失5个解决办法”。相信很多同事在工作或者娱乐的过程中,都遇到过这个错误提示。那么,究竟什么是d3dcompiler_47.dll文件?为什么会丢失呢?又该如何解决这个问题呢?接下来,我将为大家详…...
torch.mm
torch.mm(input, mat2, *, outNone) → Tensor执行矩阵input和mat2的矩阵乘法运算。 如果input是(nm)张量,mat2是(mp)张量,out将是(n x p)张量。 input(张量࿰…...
github遇到想要强制拉取远程仓库内容
进行项目的时候,遇到了我的远程仓库 Sync fork 更新以后,这时候我的本地就和远程不同步,如果使用 git pull 的时候,如果出现 conficts 过多的情况怎么办,如果我们想要直接把远程仓库拉下来应该怎么办? git…...
django+drf+vue 简单系统搭建 (2) - drf 应用
按照本系统设置目的,是为了建立一些工具用来处理简单的文件。 1. 准备djangorestframework 关于drf的说明请参见:Django REST Framework教程 | 大江狗的博客 本系列直接使用drf的序列化等其他功能。 安装 conda install djangorestframework conda i…...
【FastCAE源码阅读7】视图方向切换按钮实现原理
在FastCAE工具栏上有视图切换按钮,如下图所示: 本文介绍如何实现。 FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
