“实时数据同步:构建高效的 MySQL 数据同步方案“

news2024/12/25 12:26:55

方案一 基于LVM快照进行备份切换

介绍:

MySQL数据库本身并不支持快照功能(sqlServer支持) 因此快照备份是指通过文件系统支持的快照功能对数据库进行备份 备份的前提是将所有数据库文件放在同一文件分区中,然后对该分区进行快照操作

LVM是LINUX系统下对磁盘分区进行管理的一种机制,LVM使用写时复制(copy-on-write)的技术来创建快照——例如,当创建一个快照时,仅复制原始卷中数据的元数据(meta data 注:data block),并不会有数据的物理操作,因此 快照的创建过程是非常快的.
在这里插入图片描述
以下是关于pvcreate、vgcreate和lvcreate命令的解释和它们在逻辑卷管理过程中的关系图:

  • pvcreate:pvcreate命令用于创建物理卷(Physical Volume,PV)。物理卷是硬盘或分区的逻辑卷管理(LVM)组件,用于存储数据。pvcreate命令会将指定的硬盘或分区标记为物理卷,并准备其用于逻辑卷的创建。

  • vgcreate:vgcreate命令用于创建卷组(Volume Group,VG)。卷组是物理卷的逻辑分组,它允许将多个物理卷组织在一起以形成一个大容量的存储池。vgcreate命令会将多个物理卷组合成一个卷组,并为该卷组分配一个唯一的名称。

  • lvcreate:lvcreate命令用于创建逻辑卷(Logical Volume,LV)。逻辑卷是卷组中的逻辑存储单元,类似于传统的分区。逻辑卷可以根据需要调整大小,并用于创建文件系统或挂载其他文件系统。lvcreate命令会在指定的卷组中创建一个逻辑卷,并为其分配大小和名称。

下面是它们之间的关系图:

+------------------------+
|        pvcreate         |
|   (创建物理卷,PV)      |
+-----------|------------+
            |
            v
+------------------------+
|        vgcreate         |
|   (创建卷组,VG)        |
+-----------|------------+
            |
            v
+------------------------+
|        lvcreate         |
|   (创建逻辑卷,LV)      |
+------------------------+

实战分盘

假设您要使用一块10TB的磁盘来创建逻辑卷管理(LVM)结构,以下是使用pvcreate、vgcreate和lvcreate的命令和解释:

  1. pvcreate:创建物理卷(Physical Volume,PV)
    命令:pvcreate /dev/sdX
    解释:使用pvcreate命令创建物理卷时,将/dev/sdX替换为您要使用的实际磁盘设备路径,例如/dev/sda。该命令会将磁盘设备标记为物理卷,以便用于逻辑卷的创建。
  2. vgcreate:创建卷组(Volume Group,VG)
    命令:vgcreate vg_name /dev/sdX
    解释:使用vgcreate命令创建卷组时,将vg_name替换为您想要为卷组指定的名称,/dev/sdX为已创建物理卷的磁盘设备路径。该命令将一个或多个物理卷组合成一个卷组,以便在其中创建逻辑卷。
  3. lvcreate:创建逻辑卷(Logical Volume,LV)
    命令:lvcreate -L size -n lv_name vg_name
    解释:使用lvcreate命令创建逻辑卷时,可以使用以下参数:
    -L size:指定逻辑卷的大小,可以使用单位(如G、M、T)来表示大小。
    例如,-L 5G表示创建一个大小为5GB的逻辑卷。
    -n lv_name:指定逻辑卷的名称,替换lv_name为您想要为逻辑卷指定的名称。
    vg_name:指定逻辑卷所属的卷组名称。
pvcreate /dev/sdX
vgcreate vg_name /dev/sdX
lvcreate -L 5T -n lv_name vg_name

当快照创建完成,原始卷上
有写操作时,快照会跟踪原始卷块的改变,将要改变的数据在改变之前 复制到快照预留的空间里,因此这个原理的实现叫做写时复制

在这里插入图片描述

先决条件和配置

  1. 所有的InnoDB文件(InnoDB的表空间文件和InnoDB的事务日志)必须是在单个逻辑卷(分区);
    你需要绝对的时间点一致性,LVM不能为多于一个卷做某个时间点一致的快照。(这是LVM的一个限制;其他一些系统没有这个问题。)
  2. 必须在卷组中有足够的空闲空间来创建快照。需要多少取决于负载。当配置系统时,应该留一些未分配的空间以便后面做快照。

优缺点:

优点:

  1. 几乎是热备 (创建快照前把表上锁,创建完后立即释放)
  2. 支持所有存储引擎
  3. 备份速度快
  4. 无需使用昂贵的商业软件(它是操作系统级别的)

缺点:

  1. 无法预计服务停止时间
  2. 数据如果分布在多个卷上比较麻烦 (针对存储级别而言)

步骤

## 创建lvm分区
# 创建LVM逻辑卷组
vgcreate mysql /dev/sdb
# 创建LV逻辑卷
lvcreate -n lv_mysql -L 4G mysql
# 格式化lvm分区
mkfs.xfs /dev/mysql/lv_mysql

## 将当前数据迁移到逻辑卷上(因为只有逻辑卷上的数据才可以进行快照)
# 停止数据库
systemctl stop mysqld
# 备份所有数据文件到指定的目录文件下
cd /var/lib/mysql
tar czf /backup/mysql/mysql.tar.gz *
# 挂载逻辑卷到当前mysql的数据目录下
mount /dev/mysql/lv_mysql /var/lib/mysql
# 将备份的数据解压到数据目录下
tar xf /backup/mysql/mysql.tar.gz -C /var/lib/mysql
# 修改权限再重新启动
chown mysql.mysql /var/lib/mysql
systemctl start mysqld

## 快照备份数据库
# 给数据库加读锁,防止快照时插入数据
mysql>flush table with read lock;
# 给mysql的数据库所在的逻辑卷创建快照
lvcreate -n lv_mysql_s -L 500M -s /dev/mysql/lv_mysql
# 解锁
mysql> unlock tables;
# 将逻辑卷挂载到目录里,这里创建一个临时目录
mkdir /mnt/mysql
mount -o nouuid /dev/mysql/lv_mysql_s /mnt/mysql/

## 测试快照备份,此处是直接切换了datadir的路径,也可以将快照数据保存,恢复时直接用快照数据替换原路径数据
# 修改mysql datadir路径
vim /etc/my.cnf
datadir=/mnt/mysql
# 重启mysql
systemctl restart mysqld

## 其他一些查看信息的命令
# 查看磁盘分区
lsblk
# 查看挂载信息的命令
df -h
# 查看逻辑分区信息命令
lvdisplay

方案二 基于检测binlog来进行数据同步:

介绍:

利用canal进行基于MySQL数据库增量日志(binlog)解析,提供增量数据订阅和消费

原理:

canal 工作原理
1. canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
2. MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
3. canal 解析 binary log 对象(原始为 byte 流)

官网示意图:
在这里插入图片描述

优缺点:

优点:
1. 相比于快照备份,不需要对源数据库重启或加锁.可以直接在代码层面实现
3. 与业务完全解耦,面向数据的,方便扩展,后续可以接入多个存储目的地
4. 可以对数据进行处理,可以分别根据DELETE,UPDATE,INSERT分别做不同的操作,并且可以根据biglog时间戳来更准确处理数据
缺点:
1. 需要单独维护`canal服务``客户端`.存在开发与维护成本.并且还需要占用服务器IO,内存,带宽资源

关键步骤:

确认已开启mysql的binlog,并且选择ROW(行)模式
show variables like ‘log_bin’;
安装canal(github直接可以下载),下载后根据QuickStart配置参数,运行
编写客户端代码(不局限于java)

  1. 与canal建立长连接
  2. 循环获取数据,如果获取到则进行处理
  3. 数据处理,可以接入多个目的地

两种方案针对报表业务的解决方案

lvm快照备份

将备份切换过程编写为脚本,利用linux中corn定时执行脚本

缺点:

因为要锁表甚至重启,可能会影响到生产环境。
本身对linux不是很通透,可能会出现一些预期之外的问题。

biglog检测增量

当天结束整点时,canal客户端根据超过整点后的数据的时间来新建第二天的表,同时将旧表数据复制到新表。这样可以确保每新建的一张表最多包含不大于当天的数据。

缺点:

因为表数据是翻倍再递增的,所以数据量比起之前要大很多
新建表名影响到之前报表业务,之前报表也需要同步修改一下表名
补充:

在这里插入图片描述
理想上来讲,应该是不会存在丢失消息,并且在当日结束后几秒内完成当日数据的隔离

参考:

https://blog.csdn.net/qingsong3333/article/details/77418238
https://help.aliyun.com/document_detail/131141.html
https://github.com/alibaba/canal
《高性能MySQL(第3版)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:磁盘资源耗尽故障

有两种经典原因 磁盘空间已被大量的数据占满,空间耗尽。 解决办法:将没有用的大型文件转移或删除 文件i节点耗尽故障 (文件过多) 解决办法:删除 磁盘被大型文件占满 模拟 准备了一个2G大小的分区 然后进行挂载 我…

电子企业如何高效地使用MES生产管理系统

引言: 在当今数字化、智能化的时代,电子企业的发展已经达到了一个新的高度。与此同时,MES生产管理系统在电子企业中扮演着越来越重要的角色。本文将探讨电子企业如何高效地使用MES生产管理系统,提高企业生产效率和管理水平&#…

基于点云和图像的目标识别与定位,以及目标去重

【背景介绍】 无人系统常常面临对特定目标进行跟踪侦察的任务需求,这就要求无人系统要具备对目标进行识别以及对目标进行定位的能力,同时,任务一般发生在一段连续时间跨度,而相同目标存在被单个机器人重复发现,或者被…

Vue电商项目--详情页面完成

放大镜操作上 <script> var mySwiper new Swiper (.swiper, {direction: vertical, // 垂直切换选项loop: true, // 循环模式选项// 如果需要分页器pagination: {el: .swiper-pagination,},// 如果需要前进后退按钮navigation: {nextEl: .swiper-button-next,pr…

14.2:派对的最大快乐值

派对的最大快乐值 员工信息的定义如下: class Employee { public int happy; // 这名员工可以带来的快乐值 List subordinates; // 这名员工有哪些直接下级 } 公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、 没有环的多叉树 树的头节点是公…

框架解耦神器 -- REventBus

REventBus背景 在实际的项目开发中&#xff0c;经常会遇到业务与业务&#xff0c;组件与组件&#xff0c;业务与组件之间的通信&#xff0c;举个例子&#xff1a;当有烟雾传感器检测到烟雾超标时&#xff0c;需要打开排气扇排气&#xff0c;同时显示烟雾浓度显示到显示器中&am…

centos7升级rockylinux 未写完

前言 查看centos的版本 &#xff0c;我这台服务器是虚拟机 [rootlocalhost ~]#cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]#uname -a Linux jenkins_server 3.10.0-1160.83.1.el7.x86_64 #1 SMP Wed Jan 25 16:41:43 UTC 2023 x86_64 …

PIC 使能485/422笔记(修订中...)

1.需求 工作中需要把目前设备的单向232转为485/422模式&#xff0c;实现双向通讯&#xff0c;目前查找相关资料。突然想到一件事&#xff0c;我是否能让232现有的单向上发线同时连工控机的tx,rx&#xff0c;然后靠协议&#xff0c;来定时切换PIC一侧的tx rx?PIC可能不支持这个…

Python之pyecharts的常见用法2-柱状图-折线图

Pyecharts是一个基于Echarts的Python可视化库&#xff0c;可以用Python语言轻松地生成各种交互式图表和地图。它支持多种图表类型&#xff0c;包括折线图、柱状图、散点图、饼图、地图等&#xff0c;并且可以通过简单的API调用实现数据可视化。 Pyecharts的优点包括&#xff1a…

关于 Oracle Schema 级别的权限问题

作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路&#xff08;ID: JiekeXu_IT&#xff09; 如需转载请联系授权 | (个人微信 ID&#xff1a;JiekeXu_DBA) 大家好&#xff0c;我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看关于 Oracle Schema 级别的权限问题&#xff0c…

PyCaret 3.0介绍 -- Python中的开源、低代码机器学习库

PyCaret是一个Python中的开源、低代码机器学习库&#xff0c;可以自动化机器学习工作流。它是一个端到端的机器学习和模型管理工具&#xff0c;可以成倍地加快实验周期&#xff0c;提高工作效率。 与其他开源机器学习库相比&#xff0c;PyCaret是一个替代的低代码库&#xff0c…

如何利用外卖小程序源码,快速开启你的外卖生意?

作为外卖行业不可或缺的一部分&#xff0c;外卖小程序越来越受到人们的关注。它不仅可以提高用户的订餐体验&#xff0c;还可以为商家带来更高的收益。然而&#xff0c;对于一些想通过外卖小程序来开启自己的外卖生意的商家来说&#xff0c;开发一款定制化的外卖小程序需要投入…

浙江大华后端开发一面面经

目录 1.SpringBuffer和SpringBuilder的区别是什么&#xff1f;2.常用的集合类有哪些&#xff1f;HashMap的底层数据结构&#xff1f;推荐一下线程安全的Map&#xff1f;3.TCP和UDP的差异是什么&#xff1f;4.MySQL的左连接和右连接的区别&#xff1f;5.MySQL慢查询如何排查&…

01 【Vue简介 初识Vue 模板语法和数据绑定】

01 【Vue简介 初识Vue 模板语法和数据绑定】 1.Vue简介 1.1官网 英文官网中文官网 1.2介绍与描述 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 ○构建用户界面&#xff1a;把数据通过某种办法变成用户界面 ○渐进式&#xff1a;Vue可以自底向上逐层的应用&…

图解LeetCode——108. 将有序数组转换为二叉搜索树

一、题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二、示例 2.1> 示例 1&#xff1a; 【输入】n…

企业邮箱大文件发送指南:推荐一个适用于大文件的邮箱服务

大多数电子邮件服务都不安全并且限制附件文件的大小&#xff0c;但是有一些方法可以安全地发送大文件。如果您曾尝试将多个图像或视频文件附加到电子邮件&#xff0c;您就会知道它并不总是有效。下面为大家介绍一款可以发送大文件的企业邮箱--Zoho Mail。 一、电子邮件发送大文…

【Python】Python系列教程--Python3 环境搭建(二)

文章目录 前言Python3 下载Python 安装Unix & Linux 平台安装 Python3:Window 平台安装 Python:MAC 平台安装 Python: 环境变量配置在 Unix/Linux 设置环境变量在 Windows 设置环境变量在命令提示框中(cmd) : 输入 Python 环境变量运行 Python1、交互式解释器&#xff1a;2…

品牌如何给自己创建一个百度百科词条,在百科上传企业资料方法

对于企业来说&#xff0c;很多人都想给自己企业或者品牌上传正面简介内容到百度百科平台&#xff0c;但创建一个品牌百度百科词条似乎并不是那么简答&#xff0c;很多自己尝试创建品牌百度百科词条的朋友最终都失败了&#xff0c;下面洛希爱做百科网教教大家如何给自己品牌创建…

1.矢量引入

目录 一.什么是矢量 1.1 定义 1.2 公理与体系 1.3 矢量几何化 二.矢量间的相互作用 1.点积 2.点积应用 3.叉积 4. 叉积应用 三.矢量除法 1.单用叉积无法唯一定义矢量除法 2.矢量除法 四.复杂相互作用 1.混合积 2.双叉积 3.Laplace公式 五.泛函的广义矢量理论…

从业十三年SEO大佬干货总结,满满五千字,图文结合,30min带你真正学会SEO

目录 seo优化 介绍seo是什么 网站更新&#xff1a; 网站排名在21世纪的意义: 网站为电商引流 百度算法规则 排名流程 seo策略 规则——“学会在线球里玩” 单页面收录显示 必要条件——链接数量 日志统计——及时优化seo策略 降低识别难度 收录越多排名就越大吗 …