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

时间:2009-05-13 17:33:32

标签: mysql sql mysqldump mysql-error-1049 mysql-error-1007

我很困惑如何导入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 个答案:

答案 0 :(得分:49)

这是MySQL的已知错误

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 user -p -h localhost -D database -o < dumpfile.sql

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

答案 1 :(得分:38)

打开sql文件并注释掉尝试创建现有数据库的行。

答案 2 :(得分:11)

听起来您的数据库转储包含用于创建数据库的信息。所以不要给MySQL命令行一个数据库名称。它将创建新数据库并切换到它进行导入。

答案 3 :(得分:4)

如果您使用直接管理员或cpanel创建数据库,则必须使用记事本或记事本++编辑sql,并在第22行中将CREATE DATABASE命令更改为CREATE DATABASE IF NOT EXISTS

答案 4 :(得分:0)

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