Après avoir posté ce problème, alors que je travaillais, j'ai réalisé que je n'étais même pas capable de faire un ping vers le serveur EC2 ou telnet vers celui-ci. Donc, quelque chose de fondamental devait être faux. Enfin un ami m'a aidé à résoudre le problème. Comme je m'y attendais, le problème était très spécifique à EC2.
Les détails sont les suivants :
Lorsque nous créons une instance EC2, nous obtenons une adresse IP externe similaire à :ec2-XX-XXX-XXX-XX.ap-southeast-1.compute.amazonaws.com
Lors de la définition des autorisations dans mysql, j'accordais les autorisations à l'adresse IP ci-dessus, c'est-à-dire :
GRANT ALL PRIVILEGES on . to [email protected]'ec2-XX-XXX-XXX-XX.ap-southeast1.compute.amazonaws.com' IDENTIFIED BY 'password';
Cela ne fonctionne pas lorsque vous essayez de communiquer avec une instance EC2 à partir d'une autre instance EC2 locale. Pour cela, vous devez fournir "l'adresse IP interne" de l'instance EC2, qui peut être trouvée à l'aide de la commande 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
Pour que les choses fonctionnent correctement, vous devez accorder l'autorisation à l'adresse IP --"XX.XXX.XX.XXX/23", et cela devrait fonctionner. De même, lors de la connexion à la base de données "mysql", le nom d'hôte fourni à la commande mysql doit également être "l'adresse IP interne" de l'instance EC2 hôte.