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

Aas*_*tta 59 mysql amazon-ec2

我想从我的本地机器连接到EC2上的db,我无法做到并尝试了所有内容 - 我使用此命令连接到EC2:

mysql -uUSERNAME -hEC2_IP -pPASSWORD
Run Code Online (Sandbox Code Playgroud)

生成此错误

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

我修改了my.cnf

skip networking
bind-address            = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

仍然无法连接到数据库

moh*_*bou 85

如上面的回复中所述,它可能与AWS安全组和其他事情有关.但是如果你创建了一个用户并给它远程访问'%'并仍然收到此错误,请检查你的mysql配置文件,在debian上,你可以在这里找到它:/etc/mysql/my.cnf并找到该行:

bind-address            = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

并将其更改为:

bind-address            = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

并重启mysql.

在debian/ubuntu上:

/etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)

我希望这适合你.

  • 删除/注释掉 bind-address= 是我的解决方案 (2认同)
  • 这是实际的解决方案.它应该被接受为答案 (2认同)

San*_*mad 52

可能有以下原因之一:

  1. 您需要在Amazon Security Group中创建一个条目,以允许从您的计算机远程访问Amazon EC2实例.: - 我相信这是由你完成的,因为你似乎已经用0.0.0.0创建了一个条目,它允许每个人访问机器.
  2. MySQL不允许用户从远程机器连接: - 默认情况下,MySql使用admin访问权限创建root用户ID.但root id的访问仅限于localhost.这意味着如果您尝试从远程计算机访问MySql,则具有正确密码的root用户标识将不起作用.要解决此问题,您需要允许root用户或其他一些DB用户从远程计算机访问MySQL.我不建议允许root用户id从远程计算机访问DB.您可以使用通配符%来指定任何远程计算机.
  3. 检查机器的本地防火墙是否未启用.如果启用它,请确保端口3306已打开.

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


Jer*_*yal 42

更新: 2017年2月

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

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

转到ec2实例的安全组 - >编辑入站规则 - >添加新规则 - >选择MySQL/Aurora和来源Anywhere.

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

在实例控制台中:

sudo vi /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

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

bind-address = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

输入:wq(输入)保存文件

现在重启MySQL:

sudo /etc/init.d/mysqld restart
Run Code Online (Sandbox Code Playgroud)

3.创建远程用户并授予权限.

登录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;
Run Code Online (Sandbox Code Playgroud)

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

  • 您不需要 GRANT 命令中的 IDENTIFIED BY 子句 (3认同)
  • 编辑文件 /etc/my.cnf 在这里没有任何作用。我不得不编辑/etc/mysql/mysql.conf.d/mysqld.cnf(ubuntu 16.04 -> sudo apt install mysql-server)。 (2认同)

Tom*_*Mac 27

可能是您尚未将分配给EC2实例的Amazon Security Group配置为接受端口3306上的传入请求(MySQL的默认端口).

如果是这种情况,则只需按几下按钮,即可轻松打开安全组的端口:

1)登录AWS Console并转到'EC2'

2)在"网络与安全"下的左侧菜单中,转到"安全组"

3)检查有问题的安全组

4)点击"入站标签"

5)从下拉列表中选择"MYSQL"并单击"添加规则"

可能不是原因,但值得一去......

  • 我已经这样做了,但它仍然没有用. (7认同)
  • 所以其他人不认为这不会影响他们,默认的"所有流量,全部,全部,sg -...."不允许它,可能是因为源值.但另外一行"MYSQL,TCP,3306,0.0.0.0/0"起作用了 (2认同)

Bob*_*ego 9

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

netstat -nat |grep :3306
Run Code Online (Sandbox Code Playgroud)

这有助于我解决我的问题,因为有多个mysql配置文件,我编辑了错误的一个.Netstat显示mysql仍在使用错误的配置:

ubuntu@myhost:~$  netstat -nat |grep :3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
Run Code Online (Sandbox Code Playgroud)

所以我在配置目录中找到了可能覆盖我的设置并发现的任何其他文件:

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
Run Code Online (Sandbox Code Playgroud)

D'哦!这告诉我我调整的设置是错误的配置文件,所以我这次编辑了RIGHT文件,用netstat确认了它,并且正在进行业务.


小智 8

对于ubuntu的某些配置,需要在此文件中更改绑定地址:

/etc/mysql/mysql.conf.d/mysqld.cnf 
Run Code Online (Sandbox Code Playgroud)


New*_*ria 5

虽然这个问题似乎得到了解答,但您可以得到的另一个常见问题是数据库用户配置错误.这是一个mysql管理和权限问题:

  1. EC2_DB启动了IP 10.55.142.100
  2. EC2_web与IP一起发布 10.55.142.144
  3. EC2_DB和EC2_WEB位于同一安全组中,可通过数据库端口进行访问(3306)
  4. EC2_DB有一个mysql DB,可以由DB root用户('root'@'localhost')在本地访问
  5. EC2_DB mysql DB有一个远程用户 'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
  6. 从EC2_WEB对mysql的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'
Run Code Online (Sandbox Code Playgroud)

我想这%适用于任何远程服务器,但我没有发现这种情况.

如果这有助于您,请告诉我.