远程连接Mysql Ubuntu

时间:2013-03-27 15:41:11

标签: mysql ubuntu remoting

出于某种原因,我无法远程连接到我的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已经注释掉了bind ip。

7 个答案:

答案 0 :(得分:320)

要将MySQL暴露给localhost之外的任何其他内容,您必须拥有以下行

对于mysql 5.6及以下版本

/etc/mysql/my.cnf中取消注释并分配给您的计算机IP地址而非环回

对于mysql 5.7及以上版本

/etc/mysql/mysql.conf.d/mysqld.cnf中取消注释并分配给您的计算机IP地址而非环回

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

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

然后使用新的my.cnf条目停止并重新启动MySQL。运行后,转到终端并输入以下命令。

lsof -i -P | grep :3306

这应该与xxx的

中的实际IP相似
mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

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

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;

如果您没有与上面创建的用户相同,那么当您在本地登录时,您可能会继承基本的localhost权限并遇到访问问题。如果您想限制myuser的访问权限,那么您需要阅读GRANT语句语法HERE如果您完成了所有这些并仍然遇到问题,请发布一些额外的错误输出和my.cnf相应的行。< / p>

注意:如果lsof未返回或未找到,则可以根据Linux发行版安装HERE。你不需要lsof来使事情有效,但是当事情没有按预期工作时它非常方便。

答案 1 :(得分:33)

在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)建立远程连接后,可以使用命令在客户端或服务器上验证它

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

答案 2 :(得分:7)

MySQL只监听localhost,如果我们要启用远程访问,那么我们需要在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

答案 3 :(得分:1)

如果在Windows上进行测试,请不要忘记打开端口3306。

答案 4 :(得分:1)

您正在使用ubuntu 12(相当旧的版本)

首先,打开/etc/mysql/mysql.conf.d/mysqld.cnf文件(在Ubuntu 14.04和更低版本中为 /etc/mysql/my.cnf

在[mysqld]下找到该行, 绑定地址= 127.0.0.1 并将其更改为 绑定地址= 0.0.0.0 或发表评论

然后,重新启动Ubuntu MysQL服务器 systemctl restart mysql.service

现在,Ubuntu Server将允许远程访问MySQL服务器,但是仍然需要配置MySQL用户以允许从任何主机进行访问。

用户必须是'username'@'%'并具有所有必需的授予权限

要确保MySQL服务器在所有接口上进行侦听,请按以下方式运行netstat命令。

netstat -tulnp | grep mysql

希望这行得通!

答案 5 :(得分:0)

就我而言,我使用的是 MySql Server 版本:8.0.22

我必须添加

bind-address        = 0.0.0.0

并将此行更改为

mysqlx-bind-address = 0.0.0.0

在文件中 /etc/mysql/mysql.conf.d

然后通过运行重新启动 MySQL

sudo service mysql restart

答案 6 :(得分:0)

我在尝试将 Mysql 连接到远程服务器时遇到了同样的问题。我发现我必须将绑定地址更改为数据库服务器的当前私有 IP 地址。 但是当我尝试在 bind-address =0.0.0.0 文件中添加 my.cnf 行时,当我尝试创建数据库时它不理解该行。

经过搜索,我找到了声明 bind-address 的原始位置。

实际声明在:/etc/mysql/mariadb.conf.d/50-server.cnf

因此,我直接在那里更改了绑定地址,然后一切正常。