使用PHPMyAdmin管理Amazon RDS

42

我无法让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

有没有人有任何建议?

10个回答

49

我发现这个问题的大部分答案缺乏解释。要在安装在EC2上的phpMyAdmin中添加RDS服务器,您可以先通过SSH登录到EC2。然后,发出以下命令来编辑phpMyAdmin的配置文件(使用vinano或任何其他喜欢的文本编辑工具):

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。有几个其他的配置设置,你可以在官方文档中找到详细信息。

注意:另一个答案建议在 Config 文件中预设用户名和密码进行自动登录:

$cfg['Servers'][$i]['auth_type']     = 'config';
$cfg['Servers'][$i]['user']          = '__FILL_IN_DETAILS__';
$cfg['Servers'][$i]['password']      = '__FILL_IN_DETAILS__';

如果您的phpMyAdmin面向公众开放,则此操作极其危险。您不想让每个人都看到您的数据库结构,是吧? 如果确实要使用自动登录,请确保只能通过特定IP访问您的phpMyAdmin。


我不得不将我的EC2实例的私有IP地址添加到安全组的入站规则中,该安全组是我的RDS实例正在使用的,以允许mysql连接到它。在这里留下来,供任何遇到连接问题的人参考。 - Talha Imam
感谢提供额外的信息。是的,添加入站规则对于建立连接至关重要。 - Raptor

22

在 Debian Lenny 中使用从仓库安装的 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';

2
我发现指定端口会导致登录错误。此外,您可以使用“auth_type” cookie而不指定用户名和密码。 - icc97

14

你需要将RDS实例添加为PHPMyAdmin列出的另一个服务器,并授权主机PHPMyAdmin访问您的RDS实例。

更多详细信息请参阅如何使用PHPMyAdmin远程管理Amazon RDS实例博客文章:

我遇到的唯一问题是DB安全组设置。当您尝试为CIDR/IP添加访问权限时,它会提供一个推荐值。花费了一些时间才确定该默认值实际上不应在那里。如果最终无法连接到您的实例,请务必再次检查此值。他们提供的IP与我们的ISP提供给我们的IP地址不匹配。创建了DB实例并设置安全组后,一切都OK了。

我假设您已经启动并运行了PHPMyAdmin。您需要修改config.inc.php文件以识别新服务器。


18
请不要只发布链接作为答案。以文本形式发布答案,如有必要,提供链接进行进一步说明。这样,即使链接失效,答案仍将存在。 - Valentin Rocher
如果您的RDS在VPC中 关于安全组,AWS在此处提供了有关在VPC内从EC2连接到RDS的教程: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html 特别是,您需要编辑VPC安全组入站规则,以添加您的EC2实例所在的安全组ID(或者如果不使用EC2,则是要访问RDS的服务器的IP)。 - Baxny
链接已失效。 - Raptor
1
链接仍然失效,答案无用。这就是为什么我们不使用链接的原因。 - Dave S
链接已失效,这是Wayback的页面链接:https://web.archive.org/web/20160322111825/http://blog.benkuhl.com/2010/12/how-to-remotely-manage-an-amazon-rds-instance-with-phpmyadmin/ - Edward

10

尝试从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安全配置不正确(这是常见问题)。

使用不兼容的安全组将导致此问题,谢谢。 - SleighBoy
这帮助我排除了RDS、主机名、用户名和密码的问题。不幸的是,无论我如何设置我的配置,我仍然得到#2002错误。 - trex005

9
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页面,您将看到一个下拉菜单,其中包含您刚添加的服务器。enter image description here
来源: https://github.com/andrewpuch/phpmyadmin_connect_to_rds, https://www.youtube.com/watch?v=Bz-4wTGD2_Q

2
我也曾经遇到同样的问题,但以上方法都未能解决。
事实上,问题出在了 RDS 实例的 "Publicly Accessible" 选项上。当你创建实例时,默认情况下该选项为 "no",且无法更改。
但是,在创建 RDS 实例后,你可以对其进行快照,然后删除该实例,再启动该快照。在启动选项中将 "Publicly Accessible" 设置为 "yes",此时 phpMyAdmin 将最终看到您的 RDS MySql 服务器。
请注意,原始 RDS 实例和快照的 DNS 不同,因此您需要在 config.inc.php 中更改 'host'。
祝好运 :)

太棒了,我已经解决了这个问题,但是我没有找到其他相关的答案。谢谢伙计。 - MR_AMDEV

1

首先尝试这个:

mysql -h xxxxx.xxxxxxx.xx-xx-2.rds.amazonaws.com -u root -p // 您的RDS服务器。

如果等待而不提示输入密码,则需要检查安全组并将3306出站添加到您的Web层。


0

0

总之,当phpMyAdmin似乎完全无法连接到配置文件时,您可能需要检查的可能性。

  1. RDS实例必须是“公开可访问”的。您可以转到AWS控制台并再次修改RDS实例以打开它。

  2. RDS实例必须打开防火墙(入站规则)。

  • 类型:MySQL
  • 协议:TCP
  • 端口:3306(默认值)
  • 源:0.0.0.0/0 --> 适用于所有访问。或者您的服务器IP/32(例如:54.209.7.206/32)--> 适用于特定访问。
  1. config.inc.php 中的 'auth_type' 必须是 'cookie'(默认)

  2. config.inc.php 必须具备读取和执行的权限。命令(Centos):sudo chmod -R 555 /etc/phpMyAdmin


-1

我使用Ubuntu shell访问Amazon RDS。 首先进入Ubuntu root。

sudo -i

要实现这个,可以使用亚马逊RDS的终端用户URL。

mysql -h gelastik.cqtbtepzqfhu.us-west-2.rds.amazonaws.com -u root -p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接