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).
精彩评论