1130主机'amazon-ec2-ip'不允许连接到此MySQL服务器

时间:2012-07-04 11:25:41

标签: mysql amazon-ec2 amazon-web-services remote-access

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

  1. 在我的主机EC2实例上打开端口3306以允许外部Mysql连接。
  2. 在文件/etc/mysql/my.cnf中,将“bind-address”从“127.0.0.1”更改为“0.0.0.0”。
  3. 使用root打开mysql,并执行以下命令: 在上授予所有权限@ worker @'ec2-ip-address'通过'密码'识别;
  4. 根据我阅读的所有博客/文章,这应该已经解决了问题,但我不断收到以下错误:

    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 个答案:

答案 0 :(得分:3)

发布此问题后,在我工作时,我意识到我甚至无法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 a:

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地址”。

答案 1 :(得分:1)

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

希望它有所帮助。

答案 2 :(得分:0)

登录本地mariadb / mysql服务器&amp;给出以下命令:

上授予所有特权。 TO'root'@'10.0.1.40'通过'redhat'识别并使用GRANT OPTION;

下面,  10.0.1.40是我的远程ec2实例ip地址。

它应该有用。

答案 3 :(得分:0)

我在AWS ubuntu(18.04)Server中解决了相同的问题。步骤如下:

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

最后一步很重要。在此处,您将添加用户,专用IP地址和密码,用户将使用该密码进行远程登录。

示例

上将所有特权授予root@'XX.XX.XX.XX',由'ADMIN_AWS123'标识;

这里 root 是您的用户, XX.XX.XX.XX 是您的专用IP地址,而 ADMIN_AWS123 是您的远程密码。 / p>

希望这会对您有所帮助:)