在Django项目中运行syncdb失败:无法创建/写入文件
当我运行以下代码时:
$ python manage.py syncdb
我得到的输出是:
Creating table auth_permission
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager
utility.execute()
File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 303, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 222, in execute
output = self.handle(*args, **options)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 351, in handle
return self.handle_noargs(**options)
File "/Library/Python/2.6/site-packages/django/core/management/commands/syncdb.py", line 78, in handle_noargs
cursor.execute(statement)
File "/Library/Python/2.6/site-packages/django/db/backends/util.py", line 19, in execute
return self.cursor.execute(sql, params)
File "/Library/Python/2.6/site-packages/django/db/backends/mysql/base.py", line 84, in execute
return self.cursor.execute(query, args)
File "build/bdist.macosx-10.6-universal/egg/MySQLdb/cursors.py", line 173, in execute
File "build/bdist.macosx-10.6-universal/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
_mysql_exceptions.InternalError: (1, "Can't create/write to file '/usr/local/mysql/data/wzhere/auth_permission.MYI' (Errcode: 2)")
有没有什么想法可以帮助我调试?我已经给了数据库用户所需的所有权限,但我不太确定MySQL到底在卡什么。
更新: 这里的问题是我安装了多个版本的MySQL(第一次安装的是32位,后来意识到应该安装64位),虽然我按照一些卸载MySQL的说明去做,但这些说明在Snow Leopard系统上稍有不同。最后我真正进行了卸载和干净安装后,这个问题就解决了。
2 个回答
2
这可能对你有帮助:
agos@server:~$ perror 2
操作系统错误代码 2:没有这样的文件或目录
你的MySQL配置正确吗?试着用mysql
命令自己查询一下。
另外,正如luc在评论中建议的,试试用sqlite。
4
这个问题是关于如何调试一个错误的。正如Agos所提到的,错误代码2表示“没有这样的文件或目录”。你可以去MySQL的数据目录看看,确认一下那个目录是不是存在,并且权限设置是否正确。
shell> cd /usr/local/mysql/data/
shell> ls -ld *
drwx------ 17 geert admin 578 Oct 1 19:33 someabstract
上面的操作应该能给你列出一些目录(这些就是MySQL的数据库)以及它们的权限。特别要检查一下“wzhere”这个目录。这个错误信息确实有点奇怪。
(换一个Django的数据库后端在这种情况下是没有用的。)