python连接mysql失败_python MySQLdb连接mysql失败(转载)

最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路。关于django,想在这里也额外说一句。django是很优秀的基于python的web开发框架,对于有python基础的后台程序员,如果有要做一些前台的需求,强烈推荐django。下面言归正传。

1. 问题的现象

下面是连接数据库的代码,用的是python的MySQLdb模块:

1

2

3

4

5

db = MySQLdb.connect(host='localhost',

port=3306,

user='root',

passwd='root98',

db='mysite')

下面是运行的时候报的错误:

1

2

3

4

5

6

7

Traceback (most recent call last):

File "./test_db.py", line 12, in < module>

db='mysite')

File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect

File "build/bdist.linux-x86_64/egg/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)")

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’这个路径的原因。接下来我们来验证我们的想法,打开mysql的配置文件(/etc/my.cnf),我们看到如下的内容:

1

2

3

4

5

6

7

8

9

10

11

12

# The following options will be passed to all MySQL clients

[client]

#password = your_password

port = 3306

socket = /tmp/mysql.sock

# The MySQL server

[mysqld]

bind-address = 10.12.22.98

port = 3306

socket = /tmp/mysql.sock

# ...

我们可以看到,本地mysql server配置的Unix Domain Socket是/tmp/mysql.sock,与上面python MySQLdb所用的不一样,这也印证了我们前面的猜想,找到了问题的原因。

3. 解决问题的方法

知道了问题所在,我们就可以对症下药了,下面提供几种可以解决问题的方案:

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

1

2

3

4

5

6

db = MySQLdb.connect(host='localhost',

port=3306,

user='root',

passwd='root98',

db='mysite',

unix_socket='/tmp/mysql.sock')

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

1

2

3

4

5

6

7

8

9

10

11

12

# 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 = 10.12.22.98

port = 3306

socket = /var/lib/mysql/mysql.sock

# ...

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

1

2

3

4

5

db = MySQLdb.connect(host='10.12.22.98',

port=3306,

user='root',

passwd='root98',

db='mysite')

4. 参考文献

python MySQLdb连接mysql时报错

故障现象: >>> import MySQLdb >>> conn = MySQLdb.connect(host=,charset="utf8" ...

python -- MySQLdb连接mysql数据库

1. python安装mysql $ pip install mysql-python 2. 数据库连接程序: import MySQLdb # 打开数据库连接db = MySQLdb.connect ...

Python写入连接mysql失败

执行如下连接数据库的语句: engine = create_engine('mysql://root:root@127.0.0.1/stock?charset=utf8') 报错如下: ImportE ...

使用Python编程语言连接MySQL数据库代码

使用Python编程语言连接MySQL数据库代码,跟大家分享一下: 前几天我用python操作了mysql的数据库,发现非常的有趣,而且python操作mysql的方法非常的简单和快速,所以我把代码分 ...

通过python代码连接MySQL以及插入和显示数据

通过python代码连接MySQL以及插入和显示数据: 数据库huahui创建一个shibie的表,里面有两个varcahr(100)的字段,num和result. import pymysql im ...

使用Navicat Premiun远程连接MySQL失败,报错(10038)

远程连接MySQL失败,可能有一下原因: 1.小伙子/小姑凉注意一下你的ip是否输入正确了!! 2.网络或防火墙问题 1).排查网络问题 使用命令:ping 192.168.1.1 查看网络请求是否超 ...

用python连接mysql失败总结

所用环境:python3,pycharm2018.2.4 先用mysql创建用户并授予相关权限 在我用python连接mysql时,一直提示连接不上,报错原因就是,用户没有被给予相关权限,比如查询,插 ...

Mysqldb连接Mysql数据库(转)

python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...

python如何连接mysql数据库

先花点时间来说说一个程序怎么和数据库进行交互1.和数据库建立连接2.执行sql语句,接收返回值3.关闭数据库连接使用MySQLdb也要遵循上面的几步.让我们一步步的进行. 1.MySQL数据库要用My ...

随机推荐

Mosquitto搭建Android推送服务(二)Mosquitto简介及搭建

文章钢要: 1.了解Mosquitto服务器 2.在Liunx中搭建Mosquitto服务器 3.设置Mosquitto集群 一.Mosquitto简介 一款实现了消息推送协议 MQTT v3.1 的 ...

HDU 2082 找单词 (多重背包)

题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...

stl&lpar;set&plus;stack&rpar; LA 3634 The SetStack Computer

题目传送门 题意:给一些对集合的操作,询问每一次操作后栈顶的集合元素个数 分析:首先{}是空的,每一次add时候,{} -> { {} }变成了有一个元素的集合,利用set和stack,map容 ...

UESTC&lowbar;菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming&lt&semi;Problem L&gt&semi;

L - 菲波拉契数制升级版 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

「Foundation」字符串

一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1)NSArray:OC不可变数组  NSMutableA ...

玩转Web之Json(四)---json与(Object&sol;List&sol;Map)的相互转化

在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担.本文将给出json转化的一系列方法. ...

HDU2451&colon;Simple Addition Expression

Problem Description A luxury yacht with 100 passengers on board is sailing on the sea in the twiligh ...

不需要客户端插件PHP也能实现单点登录

分析CAS原理,构建PHP单点登录 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户 只需要登录一次就 ...

(理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱. 探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不 ...

Mysql&lowbar;临时表

CREATE TEMPORARY TABLE test_info ( test_name ) NOT NULL, test_totail ,) NOT NULL DEFAULT 0.00, test_ ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值