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.两种复制方式…...
Android View 的事件分发机制解析
前言:当一个事件发生时(例如触摸屏幕),事件会从根View(通常是Activity的布局中的最顶层View)开始,通过一个特定的路径传递到具体的View,这个过程涉及到三个关键的阶段:事…...
240. 搜索二维矩阵||
参考题解:https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf 将矩阵旋转45度,可以看作一个二叉搜索树。 假设以左下角元素为根结点, 当target比root大的时候ÿ…...
Linux C++
一、引言 冯诺依曼架构是现代计算机系统的基础,它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时,理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的,包括程序的存储、执行和资源管理。这对于编写高效、可靠的…...
docker安装emqx
emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机,并且关闭了防火墙&a…...
Docker 仓库管理
Docker 仓库管理 引言 随着容器技术的兴起,Docker 已成为最流行的容器化平台之一。在Docker的生态系统中,仓库(Repository)是至关重要的组成部分。一个有效的仓库管理策略可以帮助开发者更高效地构建、测试、部署和管理容器应用。本文将深入探讨Docker仓库管理的相关知识…...
预测不规则离散运动的下一个结构
有一个点在19*19的平面上运动,运动轨迹为 一共移动了90步,顺序为 y x y x y x 0 17 16 30 10 8 60 15 15 1 3 6 31 10 7 61 14 15 2 12 17 32 9 9 62 16 15 3 4 12 33 10 9 63 18 15 4 3 18 34 15 12 6…...
DVC - 数据版本和机器学习实验的命令行工具和 VS Code 扩展
文章目录 一、关于 DVC二、快速启动三、DVC的工作原理四、VS代码扩展五、安装Snapcraft(Linux)Chocolatey (Windows)Brew (mac OS)Anaconda (Any platform)PyPI(Python)Package (Platform-specific)Ubuntu / Debian (deb)Fedora /…...
[C语言日寄] <stdio.h> 头文件功能介绍
在C语言的世界里,<stdio.h> 是一个极其重要的头文件,它提供了标准输入输出功能,是C语言程序与用户交互的核心工具。今天,我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...
c语言中mysql_query的概念和使用案例
在 C 语言中,使用 MySQL 数据库需要用到 MySQL C API。mysql_query() 函数是 MySQL C API 中的一个函数,用于执行 SQL 语句。 概念 mysql_query() 函数的原型如下: int mysql_query(MYSQL *mysql, const char *stmt_str)mysql:…...
「 机器人 」扑翼飞行器的数据驱动建模核心方法
前言 数据驱动建模可充分利用扑翼飞行器的已有运行数据,改进动力学模型与控制策略,并对未建模动态做出更精确的预测。在复杂的非线性飞行环境中,该方法能有效弥补传统解析建模的不足,具有较高的研究与应用价值。以下针对主要研究方向和实现步骤进行整理与阐述。 1. 数据驱动…...
C++ queue
队列用vector<int>好不好 不好 为什么? 因为队列是先进先出 vector没有提供头删(效率太低) 要强制适配也可以 就得用erase函数和begin函数了 库里面的队列是不支持vector<int>的 queue实现 #pragma once #include<vector…...
SpringBoot 配置文件
目录 一. 配置文件相关概念 二. 配置文件快速上手 1. 配置文件的格式 2. properties 配置文件 (1) properties 基本语法 (2) 读取配置文件内容 (3) properties 缺点分析 3. yml配置文件 (1) yml 基本语法 (2) 读取配置文件内容 (3) yml 配置对象 (4) yml 配置集合 …...
【Leetcode 每日一题】119. 杨辉三角 II
问题背景 给定一个非负索引 r o w I n d e x rowIndex rowIndex,返回「杨辉三角」的第 r o w I n d e x rowIndex rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 数据约束 0 ≤ r o w I n d e x ≤ 33 0 \le rowIndex \le 33 …...
推荐七节来自NVIDIA、Google、斯坦福的AI课程
英伟达 (1)在 10 分钟内构建大脑 • 探索神经网络如何使用数据进行学习。 • 了解神经元背后的数学原理。 链接:https://learn.nvidia.com/courses/course-detail?course_idcourse-v1:DLIT-FX-01V1 (2)构建视频 A…...
HTML<kbd>标签
例子 在文档中将一些文本定义为键盘输入: <p>Press <kbd>Ctrl</kbd> <kbd>C</kbd> to copy text (Windows).</p> <p>Press <kbd>Cmd</kbd> <kbd>C</kbd> to copy text (Mac OS).</p>…...
HTML5+SVG+CSS3实现雪中点亮的圣诞树动画效果源码
源码介绍 这是一款基于HTML5SVGCSS3实现雪中点亮的圣诞树动画效果源码。画面中的圣诞树矗立在雪地中,天上飘落着雪花。当鼠标滑过圣诞树时,可见到圣诞树上的灯光闪烁,同时左下角探出雪怪模样的半个脑袋,四处张望着。整体画面栩栩…...
Android开发入门
文章目录 JetBrains历史沿革主营业务 KotlinSDKAndroid Studio特点功能 gradle9 Patch图片1. 作用和用途2. 创建9 Patch图片3. 在布局文件中使用9 Patch图片4. 注意事项 mipmap子目录AVD JetBrains JetBrains是一家成立于2000年的捷克软件开发公司,总部位于布拉格&…...
深度学习在金融风控中的应用:突破传统模型的瓶颈
深度学习在金融风控中的应用:突破传统模型的瓶颈 金融风险控制(简称“风控”)是现代金融体系中至关重要的一环,关系到金融机构的稳定性、客户的安全以及整体经济的健康运行。近年来,随着深度学习的迅猛发展,传统的风控模型正面临被颠覆的挑战,新的技术手段和思维方式正…...
Vim安装与配置教程(解决软件包Vim没有安装可候选)
Vim安装与配置教程(解决软件包Vim没有安装可候选)_软件包 vim 没有可安装候选-CSDN博客文章浏览阅读4.4k次,点赞70次,收藏47次。在Linux系统中,当我们使用apt-get install vim命令安装Vim 编辑器时,如果系统…...
探索AI(chatgpt、文心一言、kimi等)提示词的奥秘
大家好,我是老六哥,我正在共享使用AI提高工作效率的技巧。欢迎关注我,共同提高使用AI的技能,让AI成功你的个人助理。 "AI提示词究竟是什么?" 这是许多初学者在接触AI时的共同疑问。 "我阅读了大量关于…...
深入MapReduce——从MRv1到Yarn
引入 我们前面篇章有提到,和MapReduce的论文不太一样。在Hadoop1.0实现里,每一个MapReduce的任务并没有一个独立的master进程,而是直接让调度系统承担了所有的worker 的master 的角色,这就是Hadoop1.0里的 JobTracker。在Hadoop1…...
线段树 算法
文章目录 基础知识适用场景小结 题目概述题目详解300.最长递增子序列2407.最长递增子序列 II 基础知识 线段树和树状数组都只是一个工具来的,题目并不会一下子就告诉你这个题目用到线段树和树状数组,这个取决于你想使用的数据结构以及所要优化的方向 线…...
Redis实战(黑马点评)——redis存储地理信息、位图、HyperLogLog 用法
Redis存储geo数据类型基本介绍 geo 就是 geolocation 的简写形式,代表地理坐标。redis 在 3.2 版本中加入了对 geo 的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: geoadd:添加一个地理空…...
Flutter_学习记录_基本组件的使用记录
1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有: TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例: body: Center(child: Text(开启 TextWidget 的旅程吧,珠珠, 开启 TextWidget 的旅程吧&a…...
C语言实现统计数组正负元素相关数据
在编程的世界里,对数组中元素的统计分析是常见的需求。今天,我们就来探讨一段用C语言实现的代码,它能统计数组中负数的个数以及正数的平均值。 代码功能概述 这段C语言代码的主要功能是:首先从用户处获取一个整数 n ,用…...
AJAX RSS Reader:技术解析与应用场景
AJAX RSS Reader:技术解析与应用场景 引言 随着互联网的快速发展,信息量呈爆炸式增长。为了方便用户快速获取感兴趣的信息,RSS(Really Simple Syndication)技术应运而生。AJAX RSS Reader作为一种基于AJAX技术的信息读取工具,在用户体验和信息获取方面具有显著优势。本…...
使用openwrt搭建ipsec隧道
背景:最近同事遇到了个ipsec问题,做的ipsec特性,ftp下载ipv6性能只有100kb, 正面定位该问题也蛮久了,项目没有用openwrt, 不过用了开源组件strongswan, 加密算法这些也是内核自带的,想着开源的不太可能有问题ÿ…...
将5分钟安装Thingsboard 脚本升级到 3.9
稍微花了一点时间,将5分钟安装Thingsboard 脚本升级到最新版本 3.9。 [rootlab5 work]# cat one-thingsboard.shell echo "test on RHEL 8.10 " source /work/java/install-java.shell source /work/thingsboard/thingsboard-rpm.shell source /work/po…...
Linux---架构概览
一、Linux 架构分层的深度解析 1. 用户空间(User Space) 用户空间是应用程序运行的环境,与内核空间隔离,确保系统稳定性。 应用程序层: 用户程序:如 edge、vim,通过调用标准库(如 …...
dnf妖气追踪找门方案
第一种 跟之前一样还是确定boss的 位置,但是妖气追踪有几个boss位置重复的思路就是分两大类第一类就是boss位置不一样的,第二类在boss位置一样的大类 下面再分一一个小类, 这个小类就是boss位置重复的下面判断 第一个门蓝色人的位置 来确定后面门的路线还有一种情况就是在选择…...
【C语言练习题】整数和实数在计算机中的二进制表示
1. 请写出下列十进制整数在计算机中的二进制存储形式(假设为16位整数): 32767: -1: 32768: -2: 答案: 0111111111111111 1111111111111111 1000000000000000 1111111111111110 解…...
OSCP:Windows 服务提权详解
在Windows操作系统中,服务是一种特殊的后台进程,它们通常以较高的权限(如 SYSTEM 或 Administrator)运行。攻击者可以通过控制服务的创建、配置或运行过程实现权限提升(提权)。本文将详细分析Windows服务提…...
寻找两个正序数组的中位数:分治法与二分查找的结合
寻找两个正序数组的中位数:分治法与二分查找的结合 在算法领域,“寻找两个正序数组的中位数” 是一道经典的高频面试题(LeetCode 第 4 题)。它不仅考察基本的数组操作,还涉及二分查找与分治思想的结合。今天ÿ…...
Python-基于PyQt5,json和playsound的通用闹钟
前言:刚刚结束2024年秋季学期的学习,接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装,配置。所以接下来我们一起深入PyQt5,学习如何利用PyQt5进行实际开发-基于PyQt5,json和…...
51单片机开发:定时器中断
目标:利用定时器中断,每隔1s开启/熄灭LED1灯。 外部中断结构图如下图所示,要使用定时器中断T0,须开启TE0、ET0。: 系统中断号如下图所示:定时器0的中断号为1。 定时器0的工作方式1原理图如下图所示&#x…...
循序渐进kubernetes-RBAC(Role-Based Access Control)
文章目录 概要Kubernetes API了解 Kubernetes 中的 RBACRoles and Role Bindings:ClusterRoles and ClusterRoleBindings检查访问权限:外部用户结论 概要 Kubernetes 是容器化应用的强大引擎,但仅仅关注部署和扩展远远不够,集群的安全同样至…...
在Scene里面绘制编辑工具
功能要求 策划要在scene模式下编辑棋子摆放。用handle.GUI绘制来解决了。 问题 在scene模式下编辑产生的数据,进入游戏模式后就全不见了。改为executeAlways也没用。我的解决办法是把编辑数据序列化保存到本地。在OnEnable的时候再读取。但是我忽然想到ÿ…...
深入探索 Vue 3 Markdown 编辑器:高级功能与实现
目录 1. 为什么选择 Markdown 编辑器?2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…...
动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...
具身智能研究报告
参考: (1)GTC大会&Figure:“具身智能”奇点已至 (2)2024中国具身智能创投报告 (3)2024年具身智能产业发展研究报告 (4)具身智能行业深度:发展…...
LabVIEW春节快乐
尊敬的LabVIEW开发者与用户朋友们: 灵蛇舞动辞旧岁,春风送暖贺新年!值此癸巳蛇年新春佳节来临之际,向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福:愿您与家人在新的一年里平安顺遂、阖家幸福,事业如…...
MybatisX插件快速创建项目
一、安装插件 二、创建一个数据表测试 三、IDEA连接Mysql数据库 四、选择MybatiX构造器 五、配置参数 六、项目结构...
技术周总结 01.13~01.19 周日(Spring Visual Studio git)
文章目录 一、01.14 周二1.1)问题01:Spring的org.springframework.statemachine.StateMachine 是什么,怎么使用?:如何使用StateMachine: 1.2)问题02:Spring StateMachine 提供了一系列高级特性 …...
【C++】List的模拟实现
文章目录 1.ListNode 结构体2.List成员变量与typedef3.迭代器iterator4.begin()、end()、size()、empty()、构造函数5. insert()、erase()6.push_back()、pop_back()、push_front()、pop_front()7.拷贝构造、赋值、析构8.总代码 以后有时间会更新其它成员函数 1.ListNode 结构…...
剑指 Offer II 002. 二进制加法
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20002.%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95/README.md 剑指 Offer II 002. 二进制加法 题目描述 给定两个 01 字符串 a 和 b ,请计算…...
(15)基于状态方程的单相自耦变压器建模仿真
1. 引言 2. 单相降压自耦变压器的状态方程 3. 单相降压自耦变压器的simulink仿真模型 4. 实例仿真 5. 总结 1. 引言 自耦变压器的原边和副边之间存在直接的电气连接,所以功率是通过感应和传导从原边转移到副边的,这与双绕组变压器不同,后者的原边和副边是电气隔离的。从…...
03.01、三合一
03.01、[简单] 三合一 1、题目描述 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数…...
.git/hooks/post-merge 文件的作用
.git/hooks/post-merge 文件是 Git 版本控制系统中的一个钩子(hook)脚本,其作用是在合并(merge)操作完成后自动执行一些特定的操作。以下是关于 .git/hooks/post-merge 文件作用的详细解释: 作用 自动化任…...
SpringBoot项目创建
一、创建新的工程 二、配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…...