【发布时间】:2014-06-09 07:19:06
【问题描述】:
不好意思问你们这些 Openshift 人,但是 Perl 不会连接到 MySQL,虽然 PHP 可以。
以下代码在客户端上运行良好(我在本地机器上添加了 OPENSHIFT 环境变量)但在 Openshift 应用程序上失败:
my $db_name = 'campaignmotor';
my $db_host = $ENV{'OPENSHIFT_MYSQL_DB_HOST'};
my $db_port = $ENV{'OPENSHIFT_MYSQL_DB_PORT'};
my $db_pw = $ENV{'OPENSHIFT_MYSQL_DB_PASSWORD'};
my $db_user = $ENV{'OPENSHIFT_MYSQL_DB_USERNAME'};
sub db_connect {
my $dsn = "DBI:mysql:database=$db_name;host=$db_host;port=$db_port";
my $dbh = DBI->connect($dsn, $db_user, $db_pw);
return $dbh;
}
我收到无休止的消息,例如:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
在我的网络应用程序上执行 PHP 配置就可以了:
$db['default']['hostname'] = getenv('OPENSHIFT_MYSQL_DB_HOST') . ':'
. getenv('OPENSHIFT_MYSQL_DB_PORT');
$db['default']['username'] = getenv('OPENSHIFT_MYSQL_DB_USERNAME');
$db['default']['password'] = getenv('OPENSHIFT_MYSQL_DB_PASSWORD');
$db['default']['database'] = 'campaignmotor';
mysql、mysqldump 等都在命令行上工作。
这是一个 HAProxy PHP 应用程序
奇怪的是我没有 OPENSHIFT_MYSQL_DB_SOCKET 变量。该主题的大多数帮助线程都引用了这一点。
提前致谢!
【问题讨论】:
-
您是连接到“localhost”还是“127.0.0.1”?我注意到当您连接到“localhost”时,使用了套接字连接器,但是当您连接到“127.0.0.1”时,使用了 TCP/IP 连接器。如果套接字连接器未启用/工作,您可以尝试使用“127.0.0.1”。还要确保
mysql.sock存在于/var/lib/mysql/中,代码为[client] socket=/var/lib/mysql/mysql.sock -
这是您在其中一个 PHP 设备上运行的 perl 脚本吗?如果您正在运行扩展的 HAProxy 应用程序,那么您不能使用 mysql 套接字(因为您的数据库在它自己的设备上),并且主机应该是一个大长字符串,它是一个 FQDN。你能从运行 Perl 脚本的设备中发布“env | grep MYSQL”的净化输出吗? (删除用户名和密码)
-
@Chakey - 数据库服务器位于 OpenShift 上的另一台主机上,因此始终必须引用 OPENSHIFT_MYSQL_DB_HOST。
-
@developercorey - 是的,它的 Perl(试图)在 PHP 设备/应用程序上运行。了解我不能使用套接字 - 从上面的 Perl 代码中你可以看到我没有尝试(我不认为)。但是我会更多地查看 DBI 文档,看看 Perl 是否正在尝试构建一个套接字。谢谢!!
-
@developercorey 您请求的输出:
OPENSHIFT_MYSQL_DB_PORT=54341 OPENSHIFT_MYSQL_DB_HOST=53920f04e0b8cde61a0006d4-softwaresure.rhcloud.com OPENSHIFT_MYSQL_DB_PASSWORD=NOWAY OPENSHIFT_MYSQL_DB_GEAR_UUID=53920f04e0b8cde61a0006d4 OPENSHIFT_MYSQL_DB_USERNAME=adminAqZhUFS OPENSHIFT_MYSQL_DB_URL=mysql://adminAqZhUFS:NOWAY@53920f04e0b8cde61a0006d4-softwaresure.rhcloud.com:54341/ OPENSHIFT_MYSQL_LD_LIBRARY_PATH_ELEMENT=/opt/rh/mysql55/root/usr/lib64 OPENSHIFT_MYSQL_DB_GEAR_DNS=53920f04e0b8cde61a0006d4-softwaresure.rhcloud.com