我想从我的本地计算机连接到EC2上的db,但是我却做不到,并且尝试了所有操作-我正在使用以下命令连接到EC2:
mysql -uUSERNAME -hEC2_IP -pPASSWORD
产生此错误
错误2003(HY000):无法连接到“ IP”上的MySQL服务器(110)
我已经用修改了my.cnf
skip networking
bind-address = 0.0.0.0
仍然无法连接到数据库
我想从我的本地计算机连接到EC2上的db,但是我却做不到,并且尝试了所有操作-我正在使用以下命令连接到EC2:
mysql -uUSERNAME -hEC2_IP -pPASSWORD
产生此错误
错误2003(HY000):无法连接到“ IP”上的MySQL服务器(110)
我已经用修改了my.cnf
skip networking
bind-address = 0.0.0.0
仍然无法连接到数据库
Answers:
可能是以下原因之一:
请通过以下链接:如何启用对MySQL数据库服务器的远程访问?
如以上响应中所述,它可能与AWS安全组等有关。但是,如果您创建了一个用户并将其授予远程访问权限'%',但仍然出现此错误,请在debian上检查您的mysql配置文件,可以在以下位置找到它:/etc/mysql/my.cnf并找到以下行:
bind-address = 127.0.0.1
并将其更改为:
bind-address = 0.0.0.0
并重启mysql。
在debian / ubuntu上:
/etc/init.d/mysql restart
希望这对您有用。
这是MySQL远程访问的完整步骤(在Amazon EC2上部署):
转到ec2实例的安全组->编辑入站规则->添加新规则->选择MySQL/Aurora
并将其来源Anywhere
。
在实例控制台中:
sudo vi /etc/mysql/my.cnf
这将打开vi编辑器。
在my.cnf文件中,[mysqld]
添加新行并编写以下代码:
bind-address = 0.0.0.0
通过输入保存文件:wq
(输入)
现在重启MySQL:
sudo /etc/init.d/mysqld restart
登录MySQL:
mysql -u root -p mysql
(在此之后输入密码)
现在编写以下命令:
CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword';
CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword';
GRANT ALL PRIVILEGES ON *.* to jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
此后,可以通过输入实例的公共dns / ip作为MySQL主机地址,输入用户名jerry和输入密码jerrypassword来远程访问MySQL dB。(端口设置为默认值3306)
可能是您尚未将分配给您的EC2实例的Amazon Security Group配置为在端口3306(MySQL的默认端口)上接受传入请求。
如果是这种情况,那么您只需单击几下即可轻松打开安全组的端口:
1)登录到您的AWS控制台并转到'EC2'
2)在“网络和安全”下的左侧菜单中,转到“安全组”
3)检查有问题的安全组
4)点击“入站标签”
5)从下拉列表中选择“ MYSQL”,然后单击“添加规则”
可能不是原因,但值得一试...
跟踪此问题的一个有用步骤是确定MySQL实际设置为哪个绑定地址。您可以使用netstat执行此操作:
netstat -nat |grep :3306
这帮助我零距离解决了我的问题,因为有多个mysql配置文件,而我编辑了错误的文件。Netstat显示mysql仍使用错误的配置:
ubuntu@myhost:~$ netstat -nat |grep :3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
所以我为其他可能覆盖我的设置的其他文件添加了config目录,并发现:
ubuntu@myhost:~$ sudo grep -R bind /etc/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:bind-address = 127.0.0.1
/etc/mysql/mysql.cnf:bind-address = 0.0.0.0
/etc/mysql/my.cnf:bind-address = 0.0.0.0
天哪!这向我显示我调整的设置是错误的配置文件,因此我这次编辑了正确的文件,并通过netstat进行了确认,并且可以正常使用。
尽管此问题似乎已得到解答,但您可以获得的另一个常见问题是数据库用户配置错误。这是一个mysql管理和权限问题:
10.55.142.100
10.55.142.144
'root'@'localhost'
)可在本地访问'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
mysql -umy_user -p -h ip-10-55-142-100.ec2.internal
主机对显式IP,公共DNS等的引用也是如此。步骤6失败,因为mysql DB具有错误的用户权限。它需要这样:
GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password'
我想认为这%
适用于任何远程服务器,但我发现情况并非如此。
请告诉我这是否对您有帮助。
我知道这是一个旧帖子,但是...
我遇到了这个问题,并且已经确定我的问题实际上不是EC2实例。看来这可能是MySQL客户端驱动程序软件中的错误。我还没有进行深入的研究,但是我尝试在EC2实例上安装MySQL Workbench,并且IT也很不稳定-它间歇性地无法连接(错误是“连接已取消”)。这个连结建议一个可能的错误降低堆栈,而不是EC2。
当然,我还没有进行详尽的研究,我的帖子可能确实不合时宜,但是无论如何,值得注意的是,恕我直言。
如果您正在运行EC2实例,请不要忘记使用MYSQL / Aurura在安全组中添加入站规则。
如果这些步骤不起作用,请检查/etc/mysql/my.cnf文件,并将bind_address参数编辑为
bind_address = 0.0.0.0
我经历了所有先前的答案(以及类似问题的答案),但均未成功,所以这终于对我有用。关键步骤是显式地将mysql服务器上的特权授予本地用户(用于服务器),但要在其上附加我的本地IP(myuser@*.*.*.*
)。完整的分步解决方案如下:
注释掉服务器上的bind_address
行/etc/mysql/my.cnf
(即EC2实例)。我想
bind_address=0.0.0.0
也可以,但是不需要像其他人提到的那样。
将MYSQL的规则(也有其他人提到)添加到具有端口3306的EC2实例的安全组中,并作为My IP
或Anywhere
作为源。完成所有步骤后,两者都可以正常工作。
创建myuser
对一个特定数据库具有有限特权的新用户mydb
(基本上按照此Amazon教程中的说明进行操作):
$EC2prompt> mysql -u root -p
[...omitted output...]
mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password';
mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';`
这是关键步骤,尝试远程连接时,如果没有此步骤,我的本地地址将被拒绝 (ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server)
:
mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23';
mysql> FLUSH PRIVILEGES;`
(替换'*.*.*.23'
为您的本地IP地址)
为了达到良好的效果,我将mysql退出外壳并重新启动了msyql服务器:
$EC2prompt> sudo service mysql restart
完成这些步骤之后,我可以通过以下方式从计算机愉快地进行连接:
$localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p
(替换myinstancename.amazonaws.com
为您的EC2实例的公共地址)
在创建“ myuser” @“ localhost”之类的用户时,该用户被限制为只能从localhost连接。创建一个仅用于远程访问的用户,并使用将要连接到MySQL服务器的远程客户端IP地址。如果您有承担允许所有远程主机进行连接的风险(通常在使用动态IP地址时),则可以使用'myuser'@'%'。我这样做了,还从/etc/mysql/mysql.cnf(Ubuntu)中删除了bind_address,现在它可以完美地连接了。
mysql> select host,user from mysql.user;
+-----------+-----------+
| host | user |
+-----------+-----------+
| % | myuser |
| localhost | mysql.sys |
| localhost | root |
+-----------+-----------+
3 rows in set (0.00 sec)
127.0.0.1
如果要更改实例EC2 Ubuntu中Mysql的默认ip,则仅遵循此处已给出的答案。