简体   繁体   中英

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.00 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:我通过将my.cnf中的.sock文件位置更改为MySQLdb想要的位置来修复它(/opt/local/var/run/mysql5/mysqld.sock),但我讨厌这样做。

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).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM