阿里云RDS MySQL物理备份文件恢复到自建数据库

官方文档

RDS MySQL物理备份用XtraBackup恢复到自建数据库_云数据库 RDS(RDS)-阿里云帮助中心

阿里云RDS MySQL物理备份文件恢复到自建数据库_第1张图片

通过 Percona 官方仓库来安装最新版本的 xtrabackup

(如果没安装)

# 添加 Percona 仓库
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release enable-only tools release

# 安装 XtraBackup
sudo yum install percona-xtrabackup-80  # 适用于 MySQL 8.0/5.7

新建独立的数据库实例或数据目录

步骤5.7版本

查询阿里云实例什么版本,其他版本看官方文档

  1. 备份文件的处理流程
    阿里云的物理备份(.xb 文件)需要通过 xbstreamxtrabackup 工具先解包、解压并应用事务日志,生成可直接使用的数据库文件(如 .ibd、日志文件等)。这一步需要在备份目录(如 /data/zzx/)中完成。
  2. 新数据库实例的准备时机
    解压后的数据库文件需要复制到 新实例指定的数据目录(如 /data/mysql5.7_zzx),因此新实例的数据目录需要在复制前创建并清空,但 MySQL 服务的启动应在数据复制完成后进行。

/data/zzx #备份解压目录

/data/mysql5.7_zzx #数据目录

/usr/local/mysql #软件目录 指定软链接

准备工作:

1.新建数据库数据目录,备份目录。

mkdir -p /data/mysql5.7_zzx		#数据目录
mkdir -p /data/zzx		#备份目录

阿里云下载物理备份文件到备份解压目录/data/zzx

##切换备份目录
cd /data/zzx
## 步骤一:解包,注意后缀
cat test_qp.xb | xbstream -x -v -C /data/zzx
## 步骤二:解压,将 .xb 格式的备份文件转换为 MySQL 可识别的物理文件。
### MySQL 5.5/5.6/5.7
innobackupex --decompress --remove-original /data/zzx

恢复数据:

1.预处理备份数据

使用 Percona XtraBackup 工具对备份数据进行 预处理确保数据文件处于一致性状态,以便后续恢复到 MySQL 实例中。在解压备份文件后、恢复到自建数据库前执行,是恢复流程的必要前置步骤。

innobackupex --defaults-file=/data/zzx/backup-my.cnf --apply-log /data/zzx

参数

作用

innobackupex

XtraBackup 工具的命令行接口(适用于 MySQL 5.7 及以下版本)。

--defaults-file

RDS MySQL备份文件中,提供名为backup-my.cnf的配置文件,该文件位于备份解压目录,即/data/zzx

--apply-log

将备份中的事务日志(redo log 和 undo log)应用到数据文件,使数据恢复到一致性状态。

/data/zzx

备份文件所在的目录路径,即需要处理的目标目录。

2.修改自建数据库配置文件/data/my_57_zzx.cnf

Undo 日志表空间数量,必须与原数据库(备份中的 backup-my.cnf)一致,否则会导致恢复失败。(具体目录自行修改)

阿里云RDS MySQL物理备份文件恢复到自建数据库_第2张图片

cat /data/zzx/backup-my.cnf | grep innodb_undo_tablespaces
innodb_undo_tablespaces=0

vim /data/my_57_zzx.cnf
#修改如下内容。(没有就添加)
innodb_undo_tablespaces=0
innodb_undo_directory=/data/mysql5.7_zzx		#数据目录

--------------------------------------------------------


# my_57_zzx.cnf (合并后的完整配置)
[client]
port            = 3306
socket          = /data/mysql5.7_zzx/mysql.sock

[mysqld]
# 基础设置 (来自自建数据库配置)
port            = 3306
user            = mysql
basedir         = /usr/local/mysql
datadir         = /data/mysql5.7_zzx
tmpdir          = /data/mysql5.7_zzx
socket          = /data/mysql5.7_zzx/mysql.sock
log-bin         = /data/mysql5.7_zzx/mysql-bin
relay-log       = /data/mysql5.7_zzx/relay-bin
log-error       = /data/mysql5.7_zzx/error.log
slow-query-log-file = /data/mysql5.7_zzx/slow.log


3.复制数据到自建数据库

  • 复制备份数据到目标目录

将预处理后的备份文件(/data/zzx/)复制到自建数据库配置的 数据目录(即 /data/mysql5.7_zzx)。

  • 自动处理文件结构
    • 重建 InnoDB 表空间文件(如 ibdata1ib_logfile*)。
    • 复制所有数据库文件(.frm.ibd*.MYD*.MYI 等)。
innobackupex --defaults-file=/data/my_57_zzx.cnf --copy-back /data/zzx
#为数据目录授权
chown -R mysql:mysql /data/mysql5.7_zzx1

参数解释:

参数

含义

--defaults-file

读取自建数据库的配置,获取 datadir 路径。

--copy-back

执行复制操作,XtraBackup工具将备份解压目录/data/zzx数据恢复到自建数据库的数据目录中。

启动数据库

恢复后直接启动的前提条件
  1. 正确执行恢复流程
    • 已完成 解压备份 → 预处理日志 → 复制到数据目录 的完整流程(参考之前的回复)。
    • 数据目录(如 /data/mysql5.7_zzx)已包含恢复后的所有文件(如 ibdata1ib_logfile*、数据库文件夹等)。
  1. 配置文件一致性
    • my_57_zzx.cnf 中的关键参数(如 innodb_log_file_sizeinnodb_undo_tablespaces)与原数据库备份中的 backup-my.cnf 一致。
    • datadir 指向恢复后的数据目录(如 /data/mysql5.7_zzx)。

1.启动MySQL进程。

在使用 XtraBackup 恢复物理备份后,不需要再次初始化数据库,因为备份文件中已包含完整的数据库文件结构和数据。直接启动数据库即可

#启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/my_57_zzx.cnf &
#关闭
/usr/local/mysql/bin/mysqladmin  -udba_rds -p -S /data/mysql5.7_zzx/mysql.sock shutdown 
#强制关闭,应先终止父进程(mysqld_safe),而非直接杀子进程(mysqld)
ps -ef|grep mysql

参数

含义

--defaults-file

自建数据库的配置文件路径。

--user

启动数据库的用户。固定为mysql,无需修改。

--datadir

启动数据库使用的数据目录

连接数据库并验证

如果环境变量没有添加mysql,就需要指定完整路径:MySQL 服务器安装在/usr/local/mysql/bin目录下

/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql5.7_zzx/mysql.sock

#或者临时添加环境变量
export PATH=$PATH:/usr/local/mysql/bin

一些问题:

  1. 备份文件过大耗时长,堡垒机会断开连接,用screen命令持久化会话,防止中断
  • 后台运行程序(断开连接后仍继续执行)
  • 多窗口终端会话管理
  • 远程会话恢复(如 SSH 断开后重新连接)
yum install screen
screen [-S session_name]  # 创建带名称的会话,Ctrl+Alt+D,退出会话
screen -ls								#列出所有会话
screen -r session_name  # 按名称恢复
screen -r session_id    # 按ID恢复
screen -X -S session_id quit  # 按ID删除
screen -X -S session_name quit  # 按名称删除
  1. 若使用 tar 解压备份文件,默认不支持断点续传,重新解压
  2. 数据在进行物理备份的时候会产生日志文件,备份结束后会删除,如果系统盘空间不足,可以将日志路径修改到数据盘

阿里云RDS MySQL物理备份文件恢复到自建数据库_第3张图片

你可能感兴趣的:(阿里云RDS MySQL物理备份文件恢复到自建数据库)