Cygwin上的MySQLdb

时间:2014-05-29 10:41:20

标签: python mysql mysql-python

在Cygwin和Python上使用MySQLdb,我得到以下错误。我不想在Cygwin上安装MySQLDB。有没有办法,我可以使用MySQL的Windows版本,只需连接到它。

Python 2.7.5 (default, Oct  2 2013, 22:34:09)
[GCC 4.8.1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> db = MySQLdb.connect(host="localhost", user="root", passwd="root" )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket      '/var/run/mysql.sock' (9)")

我创建了my.cnf文件,如下所示

$ cat /etc/my.cnf
[client]
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

我还创建了mysql.sock文件,如下所示。

$ pwd
/var/run/mysql

$ cat mysql.sock
[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

我不知道还需要运行什么。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

套接字应该在启动期间由MySQL服务器自动创建,但它并不总是在MySQLdb期望的文件夹中。您可以在/tmp/mysql.sock找到它,它是--socket命令行参数的default value。如果没有,您可以使用以下bash command搜索它:

$ find / -name 'mysql.sock' 2>/dev/null

如果默认情况下MySQLdb/var/lib/mysql/mysql.sock查找套接字,但您发现套接字在其他位置,则可以使用unix_socket参数连接函数,例如:< / p>

conn = MySQLdb.connect(user=myuser, passwd=mypass, unix_socket='/tmp/mysql.sock')

hostport参数是可选的,通常当你想通过unix套接字连接时,你可以省略它们,因为你想要默认的主机并且你没有使用TCP端口。

答案 1 :(得分:0)

我还没有找到完整的解决方案,但如果您使用“127.0.0.1”而不是“localhost”,它将会起作用。不知道为什么,但是localhost与cygwin的curl一起使用,但不适用于mysql或python。

更新:您无需定义.cnf或.sock文件