远程连接Mysql Ubuntu

Cri*_*yon 92 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)
Run Code Online (Sandbox Code Playgroud)

现在,我试过跑步

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 
Run Code Online (Sandbox Code Playgroud)

但仍然没有!我做错了什么?

编辑:my.cnf已注释掉bind ip.

ape*_*esa 334

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

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

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

lsof -i -P | grep :3306
Run Code Online (Sandbox Code Playgroud)

这应该与xxx中的实际IP相似

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

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

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
Run Code Online (Sandbox Code Playgroud)

然后,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
Run Code Online (Sandbox Code Playgroud)

最后,

FLUSH PRIVILEGES; 
EXIT;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对于任何与`lsof -i -P |挣扎的人 grep:3306`,虽然没有工作,但远程连接在没有确认的情况下仍能正常工作,如果没有看到正确的输出,请忽略. (14认同)
  • 许多系统上的 FWIW `sudo lsof -i -P` 将比 `lsof -i -P` 有用得多(假设您以非特权用户身份登录)。 (3认同)
  • `lsof -i -P | grep:3306`不返回任何东西! (2认同)

Jon*_*n L 36

在apesa的优秀帖子上添加几点:

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

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN
Run Code Online (Sandbox Code Playgroud)

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

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

sudo ufw allow 3306
Run Code Online (Sandbox Code Playgroud)

使用检查状态

sudo ufw status
Run Code Online (Sandbox Code Playgroud)

4)建立远程连接后,可以使用命令在客户端或服务器上验证它

netstat -an | grep 3306
netstat -an | grep -i established
Run Code Online (Sandbox Code Playgroud)

  • 这节省了我整整一天!感谢'sudo ufw status` !! (2认同)

小智 8

MySQL只监听localhost,如果我们想要启用它的远程访问,那么我们需要在my.cnf文件中做一些更改:

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

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

#bind-address = 127.0.0.1
# skip-external-locking
Run Code Online (Sandbox Code Playgroud)

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

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)