7

我在从另一台 EC2 服务器访问我的一台 Amazon EC2 服务器上的 mysql 数据库时遇到问题。我阅读了有关为从外部 IP 地址访问 mysql 提供适当权限的各种文章,以下是我遵循的步骤:

  1. 在我的主机 EC2 实例上打开端口 3306 以允许外部 Mysql 连接。
  2. 在文件 /etc/mysql/my.cnf 中,将“绑定地址”从“127.0.0.1”更改为“0.0.0.0”。
  3. 使用root打开mysql,执行以下命令:GRANT ALL PRIVILEGES on 到 worker@'ec2-ip-address' 由 'password' 识别;

根据我阅读的所有博客/文章,这应该可以解决问题,但我不断收到以下错误:

1130  Host 'amazon-ec2-ip' is not allowed to connect to this MySQL server

我为 EC2 实例提供的 IP 地址是您创建实例时生成的弹性 IP。为了验证问题是否特定于 EC2,我尝试为不同的“静态 IP 地址”执行命令“3”。现在,这对我有用(即我能够从该远程服务器登录到 mysql 主机),因此可以确定上述步骤是正确的。

为什么 Amazon EC2 IP 地址不起作用?

4

4 回答 4

6

发布此问题后,当我工作时,我意识到我什至无法 ping 到 EC2 服务器或 telnet 到它。所以一些基本的东西一定是错的。最后一个朋友帮我解决了这个问题。正如我所料,这个问题是 EC2 特有的。

详细情况如下:

当我们创建一个 EC2 实例时,我们会得到一个外部 IP 地址,类似于:ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com

在 mysql 中设置权限时,我将权限授予上述 IP 地址,即:

GRANT ALL PRIVILEGES on . to worker@'ec2-XX-XXX-XXX-XX.ap-southeast1.compute.amazonaws.com' IDENTIFIED BY 'password';

当您尝试从另一个本地 EC2 实例与 EC2 实例通信时,这不起作用。为此,您需要提供 EC2 实例的“内部 IP 地址”,可以使用 ip 命令找到:

ip一个:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 12:31:41:02:58:47 brd ff:ff:ff:ff:ff:ff
inet **XX.XX.XX.XXX/23** brd YY.YYY.YY.YYY scope global eth0
inet6 fe80::1031:41ff:fe02:5847/64 scope link 
valid_lft forever preferred_lft forever

为了让事情正常工作,您需要授予 IP 地址的权限 --“XX.XXX.XX.XXX/23”,它应该可以工作。同样,在连接“mysql”数据库时,提供给 mysql 命令的主机名也应该是主机 EC2 实例的“内部 ip 地址”。

于 2012-07-04T16:31:30.910 回答
2

我也面临着类似的问题。仅使用 DNS 名称的数字部分,例如公共 DNS 名称为 ec2-13-114-245-645.compute-1.amazonaws.com 然后仅使用 13.114.245.645 连接到该实例。

希望能帮助到你。

于 2012-07-17T06:04:17.877 回答
0

登录到本地 mariadb/mysql 服务器并给出以下命令:

授予所有特权TO 'root'@'10.0.1.40' 由 'redhat' 识别并带有 GRANT 选项;

这里,10.0.1.40 是我的远程 ec2 实例 ip 地址。

它应该工作。

于 2018-05-16T08:50:42.770 回答
0

我在我的 AWS ubuntu(18.04) 服务器中解决了同样的问题。以下是步骤:

  • 从 security_group-> InBound 规则打开 3306 端口。
  • 配置 /etc/mysql/mysql.conf.d/mysqld.cnf 文件:bind-address=0.0.0.0使用它将允许所有 IP 远程连接到 mySql
  • 在 mysql 中为用户添加权限
    • 授予所有特权到 YOUR_USER@'YOUR.PRIVATE_IP.ADDRESS.HERE' 由 'AN_USER_PASSWORD' 识别

最后一步很重要。在这里,您要添加用户,带有密码的私有 IP 地址,用户将用于远程登录。

示例

授予所有特权到 root@'XX.XX.XX.XX' 由 'ADMIN_AWS123' 识别;

这里root是您的用户,XX.XX.XX.XX是您的私有 IP 地址,ADMIN_AWS123是您的远程密码。

希望对你有帮助 :)

于 2019-09-09T13:03:58.013 回答