从Mysql备份中恢复单个表

@lianst  September 2, 2017

因为云平台的备份是把库中所有的表都打包成一个 .sql文件,然而这一个.sql文件大约有20G,现阶段的方法是把.sql文件source到数据库数据处理机器上,然后再根据需求提出需要的表。每次这个操作都需要大约2个多小时,太耗时。闲暇时间,Google到了一个大神写的几行代码,经过实验确实很好用。下面就分享出来,仅供参考。

思路(原谅我也理解了好一会儿):

主要使用sed命令来实现,加上-n,-e参数把打印的结果追加到一个文件中,就得到了想要的表的内容。

一般情况下我们使用sed打印指定行的内容是:

[root@bj ~]# cat -n sed.txt 
     1    aaa
     2    bbb
     3    ccc
     4    ddd
     5    eee
     6    fff
     7    ggg
     8

-n:只打印符合条件的行
-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

不加-n的话,不仅打印结果行,也打印整个文本的内容。

 
[root@bj ~]# sed -n '1,5p' sed.txt 
aaa  
bbb  
ccc  
ddd  
eee  

原始导出的lianst.sql文件内容:

我们使用如下sed命令从原始sql中导出wp_comments表:

意思是:打印DROP TABLE.*wp_comments行到UNLOCK TABLES的内容,并以追加重定向的方式追加到lianst.wp_comments.sql文件中
DROP TABLE.*wp_comments中间的.*是正则所有的意思

sed -n -e '/DROP TABLE.*wp_comments/,/UNLOCK TABLES/p' lianst.sql >> lianst.wp_comments.sql  

结果如下:

此时,lianst.wp_comments.sql 就是我们从原始备份sql(lianst.sql)中导出的wp_comments表的sql语句。接下来我们就可以针对这一个表来进行恢复了。

#登陆Mysql服务器
[root@bj ~]# mysql -uroot -p
Enter password:  
mysql> source lianst.wp_comments.sql;  

添加新评论