使用有效设置的 Amazon AWS 数据库连接错误

Amazon AWS database connection error with valid settings

我 运行 既是一个 wordpress 站点,也是一个 mediawiki,它们都来自相同的网络服务器。 mediawiki 网站很棒! WordPress 网站,嗯。没那么多。我不断收到常见的数据库连接错误:

Error establishing a database connection

据我所知,mediawiki 站点和 wordpress 站点之间的设置几乎相同。

这是媒体 wiki 配置,因为它正在工作:

## Database settings
$wgLBFactoryConf['class'] = 'LBFactorySimple';
$wgDBtype = "mysql";
$wgDBservers = '';
$wgDBserver = "db.example.com";
$wgDBssl    =  true;
$wgDBname = "jfwiki";
$wgDBuser = "admin_ssl";
$wgDBpassword = "secret";

下面是 wordpress 数据库连接设置的样子,因为它们不是:

/** MySQL database username */
define('DB_NAME', 'jokefire');

define('DB_USER', 'admin_ssl');

/** MySQL database password */
define('DB_PASSWORD', 'secret');

/** MySQL hostname */
define('DB_HOST', 'db.example.com');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

/** Contact the database over a secure connection */
define('DB_SSL', true);

我意识到它们并不完全相同。但我认为您可以在 mediawiki 设置和 wordpress 设置之间轻松关联。而且它们看起来足够相似,以至于认为 wordpress 应该可以正常工作。对吗?

唯一真正的其他区别是每个站点使用的数据库的名称,我想这是有道理的。

但 medawiki 工作正常的事实告诉我,为两个站点设置的用户和密码都可以访问数据库。

为了开玩笑,我使用 wordpress 配置中的帐户设置来演示我可以在命令行上连接到数据库。同样,它与我在 Wik 站点中的帐户信息相同:

#mysql -uadmin_ssl -p -h db.example.com -D jokefire  -e "show tables" | head -5
Enter password:
Tables_in_jokefire
wp_bp_activity
wp_bp_activity_meta
wp_bp_chat_channel_users
wp_bp_chat_channels

此外,我创建了一个基本的 php 脚本来查看它是否可以连接到数据库

<?php
$link = mysql_connect('db.example.com', 'admin_ssl', 'secret');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

令我惊讶的是它无法连接!

php testconnect.php
Could not connect: Access denied for user 'admin_ssl'@'ec2-54-86-143-49.compute-1.amazonaws.com' (using password: YES)

为什么我很惊讶它不能?因为 1) wiki 可以毫无问题地连接到数据库。并且 2) 我可以使用相同的凭据在命令行上连接到数据库。

我的APIMySQL客户端版本是:

Client API version  mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $

希望这有助于缩小问题范围。谢谢!

主机名很容易成为问题。

尝试select user,host from mysql.user where user='admin_ssl' order by host;

与 AWS 服务器上的情况一样,在 localhost 或 127.0.0.1 上作为主机工作的情况与来自其他地方的主机完全不同。

根据您的 PHP 示例,mysql 服务器无法验证用户和主机。我敢打赌它是其中的 ec2-54-86-143-49.compute-1.amazonaws.com 部分。

一个快速测试是在有问题的服务器上进行 mysql 提示,并为这样的用户执行创建用户和授权。其他人会建议创建一个 'admin_ssl'@'%' 用户,这样它就可以工作,而不管主机名是否进来。我会小心使用这种方法。

为了锁定安全性,我愿意在 AWS 上创建一个用户,例如 create user 'dbAdmin'@'mc83.newyork.comcastbusiness.com' IDENTIFIED BY ...,以确保我不会使用通配符,例如 '%'

别忘了赠款。但这已经领先于手头的问题,这是一个连接。

祝你好运。