django连接mysql出现OperationalError

django当中需要使用mysql作为数据库,创建好Model之后执行以下命令创建表

python manage.py migrate

但是执行的时候遇到错误:

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

原因分析:

我们在连接mysql的时候,如果host是localhost, 就会使用Unix Domain Socket来连接, MySql默认的sock文件路径是/tmp/mysql.sock, 可以通过打开/etc/my.cnf确认。

解决方案

1.修改HOST

打开settings.py文件,找到DATABASESHOST字段。
有两种修改方案:

  • localhost改成127.0.0.1, 使用内网连接
  • localhost改成/var/lib/mysql/mysql.sock
 DATABASES = {
     'default': {                                                                                                               
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'xxx',
          'USER': 'root',
          'PASSWORD': 'passwd',
          'HOST':'127.0.0.1', # 或者 `/tmp/mysql.sock`
          'PORT':'3306',
      }
  }

2. 修改mysql的sock文件路径

vi etc/my.cnf

将sock路径变更为/var/lib/mysql/mysql.sock

socket          = /tmp/mysql.sock

重启MySql服务。
Centos机器上

systemctl restart mysqld

3. 数据库连接指定sock路径

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'root',
        'PASSWORD': 'passwd',
        'OPTIONS': {
            "unix_socket": "/tmp/mysql.sock",
        },
    }
}

你可能感兴趣的:(django连接mysql出现OperationalError)