首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个巨大的.sql文件中提取/拆分SQL语句,以仅获取特定的表?

如何在一个巨大的.sql文件中提取/拆分SQL语句,以仅获取特定的表?
EN

Stack Overflow用户
提问于 2013-06-20 17:35:11
回答 3查看 5.2K关注 0票数 3

我有一个22 of的.sql文件(100+表),假设我只需要其中的5个。我尝试过所有oracle工具,但它们都不能仅提取特定的表。

有没有办法只提取特定的表?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-20 20:13:01

我偶然发现了一个非常有趣的脚本,它为存在于巨大的主.sql中的每个表创建一个单独的.sql: MYSQLDUMPSPLITTER.sh

http://kedar.nitty-witty.com/blog/mydumpsplitter-extract-tables-from-mysql-dump-shell-script

如果链接是404,请参阅github gist here

票数 4
EN

Stack Overflow用户

发布于 2013-06-20 18:57:12

如果文件是用mysqldump创建的,我相信您可以使用文本实用程序提取CREATE TABLE和INSERT语句。

具体地说,您可以使用sed addresses提取两个正则表达式之间的所有行。对于22G的文件,它不会有问题。

我转储了我的沙箱数据库(一个小型数据库,我主要用于回答SO上的问题)进行测试。

在我在这里安装的MySQL版本中,这个sed单行程序提取表"DEP_FACULTY“的CREATE table语句和INSERT语句。

代码语言:javascript
复制
$ sed -n -e '/^CREATE TABLE `DEP_FACULTY`/,/UNLOCK TABLES/p' mysql.sql > output.file

此正则表达式标识CREATE TABLE语句的开始。

  • /^CREATE表DEP_FACULTY/

CREATE TABLE语句似乎总是紧跟在INSERT语句之后。所以我们只需要一个正则表达式来标识INSERT语句的结尾。

  • /UNLOCK TABLES/

如果您的mysqldump版本产生相同的输出,您应该能够替换表名,将输出文件的名称更改为有意义的名称,然后去喝杯咖啡。

票数 7
EN

Stack Overflow用户

发布于 2014-04-25 15:42:49

如果您创建了转储,那么应该返回并使用--tables选项创建一个新转储。

mysqldump --tables table1 table2 table3

如果没有,那么就加载整个数据库,执行上述操作,然后将其清除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17210239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档