我的系绳结束,变化的时间......
我正在尝试访问在EC2实例上运行的已安装的MySQL。很多搜索(这似乎最接近我的问题Connect to mysql on Amazon EC2 from a remote server),而且我显然遗漏了一些愚蠢或误解的东西。
EC2 Ubuntu,mysqld运行良好,本地web / app服务器工作正常所有连接。我可以从本地mysql。我需要使用iron.io来外部访问这个开发机器,需要从外部访问数据库。
我有
我试过了
(之后始终重启服务器)
没有任何作用,测试总是
$ mysql --host = 54.x.x.x --port = 3306 --user = myuser -p 输入密码: 错误1045(28000):拒绝访问用户' myuser' @' 54.x.x.x' (使用密码:是)
然而我注意到了
netstat -a显示了一个不同的端口&套接字听!?
下面netstat中的监听端口不是3306但是我已经在该端口外部进行了telc,它显示了mysql正在侦听
有人可以建议我错过的任何步骤吗?
db priviledges的摘录,my.cnf
# user_privileges
# e.g. SELECT * from information_schema.user_privileges;
+--------------------------------+---------------+-------------------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | q1 |
+--------------------------------+---------------+-------------------------+--------------+
| 'root'@'localhost' | def | SELECT | YES |
...
| 'myuser'@'%' | def | SELECT | NO |
| 'myuser'@'%' | def | INSERT | NO |
| 'myuser'@'%' | def | UPDATE | NO |
#
]$ netstat -a | grep 'mysql'
tcp 0 0 *:mysql *:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 61212 /var/run/mysqld/mysqld.sock
$ telnet 54.x.x.x 3306
Trying 54.x.x.x...
Connected to ec2-54-x-x-x.us-west-2.compute.amazonaws.com.
Escape character is '^]'.
[
5.5.44-0ubuntu0.14.04.1+c<>d^+W?1*!e\{wdp&hZmysql_native_password
# my.cnf
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = localhost
# donts seem to work
bind-address = 0.0.0.0
# does not work
# ec2 external ip
#bind-address = 54.x.x.x
# ec2 internal ip
#bind-address = 172.x.x.x
答案 0 :(得分:3)
我发现的最好的工具是sqlyog,(也许是mysql工作台),它实际上会告诉您在失败的连接上进入的主机名。
我喜欢它的原因是它保持安全,显示类似的东西 用户“fred123@hdm38.newyork.comcastbusiness.net”拒绝访问。注意,那个主机名,我刚刚组成,但重要的是,无论你的是什么。否则它是通配时间,我不会做的。你可以选择。
这很重要,因为主机名( hdm38.newyork.comcastbusiness.net )是我在mysql create user
中使用的那个,而不是使用像%
我让上面的连接失败,但我注意到主机名在上面。你会在下面看到它。
1)您的远程用户通过使用适当的user,host
条目创建的帐户进行连接(查看select user,host from mysql.user order by 1,2
的输出)
CREATE USER 'santa'@'hdm38.newyork.comcastbusiness.net' IDENTIFIED BY 'mypassword';
通过上述命令,我们现在有了一个有机会进入的新用户。无法做任何事情。无法更改为db。基本上他们可以做select now();
2)您使用grants
(至少是前者)
flush privileges
GRANT ALL PRIVILEGES ON mydb123.* TO 'santa'@'hdm38.newyork.comcastbusiness.net';
我们使用上述命令的用户现在可以在mydb123数据库/模式中执行任何操作。在手册中探索上面的Grant命令,以便为您创建的用户微调访问权限。
如果您不熟悉mysql安全性,请在研究之前不要包含WITH GRANT OPTION
。
对于步骤1和2,有些人会说上面的主机名为'%'。这意味着圣诞老人可以从任何主机连接。这是你的选择。一旦你到达某个地方并开始研究就开始紧张,放松。
3)您修改了 my.cnf ,并将bind-address
更改为127.0.0.1
或localhost
,转而支持0.0.0.0
如果bind-address不是0.0.0.0
,则只与ssh连接
4)您修改了 my.cnf 并有一个rem'd out line #skip-networking
。即使您必须创建该行只是为了将其删除,也要这样做。
3/4更改需要mysql守护程序重启
5)防火墙问题。因此,对于EC2,您需要对该实例有效的AWS Security Group
包括端口3306的开放
答案 1 :(得分:2)
我在Amazon Linux上遇到了与mysqld 5.6.37相同的问题,解决方案是将bind-address = 0.0.0.0
行添加到/etc/my.cnf
下[mysqld]
但[mysqld_safe]
以上
答案 2 :(得分:1)
谢谢Drew,
将0.0.0.0
中的绑定地址更改为my.cnf
解决了我的问题。我已经安装了virtualmin,因此不必完成所有MySQL用户创建和授予权限部分,在GUI的帮助下完成。但是我无法远程连接到MySQL服务器。
我有另一个VPS,它没有与MySQL服务器远程连接的问题,我无法找到远程连接到这个EC2实例的MySQL服务器的解决方案。过去几天我一直在寻找解决方案,当我按照你的指示更改绑定地址,然后重新启动MySQL服务器时,一切都运行正常。
再次感谢。