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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 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
相关文章
|
4天前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
1月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
132 25
|
14天前
|
人工智能 Cloud Native 多模数据库
实力见证!数据管理服务DMS、云原生多模数据库Lindorm荣获“2024技术卓越奖”
实力见证!数据管理服务DMS、云原生多模数据库Lindorm荣获“2024技术卓越奖”
|
15天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
22天前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
175 42
|
2月前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
510 0
|
3月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
91 3
|
3月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
177 3