RDS MySQL 5.x 物理备份文件恢复到自建数据库(单表)
思路
阿里云文档,详细的说明了 RDS MySQL 物理备份文件恢复到自建数据库的过程,但是市全部数据库的恢复,有的时候我们只需要恢复单表即可。这里记录一下。
- 首先通过备份文件获取待恢复表的 .idb 文件
- 将 .idb 恢复到自建数据库
1.获取待恢复表的 .idb 文件
-
安装备份恢复工具Percona XtraBackup。下载页面
获取 percona-xtrabackup-24_2.4.29-1.bookworm_amd64.deb 后安装 -
安装解压工具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
- 下载备份文件
wget -c 'https://****.bak.rds.aliyuncs.com/****_test_qp.xb?****' -O test_qp.xb
- 解压备份文件
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;
- 创建一张表,表结构与原表结构一致
CREATE TABLE <table_name> ...;
要注意字符集,数据库引擎,数据库版本都要劲量一直,防止有奇怪的问题产生。
- 删除刚刚新建的表的表空间
ALTER TABLE <table_name> DISCARD TABLESPACE;
- 复制 .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
- 重新导入表空间
ALTER TABLE <table_name> IMPORT TABLESPACE;

浙公网安备 33010602011771号