Sau khi đăng vấn đề này, khi tôi đang làm việc, tôi nhận ra rằng tôi thậm chí không thể ping đến máy chủ EC2 hoặc telnet tới nó. Vì vậy, một cái gì đó cơ bản đã được sai. Cuối cùng một người bạn đã giúp tôi giải quyết vấn đề này. Như tôi đã dự đoán, vấn đề rất cụ thể đối với EC2.
Chi tiết như sau:
Khi chúng tôi tạo một phiên bản EC2, chúng tôi nhận được một địa chỉ IP bên ngoài tương tự như:ec2-XX-XXX-XXX-XX.ap-soutosystem-1.compute.amazonaws.com
Trong khi đặt quyền trong mysql, tôi đã cấp quyền cho địa chỉ IP ở trên, tức là:
GRANT ALL PRIVILEGES on . to [email protected]'ec2-XX-XXX-XXX-XX.ap-southeast1.compute.amazonaws.com' IDENTIFIED BY 'password';
Điều này không hoạt động khi bạn cố gắng giao tiếp với một phiên bản EC2 từ một phiên bản EC2 cục bộ khác. Đối với điều này, bạn cần cung cấp 'địa chỉ ip nội bộ "của phiên bản EC2, bạn có thể tìm thấy địa chỉ này bằng cách sử dụng lệnh 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
Để mọi thứ hoạt động bình thường, bạn cần cấp quyền cho địa chỉ ip - "XX.XXX.XX.XXX/23" và địa chỉ này sẽ hoạt động. Tương tự, trong khi kết nối với cơ sở dữ liệu "mysql", tên máy chủ được cung cấp cho lệnh mysql cũng phải là "địa chỉ ip nội bộ" của phiên bản EC2 máy chủ.