MySQL导入 - 如果存在行,如何忽略Drop表?

时间:2013-12-13 18:45:32

标签: mysql database

我使用mysqldump将2个相同的数据库(表的名称和结构相同)导出为两个.sql文件。我想将它们合并到一个文件中。但是,两个数据库在每个表之前都有一个“Drop table”行。这意味着如果我导入db1然后导入db2,则在导入db2表之前删除db1表。

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

如何在mysql导入期间忽略Drop table命令?

3 个答案:

答案 0 :(得分:24)

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

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

因此,DROP TABLE IF EXISTS个文件中不会sql

请参阅docs of mysql on --skip-add-drop-table

答案 1 :(得分:14)

如果您不想再次进行转储并且使用的是Linux,则可以使用:

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

如果要再次转储数据,则应将--skip-add-drop-table传递给mysqldump实用程序。

答案 2 :(得分:1)

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

话虽如此,您可能不应该在初始转储中添加DROP TABLE。这将通过mysqldump命令中的标记使用来控制,如http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

中的文档中所述。

这可能意味着如果您使用默认选项,则需要使用--skip-opt标志(默认为运行,就像传递--opt标志一样)。然后,您需要在--opt中指定您仍想使用的所有标记。