【问题标题】:Openshift Perl script can't connect to MYSQLOpenshift Perl 脚本无法连接到 MYSQL
【发布时间】: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

标签: perl openshift


【解决方案1】:

科里 - 谢谢!

在上面的 shell 命令中,为主机指定 -h 选项,否则,它会尝试使用套接字。

我还要补充一点,您还需要指定端口,因为在 HAProxy 模式下,MySQL 在非标准端口号上运行。我将 -h 与主机和 -P 与端口都添加了,它可以工作!

我可能偶然发现了这一点,除了直接在 shell 上运行时命令按预期工作,即使没有指定端口号和主机。奇怪!

再次感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2019-07-20
    相关资源
    最近更新 更多