我想在 Amazon EC2 CentOS 实例上远程访问 MySQL(我假设它是 CentOS,因为我用它yum
来更新已安装的应用程序和库)。
我相信iptables
设置正确,my.cnf
设置正确,并且 MySQL 用户设置正确。
我在接下来的章节中列出了所有相关设置。
内容iptables
:
# Generated by iptables-save v1.4.18 on Tue Mar 3 18:02:27 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2620:387248]
[0:0] -A INPUT -i lo -j ACCEPT
[9189:1027277] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[216:12376] -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
[0:0] -A INPUT -s 24.91.66.190/32 -p tcp -i eth0 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Mar 3 18:02:27 2015
内容my.cnf
:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
bind-address=0.0.0.0
port=3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
相关MySQL设置:
mysql> select user, host from mysql.user;
+-------------+--------------+
| user | host |
+-------------+--------------+
| root | 127.0.0.1 |
| dan | 24.91.66.190 |
| root | ::1 |
| dan | localhost |
| glassbiller | localhost |
| root | localhost |
+-------------+--------------+
6 rows in set (0.00 sec)
和
mysql> select user, host, db, select_priv, insert_priv from mysql.db;
+-------------+--------------+------------------+-------------+-------------+
| user | host | db | select_priv | insert_priv |
+-------------+--------------+------------------+-------------+-------------+
| dan | 24.91.66.190 | glassbiller_test | Y | Y |
| glassbiller | localhost | glassbiller\_% | Y | Y |
| dan | localhost | glassbiller_test | Y | Y |
+-------------+--------------+------------------+-------------+-------------+
3 rows in set (0.00 sec)
服务器和客户端MySQL工具的详细信息:
来自wget -qO- http://instance-data/latest/meta-data/public-ipv4
(见https://stackoverflow.com/a/7536318/368896) 我已经确认了我必须从我的远程机器访问的 IP 地址,并且我正在使用它。
我已重启iptables
( sudo service iptables restart
) 和mysql
( sudo service mysqld restart
)。事实上,我曾重启过服务器。
MySQL 中为用户设置的密码dan
对于“localhost”和“24.91.66.190”条目是相同的。
我获得了 IP 地址从24.91.66.190
我正尝试通过简单的 URL访问服务器( ) http://whatismyip.com
,该 URL 是我在客户端 Windows 机器上运行的 Chrome 中输入的。
我正在尝试使用 SQLYog 程序从 Windows 机器访问远程实例。
值得注意的是:当我使用 SSH 连接到此 EC2 实例时,我使用
ssh -i myprivatekey.pem [email protected]
(即,我使用公钥/私钥登录,没有密码 - 我不确定这是否相关)。我使用名为“SecureCRT”的 Windows 程序登录到我的 SSH 会话 - 我不使用 PuTTy。
24.91.66.190
当我尝试从我的 Windows 机器上的指定 IP ( )访问 MySQL 数据库时,使用在远程服务器上的 MySQL 上为该 IPdan
的用户设置的用户名和密码dan
,连接就会超时。
在调查了和的一些文档iptables
并mysql
查看了有关该主题的数十个论坛帖子后,但没有找到任何我尚未尝试过的可能线索,因此我现在在 ServerFault 上发布了这个问题。
鉴于我已完成上述所有步骤,但仍然无法远程访问 MySQL 实例,对于我可以采取的后续步骤,有哪些建议可以用于追踪问题?
最后一点:在iptables
上面的列表中,我已将 改为INPUT DROP [3;120]
-:INPUT ACCEPT [0;0]
以防万一(但事实并非如此)。我计划在问题解决后立即将其改回来。