码农行者 码农行者
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

DeanWu

软件工程师
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据库

    • mysql

      • Mysql 免安装版配置 window环境搭建
      • python的MySQLdb模块 连接 mysql 错误
      • postgresql

      • redis

    • 机器学习

    • 杂谈

    • 更多
    • 数据库
    • mysql
    DeanWu
    2016-03-08
    目录

    python的MySQLdb模块 连接 mysql 错误

    # Q & A:

    今天在使用python直接链接数据库时报错 _mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)") 代码:

    db = MySQLdb.connect(host='localhost',
                         port=3306,
                         user='root',
                         passwd='root',
                         db='mydb')
    

    错误:

    Traceback (most recent call last):
      File "./data_db.py", line 5, in < module>
        db='mydb')
      File "/usr/local/env/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
      File "/usr/local/env/lib/python2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
    _mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")
    

    # 原因:

    从网上查找原因找到如下描述:

    因为我们连接mysql的时候,host用的是localhost, 实际用的是UNIX Domain Socket(具体见参考文献(1))来进行通信的。

    我们知道,UNIX Domain Socket的地址是一个socket类型的文件在文件系统中的路径,如果这个路径不存在的话,连接的时候就会失败。

    上面提示的错误原因是”Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)”,

    从字面意思上来看,是说无法通过’/var/lib/mysql/mysql.sock’这个socket来连接本地的mysql sever,这时候问题基本就比较明显了,

    应该是mysql配置的本地连接的socket不是’/var/lib/mysql/mysql.sock’这个路径的原因。

    # 解决方案:

    (1)在python MySQLdb连接的时候,指定所用的unix_socket

    db = MySQLdb.connect(host='localhost',
                         port=3306,
                         user='root',
                         passwd='root',
                         db='mydb',
                         unix_socket='/tmp/mysql.sock')
    

    (2)修改本地mysql server的UNIX Domain Socket

    # The following options will be passed to all MySQL clients
    [client]
    #password       = your_password
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
     
    # The MySQL server
    [mysqld]
    bind-address = your ip
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
    

    (3)修改本地mysql server支持远程访问(具体见参考文献(2)),采用普通socket进行连接

    db = MySQLdb.connect(host='your ip', port=3306, user='root', passwd='root', db='mysite')

    # 参考

    • http://www.wuzesheng.com/?p=2234 (opens new window)
    #Mysql
    上次更新: 2023/03/19, 15:09:33
    Mysql 免安装版配置 window环境搭建
    centos 7 下 postgreSQL 10 安装记录

    ← Mysql 免安装版配置 window环境搭建 centos 7 下 postgreSQL 10 安装记录→

    最近更新
    01
    chromebox/chromebook 刷bios步骤
    03-01
    02
    redis 集群介绍
    11-28
    03
    go语法题二
    10-09
    更多文章>
    Theme by Vdoing | Copyright © 2015-2024 DeanWu | 遵循CC 4.0 BY-SA版权协议
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式