Dopo aver postato questo problema, mentre stavo lavorando, mi sono reso conto che non ero nemmeno in grado di eseguire il ping sul server EC2 o telnet su di esso. Quindi qualcosa di fondamentale doveva essere sbagliato. Finalmente un amico mi ha aiutato a risolvere il problema. Come mi aspettavo, il problema era molto specifico per EC2.
I dettagli sono i seguenti:
Quando creiamo un'istanza EC2, otteniamo un indirizzo IP esterno simile a:ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com
Durante l'impostazione delle autorizzazioni in mysql stavo concedendo le autorizzazioni all'indirizzo IP sopra, ovvero:
GRANT ALL PRIVILEGES on . to [email protected]'ec2-XX-XXX-XXX-XX.ap-southeast1.compute.amazonaws.com' IDENTIFIED BY 'password';
Questo non funziona quando tenti di comunicare con un'istanza EC2 da un'altra istanza EC2 locale. Per questo, devi fornire l'"indirizzo IP interno" dell'istanza EC2, che può essere trovato usando il comando 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
Per far funzionare correttamente le cose, è necessario concedere l'autorizzazione all'indirizzo IP --"XX.XXX.XX.XXX/23" e dovrebbe funzionare. Allo stesso modo, durante la connessione al database "mysql", il nome host fornito al comando mysql dovrebbe essere anche "l'indirizzo IP interno" dell'istanza EC2 host.