将SQL转储文件导入MySQL时出错:未知数据库/无法创建数据库。

89

我不确定如何导入SQL转储文件。在MySQL中,似乎必须先创建数据库才能导入数据库。

database_name尚未创建时,将显示以下错误:

username = 具有原始服务器上数据库访问权限的某个人的用户名。
database_name = 原始服务器上数据库的名称

$ mysql -u username -p -h localhost database_name < dumpfile.sql   
Enter password:  
ERROR 1049 (42000): Unknown database 'database_name' 

如果我以 root 用户身份登录 MySQL 并创建数据库 database_name
mysql -u root  
create database database_name;  
create user username;# same username as the user from the database I got the dump from.  
grant all privileges on database_name.* to username@"localhost" identified by 'password';  
exit mysql

然后尝试重新导入SQL转储文件:

$ mysql -u username -p database_name < dumpfile.sql  
Enter password:  
ERROR 1007 (HY000) at line 21: Can't create database 'database_name'; database exists

我该如何导入SQL转储文件?

5个回答

52

这是一个MySQL已知的bug(known bug)。

Bug 42996
Bug 40477

正如你所看到的,这个问题自2008年以来就已经被发现了,但他们还没有修复它!!!

解决方法
首先需要创建一个数据库来进行导入。不需要任何表格。然后您可以导入您的数据库。

  1. 首先启动您的MySQL命令行(如果需要,应用用户名和密码)
    C:\>mysql -u user -p

  2. 创建您的数据库并退出

    mysql> DROP DATABASE database;  
    mysql> CREATE DATABASE database;  
    mysql> Exit  
    
  3. 从转储文件中导入所选数据库
    C:\>mysql -u 用户名 -p -h localhost -D 数据库名 -o < 转储文件名.sql

您可以将localhost替换为任何要导入的MySQL服务器的IP或域名。 在mysql提示符中使用DROP命令的原因是确保我们从一个空的和干净的数据库开始。


2
感谢您的回答。现在是2012年,看起来这个错误仍然存在,因为我使用了您的答案将我的WordPress数据库恢复到了新服务器上(请注意,您的MySQL命令缺少结尾的“;”符号。;-) - Karl
2
2022年了,但是bug仍然存在 ;) - João Pimentel Ferreira
编写Phing目标时,这真是一件让人头疼的事情。并不是每个人都只在命令行上工作:/ - clockw0rk

41

打开SQL文件,并注释掉试图创建现有数据库的行。


9
我认为一个更好(可工业化)的选择是不在命令中选择数据库,这样它就变成了:"mysql -u用户名 -p -h localhost < dumpfile.sql"。数据库名称是可选参数。如果你的转储文件包含“create database”指令,那么它将被创建。 - toni07
仅仅是为了更详细地解释一下,我的*.sql文件中的第一行是这样的:CREATE DATABASE IF NOT EXISTS `database_name` /*!40100 DEFAULT CHARACTER SET latin1 */;将其更改为(注意在开头的/*):/*CREATE DATABASE IF NOT EXISTS `database_name` /*!40100 DEFAULT CHARACTER SET latin1 */;有效地注释掉了命令,IMPORT应该可以工作了。只需记住要活跃在您想要将IMPORT插入表格的数据库中,否则您可能会遇到麻烦! - ntk4

12

看起来您的数据库转储包括创建数据库的信息。因此,请不要给MySQL命令行提供数据库名称。它将创建新数据库并切换到该数据库以执行导入操作。


4

如果您在DirectAdmin或cPanel中创建数据库,则必须使用记事本或Notepad ++编辑您的SQL,并将第22行中的CREATE DATABASE命令更改为CREATE DATABASE IF NOT EXISTS


0

我使用命令行自己创建了数据库。然后再尝试导入,它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接