【MySQL】数据库备份与容灾详解(实战篇)(MySQL专栏启动)

article/2025/8/23 5:45:13

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 InfoQ签约作者、CSDN专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO专家 🏆

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

金融公司的防资损方法论、代码与实践。

本文目录

本文目录

本文导读

一、备份数据库的重要性

二、数据库全量备份

1、完全(全量)备份——逻辑备份

1.1、mysqldump

1.2、mysqlpump

1.3、mydumper 工具

2、完全(全量)备份——物理备份

三、数据库增量备份

四、数据库备份的常见问题

1、备份策略

2、备份文件验证

3、集群备份节点选择问题

4、压缩文件

总结


本文导读

在前面文章中《数据库机房架构与跨城容灾详解》、《MySQL参数调优与实战详解》、《数据库服务器硬件优化与实战详解》、《MySQL复制与高可用水平扩展架构实战》、《MySQL复制原理与主备一致性同步工作原理解析》、《MySQL日志系统以及InnoDB背后的技术》已经讲解了MySQL高可用架构的相关知识。

本文主要讲解数据库备份,包括数据库全量备份(逻辑备份和物理备份)、增量备份以及常见的问题,此举完全是防止有人恶意删库跑路或者无意中删除数据库数据。

一、备份数据库的重要性

Replication 复制技术 或 InnoDB Cluster 基于群组复制仅能负责业务可用性。

为了确保数据安全,除了生产的多活以及副本数据库,我们还需要构建一个完整的离线备份系统。即使所有数据库都已损坏,开发人员也可以从备份中恢复数据。

简单来说就是在独立内存空间,保存一份数据和 log 文件。

二、数据库全量备份

对于MySQL数据库,数据库备份分为完全备份和增量备份。

1、完全(全量)备份——逻辑备份

它指的是在当前时间点备份数据库中的所有数据。根据备份内容的不同,完全备份可分为逻辑备份和物理备份。

逻辑备份,是指数据库逻辑内容的备份,以 INSERT 语句的形式备份每个表的内容。

1.1、mysqldump

-- 通过 mysqldump 进行全量的逻辑备份
-- -A 表示备份所有数据库
-- --single-transaction 表示进行一致性的备份。
-- backup.sql 保存到此文件中
-- 注:mysqldump不需要登录到数据库中就可以备份和恢复库和表
mysqldump -A --single-transaction > backup.sql

在上面的命令中,最终的备份文件称为 backup.sql。文件备份 backup.sql  本质上是一个文本文件,记录sql语句,这就是我们所说的逻辑备份。

恢复逻辑备份非常简单。它是在文件中执行SQL语句。此时,可以使用以下SQL语句:

mysql < backup.sql

尽管 mysqldump 简单易用,但由于它是由单个线程备份的,所以速度会相对较慢,因此MySQL推出了 mysqlpump 工具。

1.2、mysqlpump

mysqlpump 命令与 mysqldump 几乎相同,唯一的区别是它可以设置备份的线程数,可以在备份过程中查看备份进度。

mysqlpump 的并行备份与数据一致性冲突(并发线程超过1),数据一致性问题仅存在于5.7.11之前。在以后的版本中可以同时添加 --default-parallelism=N(默认并行)、 --single-transaction(单个事务) 这两个参数。官方文档:https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html#option_mysqlpump_default-parallelism

Before MySQL 5.7.11, use of the --single-transaction option is mutually exclusive with parallelism. To use --single-transaction, disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas:

mysqlpump --single-transaction --default-parallelism=0

1.3、mydumper 工具

地址:https://github.com/maxbube/mydumper

mydumper的优势在于:支持一致备份,可以根据表中的记录进行分区,以便执行多线程备份;对于恢复操作,它也可以是多线程备份;可以多线程的恢复指定单表。

​-- -r 表示每张表导出 number 条记录后保存到一张表
-- --trx-consistency-only 表示一致性备份
-- -t 表示 n 个线程并行备份
mydumper -o /bak -r number --trx-consistency-only -t n

2、完全(全量)备份——物理备份

逻辑备份很好,但它需要回复很长时间,因为逻辑备份本质上是执行INSERT…SELECT…操作。

物理备份直接备份数据库的物理表空间文件和重做日志,而不是通过逻辑 INSERT 获取数据。因此,物理备份的速度通常比逻辑备份快,恢复速度也更快,物理备份只能恢复整个实例的数据,而不能恢复指定的表。

-- 物理备份命令
-- 在命令行下输入 clone 命令进行本地实例的 MySQL 物理备份
CLONE LOCAL DATA DIRECTORY = '/path/**/**';

 物理备份实现机制多于逻辑备份复制,建议使用MySQL的官方物理备份工具。

三、数据库增量备份

逻辑备份和物理备份都是全量整个数据库的备份。然而,数据库中的数据不断变化。不可能每小时每分钟增量备份数据库。

在生产环境中,通过“完全备份+增量备份”来构建完整的备份策略。

增量备份是备份日志文件(MySQL数据库中的二进制日志文件),因为二进制日志保存了对数据库的所有更改,所以“完全备份+增量备份”可以实现时间点恢复,即“完全备份”可以恢复到任何时间点。

在完全备份期间,将记录与此备份对应的时间点,通常是GTID(Global transaction identifiers,也称之为全局事务ID)位置。

增量备份可以在这一点之后 redo log,从而可以实现基于时间点的恢复。如果对二进制日志进行了一些数据库删除操作,则可以跳过这些点,然后重新播放后续的二进制日志,以便对极端的数据库删除场景执行灾难恢复。

-- 实时增量备份 MySQL 的二进制日志语句
-- --read-from-remote-server 表示从远程由--host指定 MySQL 上拉取二进制日志
-- --raw 表示根据二进制的方式进行拉取
-- --stop-never 表示永远不要停止,即一直拉取一直保存
-- binlog.* 表示从这个文件开始拉取。
mysqlbinlog --read-from-remote-server --host=host_name --raw --stop-never binlog.*-- 通过 mysqlbinlog 解析二进制日志进行恢复
mysqlbinlog binlog.*…… | mysql -u root -p

四、数据库备份的常见问题

1、备份策略

本地存储备份和双倍的磁盘空间会造成一定的资源浪费。

所有需要设置完全备份的频率,由于完全备份相对较大,建议设置每周一次完全备份和实时增量备份的频率。

在这种情况下,最坏的情况是在7天前恢复完整备份,然后通过7天的增量备份恢复。

对于备份文件,可能还需要对其进行备份,备份文件应存储在至少两个机房的不同存储服务器上,即至少需要两个备份文件副本。多备份方法,建议集中化的管理。

2、备份文件验证

备份文件未经验证通常是最大的问题,也是最容易被忽略的问题。备份文件验证的一般逻辑是恢复所有文件,然后通过增量备份进行恢复,然后将恢复的MySQL实例连接到在线MySQL服务器作为从属服务器,然后再次检查数据。

3、集群备份节点选择问题

集群备份节点选择问题,建议将备份部署在从属节点或统计节点上。当集群在主节点和从节点之间切换时,如果备份节点没有动态切换,将在写数据库上执行备份。

4、压缩文件

备份传输导致网络卡流量的速度限制和压缩,从而影响在线服务,所以需要将文件和流量压缩。

总结

在前面文章中《数据库机房架构与跨城容灾详解》、《MySQL参数调优与实战详解》、《数据库服务器硬件优化与实战详解》、《MySQL复制与高可用水平扩展架构实战》、《MySQL复制原理与主备一致性同步工作原理解析》、《MySQL日志系统以及InnoDB背后的技术》已经讲解了MySQL高可用架构的相关知识。

本文主要讲解数据库备份,包括数据库全量备份(逻辑备份和物理备份)、增量备份以及常见的问题,此举完全是防止有人恶意删库跑路或者无意中删除数据库数据。


http://chatgpt.dhexx.cn/article/lJTPVhsn.shtml

相关文章

数据中心“容灾”和“备份”的区别

戳蓝字“CSDN云计算”关注我们哦&#xff01; 数据中心运行突发故障(如&#xff1a;天灾不可避免的灾难)是无法预测的&#xff0c;计算机里的数据就像扫雷游戏一样&#xff0c;十面埋伏充满雷区&#xff0c;随时都有可能Game Over&#xff0c;容灾备份就是数据安全的最后防线&a…

云呐|什么是容灾备份

什么是容灾备份&#xff1f;帮助企业应对人为误操作、软件错误、病毒入侵等“软”性 灾害以及硬件故障、自然灾害等“硬”性灾害。主要也做容灾备份一体机。  一般而言&#xff0c;设计企业基础设施架构主要包括计算资源架构、网络架构、安全架构、灾备架构四个模块。 …

容灾和备份的区别

本文来说下“容灾”和“备份”的区别 文章目录 概述什么是容灾容灾的分类容灾和备份有什么联系容灾和备份的区别容灾的分类数据级应用级业务级 备份等级本文小结 概述 数据中心运行突发故障(如&#xff1a;天灾不可避免的灾难)是无法预测的&#xff0c;计算机里的数据就像扫雷…

容灾备份——备份技术

目录 基本概念&#xff1a; 备份与容灾的区别&#xff1a; 备份和归档的区别&#xff1a; 备份系统架构&#xff1a; 备份系统的三要素&#xff1a; 备份方案网络&#xff1a; LAN-Base&#xff1a; LAN-Free&#xff1a; Server-Free&#xff1a; Server-Less&#xff1a; 备份…

filter函数的妙用

filter函数的妙用 数组的 filter 函数有一个很重要的用处&#xff0c;可以过滤 null、undefined、 代码 var arr [1, , null, undefined, ] console.log(arr.filter(v > v))

filter函数 与filtfilt函数的效果区别

filter函数 与filtfilt函数的效果区别 filter滤波器称为一维数字滤波器。filtfilt滤波器称为零相位数字滤波。其滤波算法是基于filter而来的。只是filtfilt实现了零相位。其基本实现过程为先让信号用filter滤波&#xff0c;再将信号时域反转再次通过filter滤波&#xff0c;这样…

python filter函数

filter函数就是滤波函数的意思&#xff0c;可以参考信号处理的滤波定义理解。 直接上代码吧&#xff1a; 代码1&#xff1a;利用filter函数过滤掉奇数或者偶数 c[1, 4, 6, 7, 9, 12, 17] def is_odd(x):return x % 2 1 def is_even(y):return y%20 alist(filter(is_odd, c)…

MATLAB之Filter函数的C语言程序实现

MATLAB之Filter函数的C语言实现 前言一、MATLAB的Filter函数二、C语言实现Filter函数1.代码2.计算结果 总结 前言 MATLAB里面有很多现场的滤波器函数&#xff0c;我们在做数据分析的时候&#xff0c;可以直接调用&#xff0c;十分方便&#xff0c;但是有时候我们也需要在嵌入式…

c语言cross函数什么意思,通达信cross函数用法,通达信 filter函数 返回什么值

Q1:通达信 filter函数 返回什么值 结果:返回一个逻辑真值,当逻辑条件为真时,如果在N周期内已真过,将当前真值置为0,即过滤。 下面网页上有详细讲解。 http://www.chcj.net/thread-945487-1-1.html 希望对你有点帮助! Q2:求通达信公式满足条件CROSS(EXP1,EXP2)向左画水平射…

matlab怎么调用filter函数,如何在matlab中建立和调用filter函数

数字滤波是Matlab信号处理中的常用功能。具体步骤为&#xff1a; step1&#xff1a;设计好滤波器系数&#xff0c;b和a。其中b,a存储了滤波器响应传递函数的分子和分母系数。 step2&#xff1a;产生输入信号x step3&#xff1a;实现滤波yfilter(b,a,x)&#xff0c;画出输出波形…

Power BI——Filter函数

1.定义&#xff1a; FILTER 接受一个表和一个逻辑条件作为参数&#xff0c;返回满足条件的所有行。 2.语法&#xff1a; FILTER ( <表>, <布尔表达式> ) 3.使用场景&#xff1a; 遇到如下情况使用&#xff1a; 4.案例&#xff1a;

html中filter函数的用法,filter函数怎么使用

JavaScript中的arr.filter()函数用于从给定数组创建一个新数组&#xff0c;该数组仅包含给定数组中满足参数函数设置条件的那些元素。下面我们就来具体看一下filter()的使用方法。 filter()的基本语法如下&#xff1a;var newArray arr.filter(arg_function[, this_arg]) filt…

matlab的filter函数,filter函数用法 matlab中filter函数的用法

matlab中filter函数的用法如果你深爱的人此刻在你身边陪你,你怎么会有时间来看这些文字呢 离散系统的差分方程为 2y[k]-y[-1]-3y[k-2]=2x[k]-x[k-1] x[k]=(0.5^k)u看楼主的意思主要是想实现差分方程 先从简单的说起: filter([1,2],1,[1,2,3,4,5]) 实现 y[k]=x[k]+2*x[k-1] y[…

【Python基础】内置函数filter详解

filter&#xff0c;顾名思义&#xff0c;就是一个过滤器。其作用是从列表&#xff08;或其他序列类型&#xff09;中筛选出满足条件的子列表&#xff0c;filter是python的内置函数&#xff0c;无须import即可直接使用。 1 filter的基础用法 对于列表&#xff08;或其他序列类…

利用JS制作抖音同款3D照片墙(three.js)

利用JS制作抖音同款3D照片墙(three.js) 520快到了&#xff0c;跟我一起学习threeJS 用threeJS制作抖音同款3D照片墙 源码下载&#xff1a;3D照片墙源码下载地址

如何快速输出产品的用户故事地图

01 结构与作用 故事地图产生背景 用户故事地图就是将story用可视化的方式展现在团队面前&#xff0c;让团队可以仔细梳理、讨论&#xff0c;确认这个story包含的内容&#xff0c;最终产出需求进行开发。用户故事地图是Userstory的前传&#xff01; 故事地图特点 不是另外一…

android qq勋章墙实现,科技教程:如何在手机QQ中进入勋章墙?

如今越来越多的小伙伴对于如何在手机QQ中进入勋章墙&#xff1f;这方面的问题开始感兴趣&#xff0c;看似平静的每一天&#xff0c;在每个人身上都在发生着各种各样的故事&#xff0c;因为大家现在都是想要了解到此类的信息&#xff0c;那么既然现在大家都想要知道如何在手机QQ…

全面解析用户故事地图

昨天一篇文章我们给大家分享了用户故事&#xff0c;这篇文章我们来分享故事地图。 什么是用户故事地图&#xff1f; “用户故事”的概念来源于敏捷开发的理念。用户故事是从用户的角度来描述自己渴望得到的特性以及带来的价值。现在流行的模板是&#xff1a; 英文&#xff1a; …

TAPD上手指南

目录 什么是TAPD 为什么使用TAPD 如何使用TAPD 工作台 需求——分类管理用户故事 迭代——敏捷研发&#xff0c;小步快跑 故事墙——直观展示需求状态 缺陷——快速跟进产品缺陷 报表——高效完成数据分析 文档—— 轻松在线协作编辑 什么是TAPD TAPD&#xff08;Te…

使用 canvas 制作魔方墙

故事起因 我是一个魔方爱好者&#xff08;只是爱好&#xff0c;但技术并不强&#xff09;&#xff0c;在大学期间担任过魔方社社长&#xff0c;每到招新的时候&#xff0c;一般都会用上千个魔方拼出招新二维码&#xff0c;显得比较有逼格。二维码本身也是一个一个的小格子组成…