Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
远程连接Mysql Ubuntu_Mysql_Ubuntu_Remoting - Fatal编程技术网

远程连接Mysql Ubuntu

远程连接Mysql Ubuntu,mysql,ubuntu,remoting,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

由于某种原因,我无法远程连接到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';` 
还是什么都没有! 我做错了什么


EDIT
my.cnf
已注释掉绑定ip。

要将MySQL公开给本地主机以外的任何对象,您必须具有以下行

适用于mysql 5.6及以下版本

/etc/mysql/my.cnf
中未注释,并分配给您的计算机IP地址,而不是环回

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx
适用于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
这应该会回来像这样的东西与您的实际IP在xxx的

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)
如果上述语句返回正确,则您将能够接受远程用户。但是,要使远程用户使用正确的权限连接,需要在本地主机和“%”中创建该用户,如中所示

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

最后

FLUSH PRIVILEGES; 
EXIT;
如果您没有如上所述创建相同的用户,则当您在本地登录时,您可能会继承基本本地主机权限并存在访问问题。如果您想限制myuser的访问权限,那么您需要阅读GRANT语句语法,如果您完成了所有这些,并且在发布一些额外的错误输出和my.cnf相应行时仍然存在问题

注意:如果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) 如果由于某种原因更改没有立即生效,请使用
刷新权限
强制加载授权表

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;
user==用于连接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 = 127.0.0.1
# skip-external-locking
进行这些更改后,我们需要重新启动mysql服务:

sudo service mysql restart

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

您使用的是ubuntu 12(非常旧的一个)

首先,打开/etc/mysql/mysql.conf.d/mysqld.cnf文件(/etc/mysql/my.cnf,在Ubuntu14.04和更早版本中)

在[mysqld]下找到该行, 绑定地址=127.0.0.1 把它改成, 绑定地址=0.0.0.0 或者评论一下

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

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

用户必须是
“用户名”@“%
,并具有所有必需的授权

要确保MySQL服务器侦听所有接口,请按如下所示运行netstat命令

netstat-tulnp | grep-mysql


希望这能奏效!

在我的例子中,我使用的是MySql服务器版本:8.0.22

我必须补充一点

bind-address        = 0.0.0.0
把这行改成

mysqlx-bind-address = 0.0.0.0
存档于 /etc/mysql/mysql.conf.d

然后通过运行

sudo service mysql restart

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

经过搜索,我找到了声明绑定地址的原始位置

实际声明位于:
/etc/mysql/mariadb.conf.d/50 server.cnf


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

您使用的是什么版本的MySQL?服务器版本:5.5.29-0ubuntu0.12.10.1(Ubuntu)这个命令返回什么?ubuntu ~$sudo lsof-i-P | grep:3306谢谢,尽管我第一次正确地遵循了这些步骤,但我还是在你发布的时候再次执行了这些步骤,并且工作得很有魅力!对于其他正在与
lsof-i-P | grep:3306
斗争的人来说,这不起作用,但是远程连接在没有确认的情况下仍然可以正常工作,d如果您没有看到正确的输出,请单击此处。@Mike Slutsky感谢您的提示,我编辑了我的答案。如果尚未安装lsof,您可以安装它。FWIW在许多系统上
sudo lsof-I-P
将比
lsof-I-P
有用得多(假设您以非特权用户身份登录).
lsof-i-P | grep:3306
不返回任何内容!这节省了我一整天的时间!感谢
sudo ufw状态
!!
netstat-nlt | grep 3306
返回empty@João Pimentel Ferreira确保首先运行mysql,使用命令“/etc/init.d/mysql status”为了验证感谢
sudo ufw allow 3306
请确保注释
跳过外部锁定
我没有注释掉跳过外部锁定,它仍然有效。我必须在中更改它/