我在EC2服务器中有两个实例,一个实例有mysql数据库,内容存储在其中,另一个实例访问存储在第一个实例中的数据。
我需要创build一个存储在数据库中的只读访问权限的用户。
所以
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
grant select on DBname.* to 'chowzter'@'localhost';
错误
ERROR 1130 (HY000): Host 'ip-xx-xx-xxx-xxx.ec2.internal' is not allowed to connect to this MySQL server
2。 CREATE USER 'username'@'ec2-xx-xx-xx-xxx.compute-1.amazonaws.com' IDENTIFIED BY 'password'
grant select on DBname.* to 'username'@'ec2-xx-xx-xxx-xxx.compute-1.amazonaws.com';
这次使用的IP地址是命令获得的second instance的内部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 -hxx.xx.xxx.xxx -uusername -ppassword
错误
ERROR 1045 (28000): Access denied for user 'username'@'ip-xx-xx-xxx-xxx.ec2.internal' (using password: YES)
任何想法如何解决?
您还需要检查第一个实例的安全组。 你能从二审中看到一审吗?
MySQL端口是否在您的安全组设置中打开?
为什么不使用打包服务RDS(MySQL)呢?
终于解决了。
首先,我使用%创build了一个用户。
CREATE USER 'name'@'%' IDENTIFIED BY 'password';
然后,您可以授予该用户的权限。
grant select on DBname.* to 'name'@'%'; mysql -h xx.xx.xxx.xxx -u user -p
这里的IP地址是第一个例子
这使我有权从第二个实例以只读模式访问数据库。
使用以下虚拟名称:
源MySQL = ec2-source.compute-1.amazonaws.com , ip-source.ec2.internal ec2-source.compute-1.amazonaws.com
外部MySQL需要访问= ec2-external.compute-1.amazonaws.com , ip-external.ec2.internal
要创build一个可以从外部以只读权限访问源的用户,同时限制访问外部机器的IP,请在源 MySQL上运行:
CREATE USER 'username'@'ip-external.ec2.internal' IDENTIFIED BY 'password';
GRANT SELECT ON DBname.* TO 'username'@'ip-external.ec2.internal';
FLUSH PRIVILEGES;
您现在可以在外部机器上使用以下内容来访问只读源DB:
mysql -u username -p -h ec2-source.compute-1.amazonaws.com