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

news2024/11/25 18:42:03

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

        

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

        

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

       

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

本文目录

本文目录

本文导读

一、备份数据库的重要性

二、数据库全量备份

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://www.coloradmin.cn/o/50559.html

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

相关文章

优质短视频的10个共同点,戳中两个就能提高爆款几率!

优质短视频的10个共同点&#xff0c;戳中两个就能提高爆款几率&#xff01; 01、引起共鸣和认同 : 观念、遭遇和经历 昨天随便搞了一个表情&#xff0c;配了一段核酸是辛酸的文案&#xff0c;30w播放。这就是共鸣。 02、引起好奇 :为什么、什么、何时、惊喜 ; 疑问或者悬疑式…

unity webgl开发踩坑——从开发、发布到优化

目录前言unity webgl的一些注意点videoplayer修改text修改——解决不能显示汉字问题制作、读取ab包unity audioclip减小建议减小包体 全过程记录webgl的buildwebgl部署到本地、云&#xff08;IIS&#xff09;webgl部署云如何提升加载速度总结参考前言 又是一个阳光明媚的早上&…

双十二买什么牌子电容笔?值得买的平价电容笔推荐

随着网络的迅速发展&#xff0c;人们开始使用移动电话、平板、笔记本电脑等。所以&#xff0c;在我们的日常生活中&#xff0c;电容笔的使用也日益频繁。我想&#xff0c;如果只把电容笔用在日常学习、记录或者其它一些简单的事情上&#xff0c;我们就不必再去买一支价格如此昂…

mp3转wav怎么转?

mp3可谓是被人们熟知的一种音频格式了&#xff0c;早在十几年前就出了一种很流行的音乐播放器&#xff0c;叫做mp3&#xff0c;其实是这种比播放设备只能播mp3格式的音频文件而已&#xff0c;所以俗称叫做mp3。这个就足以说明了mp3格式的音频文件应用的广泛性和普及性。mp3之所…

智云通CRM:CRM数据库在经营客户中有什么作用?

CRM客户数据库是信息的存储中心&#xff0c;由一条条记录构成&#xff0c;记载着相互联系的一组信息&#xff0c;数据库是面向主题的、集成的、相对稳定的、与时间相关的数据集合&#xff0c;能够及时反映市场的实际状况&#xff0c;是企业掌握市场的重要途径。 CRM客户数据库…

[附源码]计算机毕业设计springboot居家养老服务系统小程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计JAVA闲置物品交易管理系统

[附源码]计算机毕业设计JAVA闲置物品交易管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

spring-boot-starter-data-redis 引发的一系列惨案

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> pom 引入jar包 &#xff0c;如果redis配置文件使用 lettuce &#xff0c;还需要引入 commons-pool2 &a…

iwebsec靶场 SQL注入漏洞通关笔记11-16进制编码绕过

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入&#xff08;宽字节注入&#xff09;_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入&#xff08;布尔型盲注&#…

【从零开始学微服务】06.微服务架构的建设思路

大家好&#xff0c;欢迎来到万猫学社&#xff0c;跟我一起学&#xff0c;你也能成为微服务专家。 微服务看起来很美&#xff0c;但其实是需要一个技术体系或平台体系来支撑并且落地的。微服务架构建设分为两种思路&#xff1a; 框架模式服务网格&#xff08;Service Mesh&…

N皇后问题详解

文章目录一、题目描述二、题目解析&#xff08;1&#xff09;思考一(集合回溯)&#xff08;2&#xff09;思考二(数组深度递归)&#xff08;3&#xff09;思考三(位运算)一、题目描述 N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后&#xff0c; 要求&#xff1a;任何两个皇后…

Metabase学习教程:仪表盘-8

仪表板中的Markdown很有趣 如何在仪表板中使用Markdown以获得乐趣和有益。 开发有效仪表板通常包括为人们提供上下文&#xff0c;让他们了解计算是如何存在或为什么存在的。虽然精确的标题、描述和带标签的轴可以在很大程度上澄清可视化&#xff0c;但Metabase还允许您向仪表…

2022最新1w字MySQL索引面试题(附md文档)

小熊学Java个人网站&#xff1a;https://javaxiaobear.gitee.io/&#xff0c;每周持续更新干货&#xff0c;建议收藏&#xff01; 1、Mysql如何实现的索引机制&#xff1f; MySQL中索引分三类&#xff1a;B树索引、Hash索引、全文索引 2、InnoDB索引与MyISAM索引实现的区别是什…

【附源码】计算机毕业设计JAVA重工教师职称管理系统

【附源码】计算机毕业设计JAVA重工教师职称管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA…

window像mac一样使用快捷键(AutoHotkey + SharpKeys)

自己有win和mac两台笔记本, 每天都需要在两台电脑切换进行开发, 快捷键的差异就让人很难受(个人喜好mac快捷键, 常用的几个快捷键分布比较合理), 所以网上找来了解决方案供大家参考 我想作为一名 Mac User&#xff0c; 使用 Win 首先感到不适应的应该是快捷键的差异&#xff0c…

[附源码]Python计算机毕业设计Django的项目管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]计算机毕业设计springboot停车场管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【吴恩达机器学习笔记】八、应用机器学习的建议

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

小袁博客重构V2.0版本重新发布(增加实时聊天/定时发布/权限管理/微信登录等功能)

有话说 第一代V1.0版本的博客项目&#xff0c;结构比较乱 &#xff0c;各种注入和各种校验&#xff0c;层次不分明 重构之后&#xff0c;分了七大模块 注册中心模块后台模块前台模块第三方服务模块实体类模块工具模块系统模块 降低了模块间的耦合度&#xff0c;结合Valid注…

RabbitMQ初步到精通-第十一章-RabbitMQ之常见问题汇总

目录 RabbitMQ之常见问题汇总 1.rabbitmq丢消息场景 1.1 消息未持久化丢失 1.2 消费时消息丢失 1.3 如何阻止消息丢失 2. mq消费消息是pull 还是 push 2.1 pull形式消费 2.2 push形式消费 3. mq重复消费场景 3.1 生产端重复情况 3.2 消费端重复 3.3 如何防止 4.pre…