Mysql利用备份数据恢复单表

2023-12-17 11:45:22

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文件中提取表结构信息之后,转换成建表语句,再按步骤进行恢复。

待更新…















文章来源:https://blog.csdn.net/weixin_42324463/article/details/135040267
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。