目录

一、运行环境

二、需求说明

三、思路分析

五、具体方案

六、恢复表数据

一、运行环境

系统:CentOS7.3

数据库:MySQL 8.0.21

二、需求说明

线上有个表的数据被误操作了很多,无法通过bin-log进行具体的恢复。所以当前我们需要从全库备份文件(mysqldump导出的64GB文件)中恢复指定表的数据。

三、思路分析

备份文件是整个数据库备份的,但是我只想要那一个表。最粗暴的办法,就是把这个sql文件,导入一个库,这样导就是把所有表都导进来,然后再对需要的表进行操作,但是费时费力。

我们现在想的就是从整个sql文件中只拿一个表,我们可以利用linux命令的优势对文件进行操作,然后生成一个新的文件(就是我们想要的)。

五、具体方案

​ 先定位到备份sql文件所在目录,用cat grep方法把指定表拿出来,然后写入一个本地文件中。 ​

cat MySQL-FULL-20230726.sql | grep userinfo > userinfo.sql

MySQL-FULL-20230726.sql 是数据库全备文件

userinfo 是指定的表名

> userinfo.sql 是查找处理后生成的新文件

打开新的sql文件,其实我们只需要INSERT INTO `userinfo` VALUES ( 这一行的语句就行,这行是插入全部数据到表(表需要存在)。

六、恢复表数据

1.先通过下面sql语句备份当前的表

create table  userinfo-bak select * from userinfo;

userinfo-bak是新表

userinfo是当前表(旧表)

2.清空当前表数据(注意该操作,删除后不可rollback)

truncate userinfo;

3.插入数据

复制刚刚的insert into语句,执行完成就可以了。

题外话:linux与windows:有时用linux来处理windows文件也是一种不错的选择,反之也一样。搞运维就要,灵活运用,提高效率。

Logo

一站式 AI 云服务平台

更多推荐