我很困惑如何导入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转储文件?
答案 0 :(得分:49)
这是MySQL的已知错误。
正如你所看到的那样,这是自2008年以来一直存在的一个已知问题,而且还没有解决它!
周围工作
首先需要创建要导入的数据库。它不需要任何表格。然后你可以导入你的数据库。
首先启动MySQL命令行(如果需要,请应用用户名和密码)
C:\>mysql -u user -p
创建数据库并退出
mysql> DROP DATABASE database;
mysql> CREATE DATABASE database;
mysql> Exit
从转储文件中导入所选数据库
C:\>mysql -u user -p -h localhost -D database -o < dumpfile.sql
您可以将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)
我使用命令行自己创建数据库。然后尝试再次导入,它可以工作。