След като публикувах този проблем, докато работех, разбрах, че дори не мога да пингувам към сървъра 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 екземпляр. За това трябва да предоставите „вътрешния ip адрес“ на екземпляра EC2, който може да бъде намерен с помощта на командата 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, трябва също да бъде "вътрешен ip адрес" на екземпляра на хоста EC2.