MySQL 备份恢复最佳实践:终极指南
随着企业和应用程序越来越依赖 MySQL 数据库来管理其关键数据,确保数据可靠性和可用性变得至关重要。在这个数字信息时代,强大的备份和恢复策略是应用程序稳定性的支柱。
本文中,我们将回顾所有常用的 MySQL 备份和恢复策略,它们是任何应用程序的基石。对应您的特定场景,有多个选项可供选择,每个选项都要求我们考虑相关问题以做出明智的决策。
作者:walter-garcia
本文和封面来源:https://www.percona.com/blog,爱可生开源社区翻译。
本文约 2500 字,预计阅读需要 7 分钟。
为什么 MySQL 备份很重要?
MySQL 备份在保护数据完整性、防止各种不可预见的灾难、硬件故障、数据丢失、损坏和意外删除方面发挥着关键作用。如果没有可靠的备份,数据丢失的后果可能会很严重。企业面临运营中断、财务损失、声誉受损甚至合规违规的风险。了解 MySQL 备份的重要性以及它们如何降低这些风险将有助于组织保证数据一致性、业务连续性,并确保数据在需要时安全且可恢复。
RTO 是什么?
RTO(RecoveryTimeObjective,恢复时间目标)是故障发生到业务恢复能时间点的最大长度。与之相关的问题是:
多久可以恢复?
RPO 是什么?
RPO(RecoveryPointObjective,恢复点目标)是故障发生后业务系统可容忍的数据丢失量。与之相关的问题是:
会丢失多少数据?
MySQL 备份类型有哪些?
MySQL 备份类型主要有两种:物理备份和逻辑备份。下面我们将提供对这两种备份类型以及其他一些策略的更多见解。
- 物理(Percona XtraBackup、RDS/LVM 快照、MySQL Enterprise Backup),只要将 MySQL 服务关闭,也可以使用 cp 或 rsync 命令行来复制数据目录 datadir。
- 逻辑(mysqldump、mydumper、mysqlpump、mysql shell 仅适用于 MySQL 8)。
此外,建议创建 binlog 文件的副本。这种做法有一个重要目的:它使我们能够将数据恢复到最后一个事务。
逻辑备份
这是逻辑数据库结构(CREATE DATABASE、CREATE TABLE 语句)和内容(INSERT 语句)的转储。建议将其用于较小量的数据。如果与物理备份相比,此方法的缺点是速度较慢(备份和恢复)。如果需要,您可以使用 mydumper 备份和恢复单个数据库或单个表,这对于将某些数据复制到不同的环境以运行测试非常有用。另外,mydumper 可以进行一致(只要所有表都是 InnoDB 引擎)备份并提供准确的主从日志位置。
输出比物理备份大,特别是以文本格式保存时,但它可以根据您使用的软件即时压缩。例如,mydumper 可以压缩,而 mysqldump 需要添加一个管道将输出重定向到 gzip 文件。
逻辑备份用于解决数据损坏或恢复表子集的需要。
物理备份
简而言之,它由数据库目录和文件的精确副本组成。这可以是 MySQL datadir 目录的全部或部分副本。这种备份最常用于轻松快速地恢复或创建新的副本节点,并用于解决主机故障。建议使用相同的 MySQL 版本进行恢复。建议使用 Percona XtraBackup,因为它可以包含任何相关文件,例如 cnf 配置文件等配置文件。
快照备份
某些文件系统实现允许存储“快照”。它们提供给定时间点的文件系统的逻辑副本,而不需要整个文件系统的物理副本。MySQL 本身不提供获取文件系统快照的功能,但可以使用 LVM 或 ZFS 等第三方解决方案来实现。
缺点是有时物理备份不会压缩太多,因为数据通常是二进制格式,有时表已经被压缩。
二进制日志备份
Binlog 备份专门针对 RPO。二进制日志文件包含执行的每个发生更改的 SQL 查询的记录。
从 MySQL 5.6 开始,您可以使用 mysqlbinlog 从远程服务器流式传输二进制日志。可以将二进制日志备份与 Percona XtraBackup 或 mydumper 备份结合起来,以允许恢复到最近备份的二进制日志的末尾。
增量/差异备份
增量备份是对自上次备份以来发生更改的所有内容的备份(二进制日志备份是增量备份的特殊情况)。如果数据集大小很大,这是一个非常好的选择,因为您可以在本周初进行完整备份并每天运行增量备份。此外,备份大小比完整备份小。
与增量备份相关的主要风险是:
- 单个损坏的增量备份可能会使所有其他备份失效
- 增量备份通常会对 RTO 产生负面影响
对于差异备份,它会复制与上次备份的差异,其优点是从一个备份到下一个备份的大量数据不会发生更改,因此结果可以是明显更小的备份。这可以节省磁盘空间。
Percona XtraBackup 支持增量备份和差异备份。
为什么需要 MySQL 备份?
当出现多种问题时,需要 MySQL 备份:
- 主机故障:我们可能会因磁盘停滞或磁盘损坏而遇到多种问题。同样,在云服务中,我们的数据库实例可能会损坏并且无法访问。
- 数据损坏:这可能发生在断电时,MySQL 无法正确写入并关闭文件,有时当 MySQL 再次启动时,由于数据损坏而无法启动,并且崩溃恢复过程无法修复它。
- 数据不一致:当人犯错误时,通过主节点或副本节点删除/更新错误数据。
- 数据中心故障:停电或互联网提供商问题。
- 立法/法规:提供一致的商业价值和客户满意度。
MySQL 备份和恢复最佳实践
在本节中,我们将探讨基本的 MySQL 备份和恢复最佳实践,以保护您的数据并确保数据库顺利运行。
异地存储
强烈建议将所有备份方法复制到另一个地方,例如云或外部文件服务器,这样在主机故障或数据中心故障的情况下,确保还有另一个副本。
并非所有备份文件都需要上传到云端,有时您需要花费在下载上的时间比恢复过程中消耗的时间还要多。
一个好的方法是在备份服务器上本地保留 1-7 天,以便需要快速恢复,这取决于您的业务法规。
加密
备份包含敏感数据,因此强烈建议加密,尤其是异地存储。当您需要恢复备份时,这会增加更多时间,但可以保证数据安全。
GPG 是加密备份的一个不错的选择,如果您使用此选项或其他替代方案,请不要忘记获取密钥/密码的副本。如果丢失,您的备份将毫无用处。
恢复测试
根据您的业务,强烈建议每月至少测试一次备份。此操作可验证您的备份未损坏,并提供有关恢复时间的关键指标。此过程应该自动化,以获取完整备份、恢复它,并最终将此服务器配置为当前主服务器或另一个副本的副本。这也有助于验证复制过程没有错误。
许多客户正在使用这种方法来刷新他们的 QA/STG 环境,以便从生产备份中获取最新数据。
除了上述内容之外,建议创建手动或自动恢复文档流程,以将所有步骤放在一起,以便在发生灾难时,您可以遵循它而不会浪费时间。
保留要求
最后但并非最不重要的一点是,保留不同备份类型的多个副本非常重要。
我们最好的建议是:
- 备份服务器本地的一到两个物理备份(只要空间允许)。
- 备份服务器上本地的每日 7 次和每周 4 次逻辑备份。
- 备份服务器本地 30 天的 binlog 备份。
- 对于异地备份(如 S3、Google Cloud 等),每月备份保留一年或更长时间。
对于本地备份,请记住,您至少需要当前数据集大小 2.5 倍的可用磁盘空间来保存/满足这些保留策略。不要忘记加密所有备份类型!
法律或监管要求也可能规定数据必须存档多长时间。
验证 MySQL 备份
因此,您已经获得了遵循所有最佳实践的备份过程。那你怎么知道备份成功了?你看过文件大小吗?您是否只检查创建了一个文件?也许您只查看了您使用的工具的退出代码?
“在验证备份之前,你还没有进行备份。” 很好的建议。换句话说,您所做的每个备份都可以被视为薛定谔的备份;在你验证之前,能确定它有效吗?
这里的最佳实践是使用您创建的备份简单地恢复 MySQL 服务器;然而,你创造了它。处理此恢复的机器不需要像源一样强大;一个简单的虚拟机就可以管理这项任务,并且可以很好地实现自动化。
您可以使用 mysql 客户端本身恢复 mysqldump:
zcat my_full_backup.sql.gz | mysql
使用 mydumper/myloader:
myloader --directory dump_dir --overwrite-tables --verbose=3
Percona XtraBackup:
# Prepare the backup xtrabackup --prepare --parallel 4 --use-memory 4G --target-dir /var/backup # Copy backup to original location (ie: /var/lib/mysql), assuming backup taken on same host xtrabackup --copy-back --target-dir /var/backup # Fix file permissions if necessary chown -R mysql:mysql /var/lib/mysql # Start MySQL systemctl start mysql
是的,Percona XtraBackup 确实需要更多步骤,但物理备份始终是最快的备份方式和最快的恢复方式。
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。
SQLE 获取
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SAE 2.0,让容器化应用开发更简单
云原生容器化应用托管模式的演变 云原生这个概念从提出,到壮大,再到今天的极大普及,始终处于一个不断演进和革新的过程中。云原生体系下应用的托管形态是随着企业应用架构在不断演进的。最早的应用大多是集中式、单体式的,应用通过优雅的分层来实现领域模型的共享和更细致的模块拆分。随着互联网的爆炸式发展,分布式的架构逐渐取代集中式架构,云原生应用托管也经历了 4 个阶段的演进。 第一阶段:容器化 Docker 的出现和极大普及,通过集装箱式的封装,标准化开发和运维使得大规模、跨语言的分布式应用大规模落地成为现实。 第二阶段:全面拥抱 Kubernetes 在此之后,微服务架构得以更大规模的流行开来,随之而来的是企业需要运维的基础设施日益复杂、需要管理的容器数量呈现几何式增长。Kubernetes 一方面屏蔽了IaaS 层基础架构的差异并凭借优良的可移植性,帮助应用一致地运行在包括数据中心、云、边缘计算在内的不同环境; 另一方面,凭借优秀的开放性、可扩展性以及活跃开发者社区,在大规模容器编排之战中脱颖而出,成为分布式资源调度和自动化运维的事实标准。 第三阶段:Serverless Kubernetes...
- 下一篇
GitHub 官方开源的字体集「GitHub 热点速览」
前几天 GitHub 官方一口气开源了 5 款字体,各有特色,彼此兼容,重要的是代码友好。这不,一开源就获得了 4.5k+ 的 star。 本周除了这个热点之外,当属 OpenAI 又有新动态了,你可以更方便的搞一个自己的 GPT。 除了这两大热点之外,GitHub trending 还有利用 GPT 实现的线框变 HTML 的 draw-a-ui,提取图片中公式的 LaTeX-OCR,绘制你的像素动画的 aseprite,微软开源的命令补齐工具 inshellisense,以及 macOS 窗口管理软件 yabai。 以下内容摘录自微博@HelloGitHub 的 GitHub Trending 及 Hacker News 热帖(简称 HN 热帖),选项标准:新发布 | 实用 | 有趣,根据项目 release 时间分类,发布时间不超过 14 day 的项目会标注 New,无该标志则说明项目 release 超过半月。由于本文篇幅有限,还有部分项目未能在本文展示,望周知 🌝 本文目录 1. 本周特推 1.1 等宽字体:monaspace 1.2 草稿变 HTML:draw-a-ui...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- 2048小游戏-低调大师作品
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境