RDS MySQL 5.x 物理备份文件恢复到自建数据库(单表)

阿里云文档

思路

阿里云文档,详细的说明了 RDS MySQL 物理备份文件恢复到自建数据库的过程,但是市全部数据库的恢复,有的时候我们只需要恢复单表即可。这里记录一下。

  1. 首先通过备份文件获取待恢复表的 .idb 文件
  2. 将 .idb 恢复到自建数据库

1.获取待恢复表的 .idb 文件

  1. 安装备份恢复工具Percona XtraBackup。下载页面
    获取 percona-xtrabackup-24_2.4.29-1.bookworm_amd64.deb 后安装

  2. 安装解压工具qpress。

wget "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230406/flxd/qpress-11-linux-x64.tar"
tar -xvf qpress-11-linux-x64.tar
sudo chmod 775 qpress
sudo cp qpress /usr/bin
  1. 下载备份文件
wget -c 'https://****.bak.rds.aliyuncs.com/****_test_qp.xb?****' -O test_qp.xb

  1. 解压备份文件
mkdir /var/mysql_bkdata
cat test_qp.xb | xbstream -x -v -C /var/mysql_bkdata/

由于只要恢复单表,这里进入 /var/mysql_bkdata/ 将不要的数据库,表都删除掉,节约时间

innobackupex --decompress --remove-original /var/mysql_bkdata/

上面命令执行后我们就可以在 /var/mysql_bkdata/数据库名 下找到我们需要的 .idb 文件了

2. 将 .idb 恢复到自建数据库

docker 起一个和生产环境一样的数据库,注意版本,一定要一样,防止出问题

docker run -p 3306:3306 --name mysql \
-e "TZ=Asia/Shanghai" \
-v /my/own/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
-d mysql:5.7 --lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

进入docker本地客户端设置远程访问账号
$ sudo docker exec -it mysql bash
$ mysql -uroot -p123456
mysql> grant all privileges on *.* to root@'%';
mysql> flush privileges;

  1. 创建一张表,表结构与原表结构一致
CREATE TABLE <table_name> ...;

要注意字符集,数据库引擎,数据库版本都要劲量一直,防止有奇怪的问题产生。

  1. 删除刚刚新建的表的表空间
ALTER TABLE <table_name> DISCARD TABLESPACE;
  1. 复制 .idb 文件到数据库文件夹下,修改权限和用户组
cp <table_name>.ibd /var/lib/mysql/<database_name>
cd /var/lib/mysql/<database_name>

ls -ln
## 看 .frm 文件的组和用户是什么下面 xxx:xxx 就填什么

chown xxx:xxx <table_name>.ibd
chmod 660 <table_name>.ibd
  1. 重新导入表空间
ALTER TABLE <table_name> IMPORT TABLESPACE;
posted @ 2026-01-09 09:54  LiuChengloong  阅读(2)  评论(0)    收藏  举报