开发者

MySQLPython is ignoring my my.cnf file. Where does it get its information?

When I try to use MySQLPython (via SQLAlchemy) I get the error

 File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-x86_64.egg/MySQLdb/connections.py", line 188, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
sqlalchemy.exc.OperationalError: (OperationalError) (2002, "Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' (2)") None None

but no other mysql client on my machine sees it fine!

My my.cnf file states:

[client]
port            = 3306
socket          = /tmp/mysql/mysql.sock

[safe_mysqld]
socket          = /tmp/mysql/mysql.sock

[mysqld_safe]
socket          = /tmp/mysql/mysql.sock

[mysqld]
socket          = /tmp/mysql/mysql.sock
port            = 3306

and the mysql.sock file is, indeed, located in /tmp/mysql

I verified that ~/.my.cnf and /var/lib/mysql/my.cnf aren't overriding it. The mysql5 client program, etc, has no trouble connecting and neither does a groovy/grails installation on the same machine using jdbc/mysql connection

thrilllap-2:~ swirsky$ mysql5
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.1.47 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.0开发者_JS百科0 sec)

mysql> 

Why can't MySQLdb for python figure this out? Where would it look if not the my.cnf files?


Have you tried adding the option read_default_file='~/.my.cnf' to your connect() call, to tell the Python database driver to read your configuration file? I think that otherwise it ignores the file by default.


MysqlDBlib doesn't read /etc/my.cnf by default. Adding read_default_group="client" to the MySQLdb.connect call will make it read the client section.


FWIW: I "fixed" it by changing the .sock file location in my my.cnf to be where MySQLdb wanted it (/opt/local/var/run/mysql5/mysqld.sock) but I hate doing things like that.


connect takes unix_socket as a parameter which is the path to the UNIX socket file. MySQLdb won't read your my.cnf (by design).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜