繁体   English   中英

远程连接 Mysql Ubuntu

[英]Remote Connections 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 公开给 localhost 以外的任何内容,您必须具有以下行

对于 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。 运行后转到终端并输入以下命令。

lsof -i -P | grep :3306

这应该会与您在 xxx 中的实际 IP 返回类似的内容

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

如果上述语句正确返回,您将能够接受远程用户。 但是,要使远程用户使用正确的权限连接,您需要在 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 语句语法。

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

更新:如果即使在my.cnf添加/更改bind-address也不起作用,那么请在最初声明的位置更改它:

/etc/mysql/mariadb.conf.d/50-server.cnf

在 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;

用户 == 用于连接到 mysql ex.root 的用户
passwd == 你用来连接到 mysql 的密码

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

sudo ufw allow 3306

检查状态使用

sudo ufw status

4) 一旦建立了远程连接,就可以使用命令在客户端或服务器机器上进行验证

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

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

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

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

在 [mysqld] 下找到那行,bind-address = 127.0.0.1 并改成,bind-address = 0.0.0.0 或者注释掉

然后,重启 Ubuntu MySQL Server systemctl restart mysql.service

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

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

为确保 MySQL 服务器侦听所有接口,请按如下方式运行 netstat 命令。

netstat -tulnp | grep mysql

希望这有效!

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

就我而言,我使用的是 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

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

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

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

因此我直接在那里更改了绑定地址,然后一切似乎都在工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM