我之前使用本地开发服务器编写了我的应用程序,现在我已将其转移到 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 而不是 localhost 主机名。这将使 MySQL 客户端使用 TCP/IP 进行连接。
使用选项文件
另一种方法是使用选项文件强制使用协议(protocol)。例如,在您的 ~/.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 工具(当然,除非您想要)。
要设置权限,您需要使用本地主机的 IP 地址,例如:
mysql> GRANT SELECT TO yourdb.* TO 'scott'@'127.0.0.1' IDENTIFIED BY ...;
(站点说明:MySQL 连接器/Python 等 MySQL 数据库驱动程序并不认为 localhost
是特殊的,而是立即通过 TCP/IP 进行连接,并且您必须显式使用 unix_socket
。)
关于python - python 中的 OpenShift mysql 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22162070/