在Django项目中运行syncdb失败:无法创建/写入文件

2 投票
2 回答
1237 浏览
提问于 2025-04-15 18:08

当我运行以下代码时:

$ 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的数据库后端在这种情况下是没有用的。)

撰写回答