我有一个 22GB 的 .sql 文件(100 多个表),我只需要,比如说,其中 5 个。我已经尝试了所有的 oracle 工具,但它们都不能只提取特定的表。
有没有办法只提取特定的表?
如果您使用 来创建文件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
产生相同的输出,您应该能够只替换表名,将输出文件的名称更改为有意义的名称,然后去喝杯咖啡。
我刚刚偶然发现了一个非常有趣的脚本,它为巨大的主 .sql 中存在的每个表创建了一个 .sql:MYSQLDUMPSPLITTER.sh
http://kedar.nitty-witty.com/blog/mydumpsplitter-extract-tables-from-mysql-dump-shell-script
如果链接是 404,请在此处查看 github gist 。
如果您创建了转储,那么您应该返回并使用 --tables 选项创建一个新转储。
mysqldump --tables 表 1 表 2 表 3
如果您没有然后只是加载整个数据库,请执行上述操作,然后将其吹走。