[英]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.