使用 PHPMyAdmin 管理 Amazon RDS
Posted
技术标签:
【中文标题】使用 PHPMyAdmin 管理 Amazon RDS【英文标题】:Using PHPMyAdmin to administer Amazon RDS 【发布时间】:2011-05-23 02:17:46 【问题描述】:我无法让 phpMyAdmin 连接到我的 Amazon RDS 实例。我已将我的 IP 地址的权限授予数据库安全组,该数据库可以访问我尝试访问的数据库。这是我正在使用的...
$cfg['Servers'][$i]['pmadb'] = $dbname;
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
/* Uncomment the following to enable logging in to passwordless accounts,
* after taking note of the associated security risks. */
// $cfg['Servers'][$i]['AllowNoPassword'] = TRUE;
/* Advance to next server for rest of config */
$i++;
$cfg['Servers'][$i]['auth_type'] = 'http'; //is this correct?
$cfg['Servers'][$i]['user'] = 'MASTER-USER';
$cfg['Servers'][$i]['password'] = 'MASTER-USER-PASSWORD';
$cfg['Servers'][$i]['hide_db'] = '(mysql|information_schema|phpmyadmin)';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'MY-DB.us-east-1.rds.amazonaws.com';
$cfg['Servers'][$i]['connection_type'] = 'socket';
$cfg['Servers'][$i]['port'] = PORT;
我不确定我的配置是否正确。
我收到此错误:
#2013 - 在“读取初始通信数据包”时丢失与 MySQL 服务器的连接,系统错误:110
有人有什么建议吗?
【问题讨论】:
【参考方案1】:我发现这个问题的大部分答案都缺乏解释。要在 EC2 中安装的 phpMyAdmin 中添加 RDS 服务器,您可以先通过 SSH 登录到您的 EC2。然后,发出以下命令来编辑 phpMyAdmin 的 Config 文件(使用vi
、nano
或任何其他喜欢的文本编辑工具):
sudo vi /etc/phpMyAdmin/config.inc.php # Amazon Linux
sudo vi /etc/phpmyadmin/config.inc.php # Ubuntu Linux
在config.inc.php
中找到以下几行:
/*
* End of servers configuration
*/
在“服务器配置结束”行上方附加以下行:
$i++;
$cfg['Servers'][$i]['host'] = 'xxxxx.xxxxxxxxxx.us-east-1.rds.amazonaws.com';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['verbose'] = 'YOUR_SERVER_NAME';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['compress'] = TRUE;
其中YOUR_SERVER_NAME
是显示在phpMyAdmin 登录页面选择框中的名称。如果删除此行,整个 RDS 主机名将显示在选择框中(显然太长了)。记得保存config.inc.php
。
还有其他几个配置设置,详情请见official documentation。
注意:另一个答案建议使用配置文件中预设的用户名和密码自动登录:
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = '__FILL_IN_DETAILS__';
$cfg['Servers'][$i]['password'] = '__FILL_IN_DETAILS__';
如果您的 phpMyAdmin 暴露在公众面前,这非常危险。您不想向所有人展示您的数据库架构,是吗?如果您真的想使用自动登录,请确保您的 phpMyAdmin 只能通过特定 IP 访问。
【讨论】:
我必须将我的 EC2 实例的私有 IP 地址添加到我的 RDS 实例正在使用的安全组的入站规则中,以便允许 mysql 连接到它。把它留在这里给任何有连接问题的人。 感谢您提供额外信息。是的,添加入站规则对于工作连接至关重要。【参考方案2】:在 Debian Lenny 中使用 repo 中的 phpmyadmin 将其添加到 /etc/phpmyadmin/config.inc.php :
$i++;
$cfg['Servers'][$i]['host'] = 'xxxxx.xxxxxxxxxx.us-east-1.rds.amazonaws.com';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['compress'] = TRUE;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'xxxxxxxxxxxx';
$cfg['Servers'][$i]['password'] = 'xxxxxxxxxxxxxxxxxx';
【讨论】:
发现指定端口导致登录错误。您也可以使用 'auth_type' cookie 而无需指定用户和密码。【参考方案3】:您需要将 RDS 实例添加为 PHPMyAdmin 上列出的附加服务器,同时授予主机 PHPMyAdmin 访问您的 RDS 实例的权限。
更多细节来自How to remotely manage an Amazon RDS instance with PHPMyAdmin的这篇博文:
我遇到的一件事是数据库安全组设置。当您为 CIDR/IP 添加访问权限时,它会提供推荐值。花了一些时间来确定这个默认值实际上不是需要的。如果您在完成所有操作后仍无法连接到您的实例,请务必仔细检查此值。他们提供的 IP 与我们的 ISP 提供给我们的 IP 地址不匹配。创建数据库实例并设置安全组后,您就可以开始了。
我假设您已经启动并运行了 PHPMyAdmin。您需要做的是修改 config.inc.php 以识别新服务器。
【讨论】:
请不要只发布链接作为答案。将答案作为文本发布,如果需要,请提供链接以进行进一步解释。这样,如果链接失效,答案仍然存在。 如果您的 RDS 在 VPC 中关于安全组,AWS 有一个关于在 VPC 内从 EC2 连接到 RDS 的教程:docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 特别是您需要编辑 VPC 安全组入站规则添加您的 EC2 实例所在的安全组的 ID(或者如果不使用 EC2,则添加您要访问 RDS 的服务器的 IP) 链接已失效。 链接还是死了,回答没用。这就是我们不使用链接的原因。 链接已失效,这是来自 Wayback 的页面:web.archive.org/web/20160322111825/http://blog.benkuhl.com/2010/…【参考方案4】:尝试从 mysql 命令行 (http://dev.mysql.com/doc/refman/5.1/en/mysql.html) 连接,看看这个实用程序返回给你什么。我发现这种方式更容易调试。
mysql -hMY-DB.us-east-1.rds.amazonaws.com -uMASTER-USER -pPASSWORD
如果这不起作用,则表示您的亚马逊 RDS 安全配置不正确。 (这是常见的问题)。
【讨论】:
使用不兼容的安全组会导致这种情况,谢谢。 这帮助我排除了 RDS、主机名、用户名和密码。不幸的是,无论我如何设置我的配置,我仍然得到 #2002【参考方案5】:sudo nano /etc/phpmyadmin/config.inc.php
--ADD LINES BELOW THE PMA CONFIG AREA AND FILL IN DETAILS--
$i++;
$cfg['Servers'][$i]['host'] = '__FILL_IN_DETAILS__';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['compress'] = FALSE;
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = '__FILL_IN_DETAILS__';
$cfg['Servers'][$i]['password'] = '__FILL_IN_DETAILS__';
保存并退出。刷新你的 phpmyadmin 页面,你会看到你刚刚添加的服务器的下拉列表
来源:https://github.com/andrewpuch/phpmyadmin_connect_to_rds,https://www.youtube.com/watch?v=Bz-4wTGD2_Q
【讨论】:
【参考方案6】:我遇到了同样的问题,以上方法都没有解决。
事实证明,事情在 RDS 实例的“可公开访问”选项中。当您创建实例时,此选项默认为“否”,您无法更改它。
但是,在创建 RDS 实例后,您可以制作其快照,然后删除该实例,然后启动该快照。在启动选项中,只需将“Publicly Accessible”设置为“yes”,您的 phpMyAdmin 最终会看到您的 RDS MySql 服务器。
请注意原始 RDS 实例的 DNS 和快照不同,因此您必须更改 config.inc.php 中的“主机”
干杯:)
【讨论】:
太棒了,我已经想通了,但我没有找到与此相关的其他答案。谢谢队友【参考方案7】:先试试这个:
mysql -h xxxxx.xxxxxxx.xx-xx-2.rds.amazonaws.com -u root -p // 你的 RDS 服务器。
如果它等待并且不提示输入密码,那么您需要检查安全组并将 3306 出站添加到您的 Web 层。
【讨论】:
【参考方案8】:如果您可以使用 mysql -h ENDPOINT -u USERNAME -p
从 cli 进行连接,但不能从 PHPMyAdmin 或您自己的 Web 脚本进行连接,请不要忘记 tell selinux to let your web server talk to the network :)
sudo setsebool -P httpd_can_network_connect=1
【讨论】:
【参考方案9】:我使用 ubuntu shell 访问 Amazon RDS。 首先去ubuntu root
sudo -i
为此,请使用亚马逊 RDS 最终用户 URL
mysql -h gelastik.cqtbtepzqfhu.us-west-2.rds.amazonaws.com -u root -p
【讨论】:
以上是关于使用 PHPMyAdmin 管理 Amazon RDS的主要内容,如果未能解决你的问题,请参考以下文章
您无权访问 amazon linux 上此服务器上的 `phpmyadmin`
如何获得对 Amazon RDS 数据库的 phpmyadmin 访问权限
在 Amazon Web Services EC2 上运行的 Red Hat Enterprise Linux 中禁止使用 phpmyadmin