从远程服务器连接到Amazon EC2上的mysql

我想从本地机器连接到EC2上的数据库,我无法做到,并尝试了一切 – 我使用这个命令连接到EC2:

mysql -uUSERNAME -hEC2_IP -pPASSWORD 

产生这个错误

错误2003(HY000):无法连接到'IP'上的MySQL服务器(110)

我修改了my.cnf

 skip networking bind-address = 0.0.0.0 

仍然无法连接到数据库

可能有以下原因之一:

  1. 您需要在Amazon Security Group中input条目,以允许从您的计算机到Amazon EC2实例的远程访问。 : – 我相信这是由你作为你的问题,你似乎已经作出了0.0.0.0,允许每个人访问机器的条目进行。
  2. MySQL不允许用户从远程机器连接: – 默认情况下,MySql创build具有pipe理员权限的root用户标识。 但root ID的访问权限仅限于本地主机。 这意味着如果您尝试从远程计算机访问MySql,那么使用正确密码的root用户标识将不起作用。 为了解决这个问题,你需要允许root用户或其他DB用户从远程机器访问MySQL。 我不会build议允许root用户ID从远程机器访问数据库。 您可以使用通配符%来指定任何远程计算机。
  3. 检查机器的本地防火墙是否启用。 如果它启用,然后确保端口3306是打开的。

请通过以下链接: 如何启用远程访问MySQL数据库服务器?

正如在上面的回应中提到的,它可能与AWS安全组和其他事情有关。 但是如果你创build了一个用户并且给了它远程访问'%'并且仍然出现这个错误,请检查你的mysqlconfiguration文件,在debian上,你可以在这里find它:/etc/mysql/my.cnf并find这行:

 bind-address = 127.0.0.1 

并将其更改为:

 bind-address = 0.0.0.0 

并重新启动mysql。

在Debian / Ubuntu上:

 /etc/init.d/mysql restart 

我希望这对你有用。

可能是因为未将分配给您的EC2实例的Amazon安全组configuration为接受端口3306(MySQL的默认端口)上的传入请求。

如果是这种情况,那么只需点击几下鼠标就可以轻松打开安全组的端口:

1)login到您的AWS控制台并转到“EC2”

2)在“networking与安全”下的左侧菜单中,进入“安全组”

3)检查有问题的安全组

4)点击“入站选项卡”

5)从下拉列表中select“MYSQL”,然后点击“添加规则”

可能不是理由,但值得一试…

更新: 2017年2月

以下是远程访问MySQL的完整步骤 (部署在Amazon EC2上): –

1.将MySQL添加到入站规则。

转到您的ec2实例的安全组 – >编辑入站规则 – >添加新规则 – >selectMySQL/Aurora和源到Anywhere

2.添加bind-address = 0.0.0.0到my.cnf

在实例控制台中:

 sudo vi etc/my.cnf 

这将打开vi编辑器。
在my.cnf文件中,在[mysqld]添加新行并写入:

 bind-address = 0.0.0.0 

保存文件input:wq (enter)

现在重新启动MySQL:

 sudo /etc/init.d/mysqld restart 

3.创build一个远程用户并授予权限。

login到MySQL:

mysql -u root -p mysql (在此之后input密码)

现在写下面的命令:

 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; 

在此之后,可以通过input实例的公共DNS / IP作为MySQL主机地址,用户名为jerry,密码为jerrypassword来远程访问MySQL dB。 (端口在3306被设置为默认)

尽pipe这个问题似乎已经得到解答,但您可以得到的另一个常见问题是数据库用户被错误configuration。 这是一个mysqlpipe理和权限问题:

  1. EC2_DB启动IP 10.55.142.100
  2. 使用IP 10.55.142.144启动10.55.142.144
  3. EC2_DB和EC2_WEB在同一个安全组中,可以通过您的数据库端口进行访问(3306)
  4. EC2_DB有一个mysql数据库,可以由数据库根用户( 'root'@'localhost''root'@'localhost'
  5. EC2_DB mysql数据库有一个远程用户'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
  6. 从EC2_WEB到bash调用失败: 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' 

我想认为%可以用于任何远程服务器,但我并没有发现这种情况。

请让我知道这是否有助于你。

更改/etc/mysql/my.cnf

 bind-address = 127.0.0.1 to 0.0.0.0 

使用'%' host创build用户并重新启动:

 /etc/init.d/mysql restart 

为我工作! 🙂

跟踪这个问题的有用步骤是确定MySQL实际设置的绑定地址。 你可以用netstat来做到这一点:

 netstat -nat |grep :3306 

这帮助我解决了我的问题,因为有多个mysqlconfiguration文件,而且我编辑了错误的文件。 Netstat显示mysql仍然使用错误的configuration:

 ubuntu@myhost:~$ netstat -nat |grep :3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 

所以我greppedconfiguration目录的任何其他文件可能是重写我的设置,并发现:

 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 

D'哦! 这显示了我调整的设置是错误的configuration文件,所以我这次编辑了RIGHT文件,用netstat证实了它,并且正在运行。

login到AWSpipe理控制台。 导航到RDS,然后select数据库实例并转到“安全组”。 在安全组下添加CIDR / IP解决了这个问题。

解决scheme是三个步骤:

  1. 在MySQL my.ini / my.cnf文件中,将绑定地址更改为接受来自所有主机(0.0.0.0)的连接。

  2. 在aws控制台 – ec2 – 特定安全组中打开你的mysql端口(默认是3306)接受来自所有主机(0.0.0.0)的连接。

  3. 在Windows防火墙内添加mysql端口(默认为3306)为例外。

这将开始接受远程连接。

  • 使用pipe理员用户启动MYSQL
    • mysql -u admin-user -p(请input密码提示)
  • 创build一个新用户:
    • CREATE USER'newuser'@'%'IDENTIFIED BY'password'; (% – > anyhost)
  • 授予权限:
    • GRANT SELECT,DELETE,INSERT,UPDATE ON db_name。* TO'newuser'@'%';
    • FLUSH PRIVILEGES;

如果您正在运行EC2实例,请不要忘记使用MYSQL / Aurura在安全组中添join站规则。

如果这些步骤不起作用,请检查/etc/mysql/my.cnf文件并将bind_address参数编辑为

bind_address = 0.0.0.0

我知道这是一个旧的职位,但…

我遇到这个问题,我已经确定我的问题实际上不是EC2实例。 它似乎可能是MySQL客户端驱动程序软件中的一个错误。 我还没有做过彻底的研究,但我甚至在EC2实例上安装了MySQL Workbench,IT也是不稳定的 – 它间歇性地无法连接(错误是“连接取消”)。 这个链接暗示了一个可能的bug,而不是EC2。

当然,我还没有做过详尽的研究,我的post可能实际上是不正确的,但值得注意和/或探索,恕我直言。

我经历了所有以前的答案(和类似的问题的答案)没有成功,所以这里是最后为我工作。 关键的一步是明确授予本地用户(对于服务器)的MySQL服务器的权限,但我的本地IP附加到它( myuser@*.*.*.* )。 完整的一步一步的解决scheme如下:

  1. 注释掉服务器上的/etc/mysql/my.cnf中的bind_address行(即EC2实例)。 我想bind_address=0.0.0.0也可以工作,但并不需要像其他人提到的那样。

  2. 将MYSQL的规则(如其他人也提到的那样)添加到端口为3306的EC2实例的安全组,以及“ My IP或“ Anywhere作为源”。 遵循所有步骤后,两者都可以正常工作。

  3. 创build一个具有有限特权的新用户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';` 
  4. 这是关键的一步,没有这一步,当我尝试远程连接时,我的本地地址被拒绝(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;` 

    (用本地IP地址replace'*.*.*.23'

  5. 为了好的措施,我退出mysql到shell并重新启动了msyql服务器:

    $EC2prompt> sudo service mysql restart

  6. 经过这些步骤,我能够愉快地从我的电脑连接:

    $localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p

    (用您的EC2实例的公共地址replacemyinstancename.amazonaws.com

当创build用户像'myuser'@'localhost'时,用户被限制只能从本地主机连接。 创build一个仅用于远程访问的用户,并使用您要连接到MySQL服务器的远程客户端IP地址。 如果您可以承受来自所有远程主机(通常使用dynamicIP地址)的连接的风险,则可以使用'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) 

对于ubuntu的一些configuration,需要在这个文件中改变绑定地址:

 /etc/mysql/mysql.conf.d/mysqld.cnf