2013-12-13 36 views
4

我使用mysqldump将两个相同的数据库(表名和表结构相同)导出到两个.sql文件中。我想将它们合并成一个文件。但是,两个数据库在每个表之前都有一个“Drop table”行。这意味着如果我导入db1,然后导入db2,那么在导入db2表之前,db1表会被删除。MySQL导入 - 如何忽略删除表如果存在行?

文件很大,我无法在编辑器中打开它们。另外,每个数据库中有50个表格。

如何在mysql导入过程中忽略Drop table命令?

+0

编辑文件和评论这些sommands - > http://dev.mysql.com/doc/refman/5.1/en/comments.html – krokodilko

+0

的文件是巨大的。将无法在编辑器中打开它们。另外,每个数据库中有50个表格。 – zenCoder

回答

11

如果你不想让转储再次和你使用Linux,你可以去:

awk '!/^DROP TABLE IF EXISTS/{print}' <dump.file> | mysql <db_name> 

如果你想再次转储数据,您应该通过--skip-add-drop-table到mysqldump的效用。

1

我想我不明白为什么DROP TABLE语句应该有问题,或者为什么您需要合并两个IDENTICAL数据库的转储。

也就是说,你应该在初始转储中不添加DROP TABLE。这将通过标志使用您的mysqldump命令被控制在http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

这在机制的文档指出可能意味着你需要的,如果你正在使用默认选项(默认是仿佛--opt标志传递运行)使用--skip-opt标志。然后您需要指定您仍然想使用的--opt内的所有标志。

+0

这些转储无法重新创建。从结构上讲,它们是相同的。 – zenCoder

9

当您使用mysqldump时,您只需要添加--skip-add-drop-table选项。

$ mysqldump --databases --skip-add-drop-table -u root db1 > /tmp/qqq.2 

所以,他们也不会在sqlDROP TABLE IF EXISTS文件。

看到docs of mysql on --skip-add-drop-table