Después de publicar este problema, mientras trabajaba, me di cuenta de que ni siquiera podía hacer ping al servidor EC2 o telnet. Así que algo básico tenía que estar mal. Finalmente un amigo me ayudó con el problema. Como esperaba, el problema era muy específico de EC2.
Los detalles son los siguientes:
Cuando creamos una instancia EC2, obtenemos una dirección IP externa similar a:ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com
Mientras configuraba los permisos en mysql, estaba otorgando los permisos a la dirección IP anterior, es decir:
GRANT ALL PRIVILEGES on . to [email protected]'ec2-XX-XXX-XXX-XX.ap-southeast1.compute.amazonaws.com' IDENTIFIED BY 'password';
Esto no funciona cuando intenta comunicarse con una instancia EC2 desde otra instancia EC2 local. Para ello, debe proporcionar la "dirección IP interna" de la instancia EC2, que se puede encontrar mediante el comando ip:
dirección 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
Para que todo funcione correctamente, debe otorgar el permiso a la dirección IP --"XX.XXX.XX.XXX/23", y debería funcionar. De manera similar, mientras se conecta a la base de datos "mysql", el nombre de host proporcionado al comando mysql también debe ser la "dirección IP interna" de la instancia EC2 del host.