python中的OpenShift mysql连接问题

时间:2014-03-04 03:08:33

标签: python mysql openshift

我之前使用本地开发服务器编写了我的应用程序,现在我已经将它移动到一个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进行连接,但我不确定如何更改此行为。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

不特定于MySQLdb:如果使用localhost作为主机名,使用MySQL C库的MySQL客户端将尝试使用UNIX套接字(或Windows上的命名管道)进行连接。有两种方法,但您需要授予额外的权限才能使它适用于:

使用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,但最好不要使用mysqlclient,因为它可能会干扰其他MySQL工具(除非您当然希望这样做) )。

要设置权限,您需要使用localhost的IP地址,例如:

mysql> GRANT SELECT TO yourdb.* TO 'scott'@'127.0.0.1' IDENTIFIED BY ...;

(网站说明:MySQL Connector / Python等MySQL数据库驱动程序不认为localhost是特殊的,而是立即通过TCP / IP连接,您必须明确使用unix_socket。< / p>

答案 1 :(得分:0)

我后来发现,虽然数据库服务器在localhost上运行,但它运行在一个非常特定的localhost绑定地址上。在我的情况下,如果我没有注意到phpmyadmin是如何连接的话,这是一个我永远不会尝试的地址。