目录
一、运行环境
二、需求说明
三、思路分析
五、具体方案
六、恢复表数据
一、运行环境
系统: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文件也是一种不错的选择,反之也一样。搞运维就要,灵活运用,提高效率。