恢复MYSQL db时出错

时间:2012-06-04 06:56:18

标签: mysql mysqldump

当我尝试通过putty在MYSQL中恢复数据库时发生以下错误。

命令:mysql -u root -p db1<dbname.sql ;

  

第7904行的错误1(HY000):无法创建/写入文件   './ dbname/db.opt'(错误代码:2)

是什么原因?

5 个答案:

答案 0 :(得分:10)

这通常意味着您的转储文件包含一个命令,该命令应针对本地上下文中不存在的数据库运行,或者当前用户无权访问该数据库。打开转储文件,查看错误中提到的行,找出发生了什么。

答案 1 :(得分:5)

当源数据库名称与目标数据库名称不同时,我在工作时遇到此错误。我在一台服务器上使用mysqldump db1 > dumpfile转储了一个数据库,并尝试将其导入到mysql db2 < dumpfile的其他服务器上。

结果转储文件有ALTER TABLE db1 ...个语句,这些语句在我命名数据库db2的目标服务器上毫无意义。

可能有一个比这更优雅的解决方案,但我只是在目标服务器上编辑了dumpfile并用db2替换了db1。

答案 2 :(得分:2)

找出Errcode: 2的含义

您可以使用perror实用程序查找错误2的含义:

$ perror 2
OS error code   2:  No such file or directory

更多信息请参阅评论中提及的@Jocelyn链接:http://dev.mysql.com/doc/refman/5.5/en/cannot-create.html

找出./指向

的路径

我们现在知道文件不存在(或者可能无法写入。)错误消息为我们提供了相对路径./,这使得它变得棘手......不会# 39;如果输出完全合格的路径会有帮助吗?呀。

因此,当MySQL导入SQL文件时,它会在文件系统上创建一些临时文件。路径通常由&#34; tmpfile&#34;指定。 MySQL my.cnf文件中的配置选项。您可以通过执行SQL查询快速找到该值:

$ mysql -h127.0.0.1 -uroot -p
# I assume you're now logged into MySQL
mysql> SHOW VARIABLES LIKE '%tmpdir%';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_load_tmpdir | /tmp  |
| tmpdir            | /tmp  |
+-------------------+-------+
2 rows in set (0.00 sec)

确保目录可由mysql用户

编写

根据tmpdir,这意味着MySQL正在尝试创建/tmp/dbnamehere/db.opt。确保此目录存在且由mysql:mysql拥有。您可能必须使用sudo来提升足够高的权限以创建一些目录。

$ chown -R mysql:mysql /tmp/dbnamehere

仍然无法正常工作?尝试其他默认的tmpdir路径

我在我的系统上遇到问题(Ubuntu 12.04 + Vagrant 1.7.2 + Chef 11.something + opscode mysql cookbook 6.0.6tmpdir中的值未被考虑或未被考虑过。从我预期的地方拉出来。

MySQL实际上是在以下某个位置创建临时文件:

  • 的/ var / lib中/ MySQL的/ dbnamehere
  • 的/ var / lib中/ MySQL的默认/ dbnamehere

我必须创建这些目录并将所有权更改为mysql:mysql。

答案 3 :(得分:0)

您可以在MySQL手册中找到有关此错误的帮助:http://dev.mysql.com/doc/refman/5.5/en/cannot-create.html

答案 4 :(得分:0)

我已经从“ db1”备份并恢复到“ db2” 因此在转储文件中必须使用sed将“ db1”更改为“ db2”。

一切正常。