当我尝试通过putty在MYSQL中恢复数据库时发生以下错误。
命令:mysql -u root -p db1<dbname.sql ;
第7904行的错误1(HY000):无法创建/写入文件 './ dbname/db.opt'(错误代码:2)
是什么原因?
答案 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.6)tmpdir
中的值未被考虑或未被考虑过。从我预期的地方拉出来。
MySQL实际上是在以下某个位置创建临时文件:
我必须创建这些目录并将所有权更改为mysql:mysql。
答案 3 :(得分:0)
您可以在MySQL手册中找到有关此错误的帮助:http://dev.mysql.com/doc/refman/5.5/en/cannot-create.html
答案 4 :(得分:0)
我已经从“ db1”备份并恢复到“ db2” 因此在转储文件中必须使用sed将“ db1”更改为“ db2”。
一切正常。