远程连接Mysql Ubuntu

出于某种原因,我一直无法远程连接到我的MySQL服务器。 我已经尝试了一切,但仍然收到错误。

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl Enter password: ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES) 

现在,我尝试了跑步

  `GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

而且什么也没有! 我做错了什么?

编辑:my.cnf已经注释了绑定ip。

要将MySQL暴露给本地主机以外的其他任何东西,您必须具有以下行

对于MySQL版本5.6及以下

/etc/mysql/my.cnf取消/etc/mysql/my.cnf并分配给您的计算机IP地址,而不是回送

对于MySQL版本5.7及以上

/etc/mysql/mysql.conf.d/mysqld.cnf取消/etc/mysql/mysql.conf.d/mysqld.cnf并分配给您的计算机的IP地址,而不是回送

 #Replace xxx with your IP Address bind-address = xxx.xxx.xxx.xxx 

或者,如果您不想指定IP,请添加一个bind-address = 0.0.0.0

然后停止并用新的my.cnf条目重新启动MySQL。 一旦运行到terminal并input以下命令。

 lsof -i -P | grep :3306 

这应该回来这样的事情与你的实际IP在xxx的

 mysqld 1046 mysql 10u IPv4 5203 0t0 TCP xxx.xxx.xxx.xxx:3306 (LISTEN) 

如果上述语句正确返回,您将可以接受远程用户。 但是,对于远程用户连接正确的priveleges,您需要在localhost和'%'中创build该用户。

 CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass'; CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass'; 

然后,

 GRANT ALL ON *.* TO 'myuser'@'localhost'; GRANT ALL ON *.* TO 'myuser'@'%'; 

最后,

 FLUSH PRIVILEGES; EXIT; 

如果您没有创build与上述相同的用户,则在本地login时,您可能会inheritance基本本地主机权限并存在访问问题。 如果你想限制myuser的访问,那么你需要阅读GRANT语句的语法。 这里如果你通过所有这些,仍然有问题发布一些额外的错误输出和my.cnf适当的行。

注意:如果lsof没有返回或没有find,你可以在你的Linux发行版本上安装它。 你不需要使用它来工作,但当事情没有按预期工作时,它是非常方便的。

在apesa优秀的职位上添加几点:

1)你可以使用下面的命令来检查mysql服务器正在监听的ip地址

 netstat -nlt | grep 3306 sample result: tcp 0 0 xxx.xxx.xxx.xxx:3306 0.0.0.0:* LISTEN 

2)使用FLUSH PRIVILEGES强制授权表,如果由于某种原因,这些更改不会立即生效

 GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION; GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT; 

3)如果在mysql服务器上启用了netfilter防火墙( sudo ufw enable ),请执行以下操作打开远程访问端口3306:

 sudo ufw allow 3306 

使用检查状态

 sudo ufw status 

4)build立远程连接后,可以使用命令在客户机或服务器机器上进行validation

 netstat -an | grep 3306 netstat -an | grep -i established 

MySQL只监听本地主机,如果我们想启用远程访问,那么我们需要在my.cnf文件中做一些修改:

 sudo nano /etc/mysql/my.cnf 

我们需要注释掉bind-address和skip-external-locking行:

 #bind-address = 127.0.0.1 # skip-external-locking 

进行这些更改后,我们需要重新启动mysql服务:

 sudo service mysql restart 

如果在Windows上testing,不要忘记打开端口3306。