1、说明
之前的备份是使用Xtrabackup8做的备份
使用了独立表空间(innodb_file_per_table=1),就可以单独恢复这个表。
2、在备份的目录下执行Prepare
根据自己之前备份的目录,选择执行路径
我之前的备份目录是 /tmp/backup/2023-12-16/full
cd /tmp/backup/2023-12-16/full
xtrabackup --prepare --export --target-dir=. > export.log 2>&1
prepare时带上参数–export,xtrabackup会生成import tablespace需要的文件。
3、查看日志,确认prepare成功。
cat export.log | tail -n 10
显示[Xtrabackup] completed OK!
4、查看表结构
use school;
show create table student\G;
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`学号` char(20) DEFAULT NULL,
`姓名` char(20) DEFAULT NULL,
`性别` char(5) DEFAULT NULL,
`手机号` bigint DEFAULT NULL,
`通信地址` char(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
ERROR:
No query specified
5、将表drop掉,模拟数据丢失的场景。
drop table school.student;
6、创建表结构,并执行discard tablespace命令。
进入库 school
use school;
CREATE TABLE `student` (
`学号` char(20) DEFAULT NULL,
`姓名` char(20) DEFAULT NULL,
`性别` char(5) DEFAULT NULL,
`手机号` bigint DEFAULT NULL,
`通信地址` char(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
执行discard tablespace命令
alter table student discard tablespace;
7、将备份文件copy到实例数据库目录下
将表对应的文件copy到目标实例数据库对应目录下,并修改文件属主权限。如果文件属主权限没有正确设置,下一步import表空间时可能会出错。
进入到之前的备份文件目录
cd /tmp/backup/2023-12-16/full/school
cp ./student.* /opt/lucky/data/data_16303/school
/opt/lucky/data/data_16303/school 这个目录是我当前实例的路径,具体的根据你的实例修改。
修改一下权限
chown -R swadmin:swadmin /opt/lucky/data/data_16303/school
8、import表空间
执行import tablespace命令,确认数据恢复。
alter table school.student import tablespace;
验证数据
select count(*) from school.student;
9、获取表结构语句
以上的操作是根据知道表结构的情况下做的。如果在生产中误删表的,就要使用
使用三方工具在备份文件中再从ibd文件中提取表结构信息之后,转换成建表语句,再按步骤进行恢复。
待更新…