7

別の EC2 サーバーから Amazon EC2 サーバーの 1 つで mysql DB にアクセスする際に問題に直面しています。外部 IP アドレスから mysql にアクセスするための適切なアクセス許可を提供することに関するさまざまな記事を読みました。以下は、私が実行した手順です。

  1. ホスト EC2 インスタンスでポート 3306 を開き、外部 Mysql 接続を可能にしました。
  2. ファイル /etc/mysql/my.cnf で、「bind-address」を「127.0.0.1」から「0.0.0.0」に変更しました。
  3. root を使用して mysql を開き、次のコマンドを実行しました: GRANT ALL PRIVILEGES on worker@'ec2-ip-address' IDENTIFIED BY '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

この問題を投稿した後、作業中に、EC2 サーバーに ping を実行したり、telnet で接続したりすることさえできないことに気付きました。したがって、基本的な何かが間違っている必要がありました。最後に、友人が問題を解決してくれました。予想通り、この問題は EC2 に非常に固有のものでした。

詳細は次のとおりです。

EC2 インスタンスを作成すると、ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com のような外部 IP アドレスを取得します。

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 アドレス」でもある必要があります。

于 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' IDENTIFIED BY 'redhat' WITH GRANT OPTION;

ここで、10.0.1.40 はリモート ec2 インスタンスの IP アドレスです。

それはうまくいくはずです。

于 2018-05-16T08:50:42.770 に答える