Openshift MySQL Cartgridge上的连接超时

时间:2015-05-05 11:50:34

标签: php mysql doctrine timeout openshift

我正在部署一个在Openshift中使用Doctrine作为ORM的PHP应用程序。在我的post_deploy操作挂钩中,我运行了doctrine orm schema-tool来更新数据库,但是我收到了连接超时错误。 由于我是Openshift的新手,在Openshift上设置数据库的最佳方法是什么?

更新 我有两个齿轮,一个用于应用程序,另一个用于MySQL。我进入app设备并运行

doctrine orm:schema-tool:update

导致连接超时错误。 如果我试试

  mysql -h $OPENSHIFT_MYSQL_DB_HOST
        -p $OPENSHIFT_MYSQL_DB_PORT 
        -u $OPENSHIFT_MYSQL_DB_USERNAME 
        -P $OPENSHIFT_MYSQL_DB_PASSWORD
        -

在输入由Openshift通知的MySQL密码后,我收到提示和后续错误。

Enter password: 
ERROR 1049 (42000): Unknown database '<obsfucated_password>'

UDPATE 2: 作为Martin下面指出的一个无关的东西,mysql的语法是错误的。修好之后我发现了

 mysql -u $OPENSHIFT_MYSQL_DB_USERNAME
       -h $OPENSHIFT_MYSQL_DB_HOST
       -P $OPENSHIFT_MYSQL_DB_PORT
       -D $OPENSHIFT_APP_NAME 
       -p $OPENSHIFT_MYSQL_DB_PASSWORD

结果

Enter password: 
ERROR 1045 (28000): Access denied for user 'adminjbEnwMq'@'10.63.71.68' (using password: NO)

跑步时

mysql -u $ OPENSHIFT_MYSQL_DB_USERNAME        -h $ OPENSHIFT_MYSQL_DB_HOST        -P $ OPENSHIFT_MYSQL_DB_PORT        -D $ OPENSHIFT_APP_NAME

成功连接。

更新3 在PHP方面,我正在运行以下测试代码,感谢this answer

  <?php

    require_once "vendor/autoload.php";
    require_once "vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php";
    use Doctrine\DBAL\Configuration;

    $config = new \Doctrine\DBAL\Configuration();

    define('DB_HOST', getenv('OPENSHIFT_MYSQL_DB_HOST'));
    define('DB_PORT',getenv('OPENSHIFT_MYSQL_DB_PORT')); 
    define('DB_USER',getenv('OPENSHIFT_MYSQL_DB_USERNAME'));
    define('DB_PASS',getenv('OPENSHIFT_MYSQL_DB_PASSWORD'));
    define('DB_NAME',getenv('OPENSHIFT_GEAR_NAME'));
    $connectionParams = array(
        'dbname' => DB_NAME,
        'user' => DB_USER,
        'password' => DB_PASS,
        'host' => DB_HOST,
        'driver' => 'pdo_mysql',
    );
    $conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
    var_dump($conn);
    echo $conn->query("SHOW TABLES"); 
?>

我得到了相同的超时错误。

2 个答案:

答案 0 :(得分:0)

我无法帮助你处理你的学说问题,但是mysql命令语法实际上是错误的。

Usage: mysql [OPTIONS] [database]

正如您在输出中看到的那样,mysql将您的密码解释为数据库名称。

如果您要如上所示指定选项,则需要在选项和选项值之间添加“=”。

mysql --host=$OPENSHIFT_MYSQL_DB_HOST
      --port=$OPENSHIFT_MYSQL_DB_PORT 
      --user=$OPENSHIFT_MYSQL_DB_USERNAME 
      --password=$OPENSHIFT_MYSQL_DB_PASSWORD

如果要将数据库名称添加到命令中,则默认数据库名称为$OPENSHIFT_APP_NAME。只需在mysql命令的末尾添加它。

要查看所有mysql选项mysql --help

答案 1 :(得分:0)

也许是因为我在23小时后总是处理这个问题,但今天早上我意识到我没有设置端口连接参数。以下代码就像魅力一样:

$dbParams = array(
      'driver'   => 'pdo_mysql',
      'host' => getenv('OPENSHIFT_MYSQL_DB_HOST')?: '127.0.0.1',
      'port'  => getenv('OPENSHIFT_MYSQL_DB_PORT')?:'3306',
      'user'     => getenv('OPENSHIFT_MYSQL_DB_USERNAME')?: 'stpe',
      'password' => getenv('OPENSHIFT_MYSQL_DB_PASSWORD')?: 'thefallen1',
      'dbname'   => getenv('OPENSHIFT_APP_NAME')?:'stpe',
  );