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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【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
相关文章
|
23天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
10天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
81 42
|
1天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
40 25
|
6天前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
46 25
|
10天前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
64 9
|
1月前
|
存储 运维 OLAP
【Meetup回顾 第1期】竟是这样的国产数据库,YashanDB技术内幕曝光
YashanDB是一款基于统一内核,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景的新型数据库系统;YashanDB同时提供开发平台、运维平台和迁移平台3大工具平台以满足数据全生命周期管理。
34 2
【Meetup回顾 第1期】竟是这样的国产数据库,YashanDB技术内幕曝光
|
1月前
|
关系型数据库 分布式数据库 数据库
瑶池数据库大讲堂|PolarDB HTAP:为在线业务插上实时分析的翅膀
瑶池数据库大讲堂介绍PolarDB HTAP,为在线业务提供实时分析能力。内容涵盖MySQL在线业务的分析需求与现有解决方案、PolarDB HTAP架构优化、针对分析型负载的优化(如向量化执行、多核并行处理)及近期性能改进和用户体验提升。通过这些优化,PolarDB HTAP实现了高效的数据处理和查询加速,帮助用户更好地应对复杂业务场景。
|
1月前
|
关系型数据库 分布式数据库 数据库
1月17日|阿里云云谷园区,PolarDB V2.0技术沙龙,畅聊国产数据库
为了助力国产化项目顺利推进,阿里云邀请企业开发者和数据库负责人到云谷园区,与PolarDB V2.0技术专家面对面交流。扫描海报二维码报名,我们将根据信息为您申请入园。欢迎参与,共同探讨PolarDB的最新技术和应用!
|
2月前
|
人工智能 物联网 大数据
解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾
在数字化时代,开源已成为推动技术创新和知识共享的核心力量,尤其在数据领域,开源技术的涌现不仅促进了行业的快速发展,也让更多的开发者和技术爱好者得以参与其中。随着物联网、工业互联网等技术的广泛应用,时序数据库的需求愈发强烈,开源的兴起更是为这一技术的创新与普及提供了强有力的支持。
45 3
|
2月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
82 15

热门文章

最新文章