Openshift MySQL Cartgridge上的连接超时



我正在部署一个PHP应用程序,该应用程序在Openshift中使用Doctrine作为ORM。在我的post_deploy操作钩子中,我运行原则或模式工具来更新数据库,但我收到连接超时错误。 由于我是Openshift的新手,在Openshift上设置数据库的最佳方法是什么?

更新我有两个齿轮,一个用于应用程序,另一个用于 MySQL。我冲进应用程序齿轮并跑了

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_应用名称

连接成功。

更新 3在 PHP 方面,我正在运行以下测试代码,感谢这个答案:

<?php
require_once "vendor/autoload.php";
require_once "vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php";
use DoctrineDBALConfiguration;
$config = new DoctrineDBALConfiguration();
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 = DoctrineDBALDriverManager::getConnection($connectionParams, $config);
var_dump($conn);
echo $conn->query("SHOW TABLES"); 
?>

我收到相同的超时错误。

我无法帮助您解决教义问题,但 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

也许是因为我一直在 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',
);

相关内容

  • 没有找到相关文章

最新更新