【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(一)https://developer.aliyun.com/article/1471057


环境准备

  • 完全备份目录:/data/backup/full
  • 每次成功完成命令操作时,日志结尾处会打印标志【completed OK!】,用于区分完全备份和增量备份。
备份操作

bash

复制代码

innobackupex --user=root --password /data/backup/full
介绍说明

上述命令用于在 /data/backup/full 目录下生成一个名为【yyyy-MM-dd_HH-mm-ss】的文件夹。

然而,此备份通常不能用于恢复,因为备份中可能存在尚未提交的事务或已提交的事务但尚未同步至数据文件的事务,导致数据文件处于不一致状态。

因此,我们需要执行一些操作来回滚未提交的事务并将已提交的事务同步至数据文件,以确保数据文件处于一致状态。 执行以下命令:

bash

复制代码

innobackupex --user=root --password --defaults-file=/data/mysql/my.cnf --apply-log /data/backup/full/yyyy-MM-dd_HH-mm-ss

其中参数 --apply-log 用于启动恢复过程。

恢复操作

关闭数据库,备份原数据,创建新的数据目录

停止MySQL服务

bash

复制代码

[root@mysql]# /data/3306/mysql stop
移动原数据目录至备份目录

bash

复制代码

[root@mysql]# mv /data/3306/data/ /data/3306/data_bak
创建新的数据目录

bash

复制代码

[root@mysql]# mkdir /data/3306/data

注意:恢复全备份必须恢复到一个空目录中,否则会出现错误。

执行innobackupex恢复命令

bash

复制代码

[root@mysql]# innobackupex --defaults-file=/data/3306/my.cnf --user=xxx--password=xxxx--copy-back /data/backup/full/yyyy-MM-dd_HH-mm-ss
对新目录进行授权,此操作需要在innobackupex恢复命令后执行

bash

复制代码

chmod -R mysql.mysql /data/mysql/data
重启服务,并检查数据是否成功恢复。

bash

复制代码

[root@mysql]# /data/3306/mysql start

启动MySQL服务...

bash

复制代码

[root@mysql]# ps -ef|grep 3306

增量备份

环境准备

环境备份目录说明:

  • 全量备份目录:/data/backup/full
  • 增量备份目录1:/data/backup/inc1
  • 增量备份目录2:/data/backup/inc2

以下是备份命令示例:

全量备份:

bash

复制代码

innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 /data/backup/full
第一次增量备份

bash

复制代码

innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --incremental /data/backup/inc1 --incremental-basedir=/data/backup/full/yyyy-MM-dd_HH-mm-ss

其中,--incremental-basedir 参数指定了完全备份所在的目录



全量备份和增量备份相互结合,可以实现尽可能保证数据的一致性和完整性。



注意事项
  • innobackupex命令执行后,在 /data/backup 目录下会创建一个以时间命名的新目录,用于存放所有增量备份数据。
  • 如果进行多次增量备份,请确保每次增量备份的 --incremental-basedir 参数指向上一次增量备份的目录。
  • 增量备份仅适用于 InnoDB 或 XtraDB 表,对于 MyISAM 表,执行增量备份实际上是进行完全备份的操作。
第二次增量备份



bash

复制代码

innobackupex  --defaults-file=/data/3306/my.cnf  --user=root --password=123456 --incremental /data/backup/inc2  --incremental-basedir=/data/backup/inc1/yyyy-MM-dd_HH-mm-ss

如果需要恢复的话需要先执行如下操作

bash

复制代码

innobackupex --apply-log --redo-only /data/backup/full/yyyy-MM-dd_HH-mm-ss
innobackupex --apply-log --redo-only /data/backup/full/yyyy-MM-dd_HH-mm-ss --incremental-dir=/data/backup/inc1/yyyy-MM-dd_HH-mm-ss

再次重申一下:如果存在多次增量备份的话,就多次执行如下命令。此处执行针对的是第二次增量备份

执行恢复命令



bash

复制代码

innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --copy-back  /data/backup/full/yyyy-MM-dd_HH-mm-ss


指定使用 --databases 参数可以备份指定的数据库。

案例分析
示例1:

bash

复制代码

innobackupex --default-file=/data/3306/my.cnf --user-root --password-123456 --databases="backup" /data/backup/
示例2:

bash

复制代码

innobackupex --default-file=/data/3306/my.cnf --user=root --password=12345 --databases="backup" /data/backup/

指定使用 --stream 参数进行备份,并将备份数据压缩成压缩包。

示例:

bash

复制代码

innobackupex --default-file=/data/3306/my.cnf --user=root --password=123456 --stream=tar /backup/full/ | gzip > /backup/full/back_$(date +%F).tar.gz

请注意,以上示例中的参数和路径应根据实际情况进行调整。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
379
分享
相关文章
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
419 66
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
27 1
无缝集成 MySQL,解锁秒级 OLAP 分析性能极限,完成任务可领取三合一数据线!
通过 AnalyticDB MySQL 版、DMS、DTS 和 RDS MySQL 版协同工作,解决大规模业务数据统计难题,参与活动完成任务即可领取三合一数据线(限量200个),还有机会抽取蓝牙音箱大奖!
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
消防行业如何借助时序数据库 TDengine 打造高效的数据监控与分析系统
本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的优秀投稿,深入探讨了如何在消防行业中运用 TDengine 进行业务建模。文章重点介绍了如何通过 TDengine 的超级表、标签设计和高效查询功能,有效管理消防监控系统中的时序数据。作者详细阐述了实时监控、报警系统以及历史数据分析在消防行业中的应用,展示了 TDengine 在数据压缩、保留策略和分布式架构下的强大优势。
25 0
2600 万表流计算分析如何做到? 时序数据库 TDengine 助力数百家超市智能化转型
在生鲜超市的高效运营中,实时数据分析至关重要。万象云鼎的“云鲜生”通过智能秤+网关+软件系统的组合,实现了销售数据的精准管理与优化。而在数据处理方面,TDengine 的流计算能力成为了这一方案的核心支撑。本文详细分享了“云鲜生”如何利用 TDengine 高效存储和分析海量销售数据,在优化超市运营、提升用户体验的同时,解决高基数分组、高并发查询等技术挑战。
42 1
71.7万/秒到1.4万/秒!数据库查询优化实战
在现代计算机系统中,程序的局部性原理是优化性能的关键。通过利用时间局部性和空间局部性,可以显著提升数据访问效率,减少高开销的操作如内存访问和网络 I/O。本文将探讨如何利用空间局部性原理,在实际案例中减少数据库查询量,并通过详细的监控和优化措施确保系统的稳定性和高效性。
71.7万/秒到1.4万/秒!数据库查询优化实战
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
134 7
MySQL事务日志-Undo Log工作原理分析
mysql慢查询每日汇报与分析
通过启用慢查询日志、提取和分析慢查询日志,可以有效识别和优化数据库中的性能瓶颈。结合适当的自动化工具和优化措施,可以显著提高MySQL数据库的性能和稳定性。希望本文的详解和示例能够为数据库管理人员提供有价值的参考,帮助实现高效的数据库管理。
66 11
瑶池数据库大讲堂|PolarDB HTAP:为在线业务插上实时分析的翅膀
瑶池数据库大讲堂介绍PolarDB HTAP,为在线业务提供实时分析能力。内容涵盖MySQL在线业务的分析需求与现有解决方案、PolarDB HTAP架构优化、针对分析型负载的优化(如向量化执行、多核并行处理)及近期性能改进和用户体验提升。通过这些优化,PolarDB HTAP实现了高效的数据处理和查询加速,帮助用户更好地应对复杂业务场景。