この問題を投稿した後、作業中に、EC2サーバーにpingを実行したり、EC2サーバーにtelnetで接続したりすることさえできないことに気付きました。したがって、基本的なことは間違っていなければなりませんでした。最後に、友人が問題を手伝ってくれました。予想通り、問題はEC2に非常に固有のものでした。
詳細は次のとおりです。
EC2インスタンスを作成すると、次のような外部IPアドレスが取得されます:ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com
mysqlでアクセス許可を設定しているときに、上記のIPアドレスにアクセス許可を付与していました。つまり:
GRANT ALL PRIVILEGES on . to [email protected]'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アドレス」である必要があります。