3

我有一个 22GB 的 .sql 文件(100 多个表),我只需要,比如说,其中 5 个。我已经尝试了所有的 oracle 工具,但它们都不能只提取特定的表。

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

4

3 回答 3

7

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

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

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

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

$ sed -n -e '/^CREATE TABLE `DEP_FACULTY`/,/UNLOCK TABLES/p' mysql.sql > output.file

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

  • /^创建表DEP_FACULTY/

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

  • /解锁桌子/

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

于 2013-06-20T10:57:11.737 回答
4

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

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

如果链接是 404,请在此处查看 github gist 。

于 2013-06-20T12:13:00.650 回答
0

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

mysqldump --tables 表 1 表 2 表 3

如果您没有然后只是加载整个数据库,请执行上述操作,然后将其吹走。

于 2014-04-25T07:42:49.410 回答