我之前使用本地开发服务器编写了我的应用程序,现在我已经将其移动到openshift小齿轮上,除了mysql连接之外,几乎所有的应用程序都可以运行。
在我的代码中,我有一行:
self.db = MySQLdb.connect(host, username, password, dbname)当我查看openshift错误日志时,报告了以下错误:
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")我认为python正在尝试使用UNIX套接字而不是INET套接字进行连接,但我不确定如何更改此行为。任何帮助都是非常感谢的。
发布于 2014-03-04 13:43:44
不特定于MySQLdb:如果您使用localhost作为主机名,则使用UNIX C库的MySQL客户机将尝试使用UNIX套接字(或MySQL上的命名管道)进行连接。有两种方法可以解决这个问题,但您需要授予额外的权限才能使其同时适用于这两种情况:
使用IP地址127.0.0.1
使用IP地址127.0.0.1代替localhost主机名。这将使MySQL客户端使用TCP/IP进行连接。
使用选项文件
另一种方法是使用选项文件强制协议。例如,在您的~/.my.cnf (或您需要的任何文件)中,添加以下内容:
[python]
protocol=tcp现在使用连接参数读取选项文件和组:
import MySQLdb
cnx = MySQLdb.connect(host='localhost', user='scott', passwd='tiger',
read_default_file='~/.my.cnf',
read_default_group='python')组名不需要是python,但最好不要使用mysql或client,因为它可能会干扰其他MySQL工具(当然,除非您希望这样做)。
要设置权限,您需要使用localhost的IP地址,如下所示:
mysql> GRANT SELECT TO yourdb.* TO 'scott'@'127.0.0.1' IDENTIFIED BY ...;(站点注释:诸如TCP/Python之类的MySQL数据库驱动程序并不认为localhost是特殊的,它们立即通过MySQL /IP连接,并且您必须显式地使用unix_socket。)
发布于 2014-03-06 14:42:48
我后来发现,虽然数据库服务器在localhost上运行,但它在一个非常特定的localhost绑定地址上运行。在我的例子中,如果我没有注意到phpmyadmin是如何连接的,我永远不会尝试这个地址。
https://stackoverflow.com/questions/22162070
复制相似问题