MySQL的复制
一、概述
1.复制解决的问题是让一台服务器的数据与其他服务器保持同步,即主库的数据可以同步到多台备库上,备库也可以配置成另外一台服务器的主库。这种操作一般不会增加主库的开销,主要是启用二进制日志带来的开销。
2.两种复制方式:
基于行的复制和基于语句的复制,这两种方式主要都是通过主库上记录二进制日志、在备库重放日志的方式来实现异步的数据复制(即同一个时间点上,主库和主库的数据存在不一致)。另,其复制为向后兼容即新版本的服务器可以作为旧版本服务器的备库,反之不行。
这两种复制方式的区别在于,基于行的复制在5.1版本后才被加进去。
3.复制常见的用途:
数据分布:随意停止或开始复制并在不同的地理位置分布数据备份
负载均衡:将读操作分不到多个服务器上
备份:复制不是备份也不可取代备份
高可用和故障切换:帮助应用程序避免mysql单点失败,一个包含复制的设计良好的故障切换系统能够显著的缩短宕机时间
mysql升级测试:使用高版本的mysql作为备库保证升级全部的示例前查询可以在备库按照预期执行
二、复制的工作过程
1.在主库上把数据更改记录到二进制日志中
2.备库将主库的日志复制到自己的中继日志中
3.备库读取中继日志的事件并将其放到备库数据之上
大概过程如下图:

备库将主库的二进制日志复制到本地的中继日志中备库会启动一个工作线程(I/O线程),该线程会和主库建立普通的客户端连接,主库上启动特殊的二进制转储线程来读取二进制日志中的事件。
注:主库上的二进制转储线程不会对二进制日志中事件进行轮询并且如果其转储进度追赶上主库会进入睡眠状态,直到主库发送信号量通知有新的事件产生才会被唤醒继续接收事件记录到中继日志中。
三、配置复制
1.步骤:
在每台服务器上创建复制账号
配置主库和备库
通知备库连接到主库并从主库复制数据
2.环境:服务器server1(IP地址 192.168.0.1) 和服务器server2(IP地址 192.168.0.2)
3.创建复制账号
mysql会赋予一些特殊的权限给复制进程,在备库运行的I/O线程会建立一个到主库的TCP/IP连接,这意味需要在主库创建一个用户并赋予其合适的权限,备库I/O线程以该用户名连接到主库并读取其二进制日志。
grant replication slave ,replication client on *.* to repl@'192.168.0.%' identified by 'testxiao';
在主库和备库都创建该账号
4.配置主库和备库
假设主库是服务器server1,需要打开二进制日志并指定独一无二的服务器id,在主库的my.cnf文件中修改内容
log_bin = mysql-bin
server_id = 10
一般使用服务器的末尾两位作为唯一id
可以通过 show master status
备库上的my.cnf也要增加同样的配置
log_bin = mysql-bin
server_id = 11
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1 表示允许备库将重放的事件记录到自身的二进制文件
read_only = 1
5.启动复制
告诉备库如何连接到主库并重放其二进制日志
change master to master_host='server1',
master_user='repl1',
master_password='testxiao',
master_log_file='mysql-bin.000001',
master_log_pos=0;
master_log_pos=0 表示从日志开头读起,可以通过show slave status检查复制是否正确执行

其中slave_io_state slave_io_running和save_sql_running这三列表示当前备库复制尚未运行,日志的开始是4不是0是因为0不是日志真正开始的位置,仅仅是日志文件头,mysql从直到第一个事件从文件的第4位开始读
start slave 该命令开始复制
再次使用show slave status

通过上图的信息可以看出来I/O线程和SQL线程已经开始运行

可以通过上述命令查看由I/O线程向主库发起的连接
6.从另一个服务器开始复制
大多数情况下一般是有一个已经运行一段时间的主库并需要三个条件让主库和备库保持同步:
在某个时间点主库的快照
主库当前的二进制日志文件和获得数据快照时在该二进制日志文件中的偏移量,这两个值被称为日志文件坐标,通过这两个值可以确定二进制日志的位置,可以通过show master status来获取这些值
从快照时间到现在的二进制日志
从别的服务器克隆备库的方法
冷备份:
关闭主库,把数据复制到备库,重启主库后会使用一个新的二进制文件,在备库通过执行change master to 指向这个文件的起始处,缺点是在复制数据时需要关闭主库
热备份:
使用mysqldump

使用快照或备份
只要找到对应的二进制日志坐标就可以使用主库的快照或者备份来初始化备库
7.推荐的复制配置
sync_binlog=1
如果开启该选项,mysql每次在提交事务前会将二进制日志同步到磁盘上保证在服务崩溃时不会丢失事件,只适用于二进制日志非中继日志
relay_log=/path/to/logs/relay-bin
skip_slave_start
read_only
以上三个配置中,第一个配置可以避免中继日志文件基于机器名来命名,第二个配置选项能够避免备库在崩溃后自动启动复制,第三个配置选项可以组织大部分用户更改非临时表。
四、复制的原理
1.基于语句的复制
主库会记录造成数据更改的查询,当备库读取并重放这些事件时实际上是把主库上执行过的sql再执行一遍,好处是:能够保证主备保持同步且无需太多的带宽,缺点是会有一些元数据(时间戳)无法保持同步并且更新必须是串行的。
2.基于行的复制
可以正确的复制每一行但是没有向后兼容性,无需重放更新主库数据的查询
mysql可以基于上述两种复制模式进行动态的切换,默认是使用基于行的复制语句的复制模式,如果发现语句无法被正确的复制就切换到基于行的复制模式。
五、复制文件
1.mysql-bin.index 该文件用来记录磁盘上的二进制日志文件,包括二进制文件的文件名
该文件并不多余,mysql需要依赖这个文件,如果这个文件中没有记录,mysql将无法是被二进制文件
2.mysql-relay-bin-index 中继日志的索引文件和上述文件作用类似
3.master.info 保存备库连接到主库所需要的信息,该文件不可被删除,否则备库再重启后将无法连接到主库上,这个文件以文本的方式记录了复制用户的密码
4.relay-log.info 包含备库复制二进制日志和中继日志坐标,删除此库备库重启后将无法知道从哪个位置开始复制
六、发送复制事件到其他备库
1.log_slave_updates选项可以让备库变成其他服务器的主库,该选项将其执行过的事件记录到它自己的二进制日志中可以使得它的备库可以从其日志中检索并执行事件

2.mysql指定服务器id的原因是:mysql在复制过程中为了防止无限循环会丢弃事件中记录的服务器id和该服务器本身ID事件相同的事件。
七、复制过滤器
1.复制过滤器是允许仅复制服务器上一部分的数据,两种复制过滤的方法:
在主库上过滤记录到二进制日志中的事件
在备库上过滤记录到中继日志的事件

可能会发生问题,一般不用
八、复制拓扑
1.可以在任意个主库和备库之间建立复制,限制条件是每一个备库只能有一个主库,条件是:
一个mysql备库只能有一个主库
每个备库必须有一个唯一的服务器id
一个主库可以有多个备库
打开log_slave_updates选项,表示一个备库可以将主库上的数据变化传播到其他的备库
2.模式:一主多备结构

主动-主动模式下的主-主复制(双向复制/双主复制),每一个都被配置成对方的主库和备库

主动-被动模式下的主-主复制


相关文章:
MySQL的复制
一、概述 1.复制解决的问题是让一台服务器的数据与其他服务器保持同步,即主库的数据可以同步到多台备库上,备库也可以配置成另外一台服务器的主库。这种操作一般不会增加主库的开销,主要是启用二进制日志带来的开销。 2.两种复制方式…...
【后端开发】字节跳动青训营Cloudwego脚手架
Cloudwego脚手架使用 cwgo脚手架 cwgo脚手架 安装的命令: GOPROXYhttps://goproxy.cn/,direct go install github.com/cloudwego/cwgolatest依赖thriftgo的安装: go install github.com/cloudwego/thriftgolatest编辑echo.thrift文件用于生成项目&…...
ArcGIS10.2 许可License点击始终启动无响应的解决办法及正常启动的前提
1、问题描述 在ArcGIS License Administrator中,手动点击“启动”无响应;且在计算机管理-服务中,无ArcGIS License 或者License的启动、停止、禁止等均为灰色,无法操作。 2、解决方法 ①通过cmd对service.txt进行手动服务的启动…...
Cyber Security 101-Build Your Cyber Security Career-Security Principles(安全原则)
了解安全三元组以及常见的安全模型和原则。 任务1:介绍 安全已成为一个流行词;每家公司都想声称其产品或服务是安全的。但事实真的如此吗? 在我们开始讨论不同的安全原则之前,了解我们正在保护资产的对手至关重要。您是否试图阻止蹒跚学步…...
NLP模型大对比:Transformer > RNN > n-gram
结论 Transformer 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异: 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的"侦探"依赖距离只能看前…...
【Rust自学】14.5. cargo工作空间(Workspace)
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 为什么需要cargo workspace 假如说我们构建了一个二进制crate,里面既有library又有库。随着项目规模不断增长&#…...
[权限提升] Windows 提权 — 系统内核溢出漏洞提权
关注这个框架的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:系统内核溢出漏洞提权介绍 注意:提权很容易让电脑蓝屏,所以如果是测试的话,提权前最好做好系统备份。 溢出漏洞就像是往杯子里装水 —— 如…...
手机端语音转文字的实用选择
今天推荐两款配合使用的软件:MultiTTS 和 T2S,它们可以在安卓设备上实现文字转语音功能。 第一款:MultiTTS(安卓) MultiTTS 是一款离线文本转语音工具,完全免费,提供多种语音风格,…...
四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)
四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用) 文章目录 四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)2.hash 哈希表常用指令(详细讲解说明)2.1 hset …...
无心剑七绝《经纬岁华》
七绝经纬岁华 经天伟业梦初耕 纬地深沉志纵横 岁去年来添锦绣 华章曼妙筑新城 2025年1月29日 平水韵八庚平韵 无心剑七绝《经纬岁华》以“经纬岁华”为藏头,歌颂了泸州职业技术学院(川南经纬学堂)百余年的光辉历程。诗中“经天伟业梦初耕&…...
大数据治理实战:架构、方法与最佳实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 大数据治理是确保数据质量、合规性和安全性的重要手段,尤其在数据驱动决策和人工智能应用日益普及的背景下&…...
基于AnolisOS 8.6安装GmSSL 3.1.1及easy_gmssl库测试国密算法
测试环境 Virtual Box,AnolisOS-8.6-x86_64-minimal.iso,4 vCPU, 8G RAM, 60 vDisk。最小化安装。需联网。 系统环境 关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld selinux关闭 cat /etc/selinux/co…...
区块链在能源行业的创新
技术创新 1. 智能合约与自动化交易 智能合约是区块链技术的核心组件之一,它允许在没有中介的情况下自动执行合同条款。在能源行业,这可以用于自动化电力交易、支付流程以及管理复杂的供应链。例如,当太阳能板产生的电量达到预设值时&#x…...
C基础寒假练习(1)
一、求二维数组只中元并输出行标和列标(以二行三列为例)元素的最大值, #include <stdio.h>int main() {// 初始化二维数组int array[2][3] {{1, 2, 3},{4, 5, 6}};// 定义变量来存储最大值及其位置int max_value array[0][0];int max_row 0;int max_col 0…...
SQLServer 不允许保存更改(主键)
在我们进行数据库表格编辑的时候,往往会出现同一个名字,就比如我们的账号一样,我们在注册自己QQ的时候,我们通常注册过的账号,别人就不能注册了,这是为了保证严密性 所以我们需要点击表格>右键>设计 点击某一列>右键>设计主键 当我们Ctrls 保存的时候回弹出下…...
虚拟机里网络设置-桥接与NAT
桥接(Bridging)和NAT(网络地址转换,Network Address Translation)是网络中的两种不同技术,主要用于数据包的处理和转发。以下是它们的主要区别: 1. 工作原理 桥接: 桥接工作在数据链…...
云计算技术深度解析与代码实践
云计算技术深度解析与代码实践 在信息技术日新月异的今天,云计算作为一种颠覆性的技术,正在全球范围内掀起一场深刻的变革。本文将从云计算的技术特点、应用场景、关键优势以及具体的代码使用案例等多个维度,为读者呈现一幅云计算技术的全貌。通过本文,读者将深入了解云计…...
linux监控脚本+自动触发邮件发送
linux脚本 需求: CPU 负载:使用 uptime 命令,我们可以清楚地了解系统的 CPU 负载情况。这个命令会显示系统在过去 1 分钟、5 分钟和 15 分钟的平均负载。高负载可能意味着系统正在处理大量的任务,可能会导致性能下降或服务响应延迟…...
Ollama本地部署deepseek-r1:7b
Ollama本地部署deepseek-r1:7b RTX2060 6GB显存可运行。 一、下载安装ollama ollama地址 二、设置环境变量 您可以右键点击“此计算机” > “切换到管理员”,然后以管理员身份运行 cmd setx OLLAMA_HOST 0.0.0.0 setx OLLAMA_ORIGINS *三、然后重启ollama …...
代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数
把目标值当作背包容量,每个平方数当作物品,题目变更为装满指定容量的背包,最小用几个物品会不会出现拼凑不出来的情况?不会,因为有数字1,对任意正整数百分百能拼凑出来因此此题目与上一道题就变得一模一样了…...
2. Java-MarkDown文件解析-工具类
2. Java-MarkDown文件解析-工具类 1. 思路 读取markdown文件的内容,根据markdown的语法进行各个类型语法的解析。引入工具类 commonmark 和 commonmark-ext-gfm-tables进行markdown语法解析。 2. 工具类 pom.xml <!-- commonmark 解析markdown --> <d…...
threejs实现烟花效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
ThinkPad E480安装Ubuntu 18.04无线网卡驱动
个人博客地址:ThinkPad E480安装Ubuntu 18.04无线网卡驱动 | 一张假钞的真实世界 遗憾的是虽然下面的方法可以解决,但是内核升级后需要重新安装。 基本信息 Ubuntu 18.04ThinkPad E480使用下面的命令查看 Linux 内核: $ uname -r 5.0.0-3…...
React Router v6配置路由守卫
首先准备好以下页面 登录页:用户可以在此页面登录。 受保护页:只有登录的用户可以访问,否则会重定向到登录页。 公共页面:不需要鉴权,任何人都可以访问。 1. 安装依赖 首先,我们需要安装 react-router-do…...
研发的立足之本到底是啥?
0 你的问题,我知道! 本文深入T型图“竖线”的立足之本:专业技术 技术赋能业务能力。研发在学习投入精力最多,也误区最多。 某粉丝感发展遇到瓶颈,项目都会做,但觉无提升,想跳槽。于是&#x…...
react中如何获取dom元素
实现代码 const inputRef useRef(null) inputRef.current.focus()...
JavaScript系列(49)--游戏引擎实现详解
JavaScript游戏引擎实现详解 🎮 今天,让我们深入探讨JavaScript的游戏引擎实现。游戏引擎是一个复杂的系统,它需要处理渲染、物理、音频、输入等多个方面,让我们一步步实现一个基础但功能完整的游戏引擎。 游戏引擎基础概念 &am…...
20【变量的深度理解】
一说起变量,懂点编程的都知道,但是在理解上可能还不够深 变量就是存储空间,电脑上的存储空间有永久(硬盘)和临时(内存条)两种,永久数据重启电脑后依旧存在,临时数据只…...
19.Word:小马-校园科技文化节❗【36】
目录 题目 NO1.2.3 NO4.5.6 NO7.8.9 NO10.11.12索引 题目 NO1.2.3 布局→纸张大小→页边距:上下左右插入→封面:镶边→将文档开头的“黑客技术”文本移入到封面的“标题”控件中,删除其他控件 NO4.5.6 标题→原文原文→标题 正文→手…...
DeepSeek回答量化策略对超短线资金的影响
其实最近很长一段时间我在盘中的感受就是量化策略的触发信号都是超短线选手经常用到的,比如多个题材相互卡位,近期小红书-消费,好想你,来伊份 跟 算力 电光科技,机器人 金奥博 冀凯股份 五洲新春 建设工业 ,这些票的波动其实都是被量化策略锚定了,做成了策略异动。特别…...
