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",
        },
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1BLOG文档结构图 ...
    小麦苗DB宝阅读 10,620评论 0 31
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,861评论 0 3
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,060评论 0 19
  • 前些日子遇到同学小李,她哭诉着,没有男朋友的苦恼,工作也不顺利,随后眼睛一亮“你有合适的可以给我介绍...
    辣妈娜阅读 901评论 7 21