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.两种复制方式…...

Cpp::IO流(37)
文章目录 前言一、C语言的输入与输出二、什么是流?三、C IO流C标准IO流C文件IO流以写方式打开文件以读方式打开文件 四、stringstream的简单介绍总结 前言 芜湖,要结束喽! 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是 …...

基于OpenCV实现的答题卡自动判卷系统
一、图像预处理 🌄 二、查找答题卡轮廓 📏 三、透视变换 🔄 四、判卷与评分 🎯 五、主函数 六、完整代码+测试图像集 总结 🌟 在这篇博客中,我将分享如何使用Python结合OpenCV库开发一个答题卡自动判卷系统。这个系统能够自动从扫描的答题卡中提取信…...

如何将电脑桌面默认的C盘设置到D盘?详细操作步骤!
将电脑桌面默认的C盘设置到D盘的详细操作步骤! 本博文介绍如何将电脑桌面(默认为C盘)设置在D盘下。 首先,在D盘建立文件夹Desktop,完整的路径为D:\Desktop。winR,输入Regedit命令。(或者单击【…...
二十三种设计模式-享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享相同对象来减少内存使用,尤其适合在大量重复对象的情况下。 核心概念 享元模式的核心思想是将对象的**可共享部分(内部状态)提取出来进行共…...
算法【有依赖的背包】
有依赖的背包是指多个物品变成一个复合物品(互斥),每件复合物品不要和怎么要多种可能性展开。时间复杂度O(物品个数 * 背包容量),额外空间复杂度O(背包容量)。 下面通过题目加深理解。 题目一 测试链接:[NOIP2006 提…...

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战
服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…...

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由(如何解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题)
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 飞牛NAS虚拟机安装爱快教程 📒🛠️ 前期准备🌐 网络要求💾 下载爱快镜像🚀 开始安装💻 开启IOMMU直通🌐 配置网络🚨 解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题➕ 创建虚拟机🎯 安装ikuai💻 进…...
蓝桥杯例题四
每个人都有无限潜能,只要你敢于去追求,你就能超越自己,实现梦想。人生的道路上会有困难和挑战,但这些都是成长的机会。不要被过去的失败所束缚,要相信自己的能力,坚持不懈地努力奋斗。成功需要付出汗水和努…...

八股——Java基础(四)
目录 一、泛型 1. Java中的泛型是什么 ? 2. 使用泛型的好处是什么? 3. Java泛型的原理是什么 ? 什么是类型擦除 ? 4.什么是泛型中的限定通配符和非限定通配符 ? 5. List和List 之间有什么区别 ? 6. 可以把List传递给一个接受List参数的方法吗? 7. Arra…...

CVE-2023-38831 漏洞复现:win10 压缩包挂马攻击剖析
目录 前言 漏洞介绍 漏洞原理 产生条件 影响范围 防御措施 复现步骤 环境准备 具体操作 前言 在网络安全这片没有硝烟的战场上,新型漏洞如同隐匿的暗箭,时刻威胁着我们的数字生活。其中,CVE - 2023 - 38831 这个关联 Win10 压缩包挂…...

【自然语言处理(NLP)】深度循环神经网络(Deep Recurrent Neural Network,DRNN)原理和实现
文章目录 介绍深度循环神经网络(DRNN)原理和实现结构特点工作原理符号含义公式含义 应用领域优势与挑战DRNN 代码实现 个人主页:道友老李 欢迎加入社区:道友老李的学习社区 介绍 **自然语言处理(Natural Language Pr…...
Linux 命令之技巧(Tips for Linux Commands)
Linux 命令之技巧 简介 Linux 是一种免费使用和自由传播的类Unix操作系统,其内核由林纳斯本纳第克特托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户…...

【文星索引】搜索引擎项目测试报告
目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…...

低代码系统-产品架构案例介绍、轻流(九)
轻流低代码产品定位为零代码产品,试图通过搭建来降低企业成本,提升业务上线效率。 依旧是从下至上,从左至右的顺序 名词概述运维层底层系统运维层,例如上线、部署等基础服务体系内置的系统能力,发消息、组织和权限是必…...

二叉树(补充)
二叉树 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化 2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序 1.二叉树的基本特性…...
(DM)达梦数据库基本操作(持续更新)
1、连接达梦数据库 ./disql 用户明/"密码"IP端口或者域名 2、进入某个模式(数据库,因达梦数据库没有库的概念,只有模式,可以将模式等同于库) set schema 库名; 3、查表结构; SELECT COLUMN_NAM…...
CRM 微服务
文章目录 项目地址一、项目地址 教程作者:教程地址:代码仓库地址:所用到的框架和插件:dbt airflow一、 用户与认证服务 主要功能: 用户注册、登录、注销。 认证(OAuth、JWT 等)。 权限和角色管理(RBAC/ABAC)。 单点登录(SSO)。 技术亮点: 集成第三方身份认证(如 …...

AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言
1. 定义目标与需求 首先,要明确你希望AI智能体做什么。是自动化任务、数据分析、自然语言处理,还是其他功能?明确目标可以帮助你选择合适的技术和方法。 2. 选择开发平台与工具 开发AI智能体的软件时,你需要选择适合的编程语言、…...

DBSyncer开源数据同步中间件
一、简介 DBSyncer(英[dbsɪŋkɜː(r)],美[dbsɪŋkɜː(r) 简称dbs)是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务,提供监控全量…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...