python - python 中的 OpenShift mysql 连接问题

标签 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 套接字进行连接,但我不确定如何改变这种行为。非常感谢任何帮助。

最佳答案

不特定于 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,但最好不要使用mysqlclient,因为它可能会干扰其他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/

相关文章:

python - 克隆和深复制之间的区别?

node.js - Node.js 中的中间件与 OO JavaScript

python - Django ,南 : I get a warning with key length while indexing

mysql - 为什么在添加列时所有行都获得空值?

java - Openshift this.getClass().getResource() 路径可能不正确

mongodb - 如何在 openshift 中检查 mongodb 齿轮空间

python - 是否可以使用 Networkx 将新节点添加到现有边缘

python - 将非空单元格移到分组列 pandas 的左侧

python - 如何从 curl 获取 session ID 并在下一个 GET 请求中再次使用它

PHP:如何在 MySQL 中每 10 行插入一个图像?