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

Bry*_*ock 83 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' 
Run Code Online (Sandbox Code Playgroud)

如果我以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
Run Code Online (Sandbox Code Playgroud)

然后再次尝试导入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
Run Code Online (Sandbox Code Playgroud)

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

Max*_*and 49

这是MySQL的一个已知错误.

错误42996 错误40477

你可以看到这是自2008年以来的一个已知问题,他们还没有修复它!

周围的工作
首先需要创建要导入的数据库.它不需要任何表格.然后您可以导入数据库.

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

  2. 创建数据库并退出

    mysql> DROP DATABASE database;  
    mysql> CREATE DATABASE database;  
    mysql> Exit  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从转储文件导入所选数据库
    C:\>mysql -u user -p -h localhost -D database -o < dumpfile.sql

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

  • 我很感激答案.它现在是2012年,它似乎仍然存在,因为我使用你的答案让我的wordpress数据库恢复到一个新的服务器(但请注意,你的MySQL表示缺少结尾';'.; .-) (2认同)
  • 2022 年,bug 仍然存在;) (2认同)

Bjo*_*orn 38

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

  • @BryanWheelock我认为更好(可工业化)的选项不是在你的命令中选择数据库,所以它变成:"mysql -u username -p -h localhost <dumpfile.sql".database_name是可选参数.如果转储文件包含"create database"指令,则会创建该指令. (8认同)

Pau*_*lin 12

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