提问者:小点点

还原使用--no-create-info创建的mysqldump并希望跳过当前数据库中不存在的表


我有一个使用--no-create-info选项创建的mysqldump备份。我想将它还原到一个没有特定表的新数据库(从目标数据库中删除大约50个表,因为它们不再需要)。

因此,我得到的表'table_name'不存在的原因显而易见。

那么MySQL还原到备份文件中没有所有表的数据库的方法是什么。

我可以使用--insert-ignore来避免这种失败,但我怀疑这也可能忽略一些真正的错误,如数据类型不匹配等。


共1个答案

匿名用户

显然,不能向不存在的表中插入行。

要还原转储文件中的数据,您需要首先创建这些表。您可以返回到源MySQL实例,并使用mysqldump--no-data转储这些表定义

如果您不关心数据,并且只想为确实存在的表还原数据,那么您可以在尝试导入该脚本之前过滤掉INSERT语句。

例如,可以使用grep-v消除行。

也可以使用sed删除“--Dumping data for tabletableName”和下一个表之间的行。

如果您不想过滤数据,但又不关心为不存在的表还原数据,则可以使用正确的字段创建虚拟表,但使用BLACKHOLE storage engine定义表,因此插入实际上不会导致保存任何数据。

还有一个选择:使用mysql--force导入转储文件,这样即使在某些插入操作中出错,它也能继续运行。