当我将HOST设置为127.0.0.1时,django报告localhost对用户的访问被拒绝

时间:2014-03-20 02:22:23

标签: mysql django

我的配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'dbname',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': '123123',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306', 
        'OPTIONS': {
            'init_command': 'SET storage_engine=InnoDB',
            'charset' : 'utf8mb4',
            'use_unicode' : True,
        },
    },
}

连接正常。

当我将PASSWORD更改为错误密码时,会显示:

File "/Users/fluke/pyenv/lib/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

当我将HOST更改为无效值时,如" 127.0.0.123"同时保持正确的密码。它显示:

OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.123' (60)")

这意味着django确实使用了我设置的值。但为什么它报告" localhost"而不是" 127.0.0.1" ?

1 个答案:

答案 0 :(得分:0)

通常localhost和127.0.0.1是可以互换的,它们通常意味着相同的东西。此错误看起来表明Django能够联系MySQL服务器,但它无法进行身份验证。

我建议创建一个单独的MySQL用户来使用此应用程序。可以在here找到执行此操作的说明:

然后,在配置中使用这些凭据。像这样:

    'NAME': 'dbname',                      # Or path to database file if using sqlite3.
    'USER': 'NewUserName',                      # Not used with sqlite3.
    'PASSWORD': 'NewPassword',                  # Not used with sqlite3.
    'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not