python中的OpenShift mysql连接问题

python中的OpenShift mysql连接问题,python,mysql,openshift,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

我以前使用本地开发服务器编写了我的应用程序,现在我将其移动到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套接字进行连接,但我不确定如何改变这种行为。非常感谢您的帮助。

并非特定于MySQLdb:如果您使用
localhost
作为主机名,使用MySQL C库的MySQL客户端将尝试使用UNIX套接字(或Windows上的命名管道)进行连接。有两种方法可以解决此问题,但您需要授予额外的权限才能使其同时适用于这两种情况:

使用IP地址127.0.0.1 使用IP地址127.0.0.1代替本地主机名。这将使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 ...;

(站点注释:MySQL数据库驱动程序,如MySQL连接器/ Python不考虑代码>本地主机< /代码>,并通过TCP/IP立即连接,您必须明确使用<代码> UNIXOStuts。

< P>我后来发现,当数据库服务器运行在本地主机上时,它运行在一个非常特定的本地主机绑定地址上。在我的例子中,如果我没有注意到phpmyadmin是如何连接的,我将永远不会尝试这个地址