关系数据库MySQL版支持将实例产生的物理备份文件恢复到自建数据库。
操作场景
- 如果您暂时不再使用关系数据库MySQL版,您可以使用本方法将实例的物理备份恢复到自建数据库从而保留实例中的数据。
- 如果您的实例已注销,而您又保留有下载好的物理备份文件,您可以使用本方法将实例的物理备份恢复到自建数据库。
前提条件
- 实例使用对象存储来保存备份,使用备份机存放的备份暂不支持直接下载。
- 实例未开启透明数据加密,开启透明数据加密的实例暂不支持进行备份操作。
影响
- 如果您的自建数据库正在运行其他业务,将物理备份恢复到此数据库后,原有业务将不可用。建议您将物理备份恢复到无其他业务的数据库。
- 本文介绍的恢复方案是将数据恢复到一个新建的数据库数据目录中,对自建数据库中原数据无影响。
注意
建议执行恢复任务前,确认自建的MySQL数据库版本包与当前备份的数据库实例的版本包一致。由于不同版本包之间的特性差异可能导致恢复失败。如果您需要获取和当前备份数据库实例一致的版本可提单进行咨询。
在执行恢复任务前,请确保当时备份的数据库实例中不存在与自建数据库同名的数据库或者表,以防数据覆盖造成的数据丢失。
在执行恢复任务时,如果您因某种原因中断了恢复任务,可能导致数据恢复失败。
操作步骤
1. 准备工作
1.1 环境准备
- 本文以
CentOS Linux release 7.9.2009
系统为例,其他Linux发行版本请根据实际情况适配相关命令。 - 在进行恢复操作之前您需要部署自建MySQL数据库服务,其中MySQL大版本需和备份文件源实例的大版本相同。
1.2 工具准备
-
安装qpress
您可以根据您主机的CPU架构下载相适配的qpress可执行文件,或编译源码获得可执行文件 qpress,之后执行如下操作给予qpress文件可执行权限并将qpress放入path。
# 给予qpress文件可执行权限 sudo chmod 775 qpress # 将qpress文件拷贝到/usr/bin中 sudo cp qpress /usr/bin/
-
安装Percona XtraBackup
您需要根据MySQL版本和您使用的Linux发行版本来下载相适配的Percona XtraBackup,MySQL5.7建议使用Percona XtraBackup 2.4.7,MySQL8.0 建议使用 Percona XtraBackup80 8.0.33。
# 5.7 sudo yum localinstall -y percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm #8.0 sudo yum localinstall -y percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm
2. 下载备份文件
您可以参考下载备份来下载文件并将文件传输到待恢复的主机。
3. 解压备份文件
下载的备份文件文件名中无后缀信息,文件格式实际为 .qp.xb
,在进行恢复操作之前需要对下载的文件进行解压。此处假设下载的备份文件名为test_bk_file,解压路径为/data/bk_data,请跳转到下载文件所在路径执行以下命令。
## 步骤一:创建备份目录,此目录可根据需求更改
sudo mkdir -p /data/bk_data
## 步骤二:解包
sudo xbstream -x -v -C /data/bk_data < test_bk_file
## 步骤三:解压缩
# 5.7
innobackupex --decompress --remove-original /data/bk_data
# 8.0
xtrabackup --decompress --remove-original --target-dir=/data/bk_data
4. 恢复数据
4.1 恢复前数据准备
执行以下命令准备恢复数据
## 5.7
innobackupex --defaults-file=/data/bk_data/backup-my.cnf --apply-log /data/bk_data
## 8.0
xtrabackup --defaults-file=/data/bk_data/backup-my.cnf --prepare --target-dir=/data/bk_data
4.2 修改自建数据库配置文件
-
编辑数据库配置文件,/etc/my.cnf为自建数据库的配置文件,可根据实际情况替换路径。
# /etc/my.cnf为自建数据库的配置文件,可根据实际情况替换路径 sudo vim /etc/my.cnf
-
修改datadir为想要放置mysql数据的路径,需确保datadir指向路径存在且为空。
datadir = /data/your_newdata
-
(8.0可跳过此步骤)MySQL5.7还需要修改以下配置
# 此参数定义了undo logs的文件数量 innodb_undo_tablespaces=3 # 此参数定义了undo logs的路径 innodb_undo_directory=/data/your_newdata
注意:参数
innodb_undo_tablespaces
需和/data/bk_data/backup-my.cnf
中的配置相同,您可通过cat /data/bk_data/backup-my.cnf | grep innodb_undo_tablespaces
来查询备份配置中该变量的值。
4.3 恢复数据
执行以下命令恢复数据。
# 5.7
sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /data/your_newdata
# 8.0
sudo xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/your_newdata
5. 启动数据库
-
(本步骤可选)在关系数据库MySQL版的参数管理中查看lower_case_table_names的值,查看方法请参考参数设置,在修改自建数据库配置文件/etc/my.cnf中修改参数lower_case_table_names的值和查询结果保持一致。
lower_case_table_names = 1
-
修改数据目录权限为mysqld启动用户,此处以mysql为例。
sudo chown mysql:mysql /data/your_newdata
-
执行以下命令以启动mysqld服务。
sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/your_newdata &
6. 连接数据库并验证
-
执行以下命令连接数据库。
mysql -h{自建数据库所在主机ip} -P{数据库服务端口} -u{源关系数据库MySQL版实例的用户名} -p{对应密码}
-
执行如下命令检查是否有源实例中的数据库。
show databases;