Efter att ha postat det här problemet, medan jag arbetade, insåg jag att jag inte ens kunde pinga till EC2-servern eller telnet till den. Så något grundläggande måste vara fel. Äntligen hjälpte en vän mig med problemet. Som jag hade förväntat mig var problemet väldigt specifikt för EC2.
Detaljerna är följande:
När vi skapar en EC2-instans får vi en extern IP-adress som liknar:ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com
När jag ställde in behörigheterna i mysql gav jag behörigheterna till ovanstående IP-adress, dvs.:
GRANT ALL PRIVILEGES on . to [email protected]'ec2-XX-XXX-XXX-XX.ap-southeast1.compute.amazonaws.com' IDENTIFIED BY 'password';
Detta fungerar inte när du försöker kommunicera till en EC2-instans från en annan lokal EC2-instans. För detta måste du ange den "interna ip-adressen" för EC2-instansen, som kan hittas med ip-kommandot:
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
För att få saker att fungera korrekt måste du ge tillstånd till ip-adressen --"XX.XXX.XX.XXX/23", och det borde fungera. På samma sätt, när du ansluter till "mysql"-databasen, bör värdnamnet som ges till mysql-kommandot också vara den "interna ip-adressen" för värd-EC2-instansen.