mysql 不能远程连接

不想浪费大家时间,我这文章记录了我在vagrant上架的mysql远程连接不上的问题,不过我在整理时发现这个下面这个链接,如果我一开始能找到这个我就不会绕那么多弯了。不想看我是怎么一步步调错过程的请直接看下面地址,我也将内容复制到了地址下面了。自己调试过程有点长,当记录吧,有兴趣的可以看下,也许对你有帮助

http://www.jb51.net/article/33813.htm

vim /etc/my.cnf

注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1
保存退出。
mysql -uroot -p123456

为需要远程登录的用户赋予权限:

复制代码代码如下:

mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "123456";
mysql> flush privileges;

远程登录命令:

mysql -h 223.4.92.130 -uroot -p(-h后跟的是要登录主机的ip地址)


我的实现操作调试过程上面看懂了解决问题了可以下面的不用看。

我的实际情况说明

用第三方的软件去登陆服务器上的数据库mysq,第三软件为navicat

环境:mac os 10.11.5   vagrant centos7  box是德国的(语言找过来了应该影响不大) lnmp 一键安装版本

原因:要将数据库的结构同步到另一个数据库   实现方法用navicat 这个软件进行(数据结构同步自行搜索)

问题:安装并破解navicat 后一直登陆不了mysql 提示不能远程连接 (mac下的破解过过程自己搜索)

错误提示:

首先我的目标ip地址是192.168.10.10(本地的测试服务器)使用vagrant 架设,安装了centos7.

navicat 的连接信息

这样填写提示连接不上,192.168.10.10不能连接?

我再试了下ssh连接

得到的提示是192.168.10.10这个mysql没有远程连接权限。(ps:我的是mac环境用过Sequel Pro.app 的ssh 连接是没有问题的当时3306端口我都没有开启呢)

是不是centos7的端口没有开呢?

sudo firewall-cmd --query-port=3306/tcp  //永久开放3306端口

sudo firewall-cmd —reload  //重启防火墙

重新用navicat 的ssh 连接方法尝试,结果是跟上面提示一样,连接失败192.168.10.10不允许远程连接

直接用navicat 常规连接试下(常规指直接用mysql的ip 账号密码登录)提示改变了

端口开启后提示是有改变的。看来还得继续解决

前面有提示到192.168.10.10没有远程连接权限是不是mysql的账号不允许远程连接呢?百度 google了下mysql 远程连接.

常规的几种方法(自行查找下吧)

1.修改mysql 内的mysql数据库 user表下, root 账号下host为localhost 改为%

网上多数都教用命令行去修改(ps:直接phpmyadmin修不就好了吗?为什么非要用命令行修改,后来才知道,不过还是被坑了一把后面说)

#mysql -uroot -p

填写密码

use mysql

update user set host = ‘%‘ where user = ‘root‘;

ERROR 1062 (23000): Duplicate entry ‘%-root‘ for key ‘PRIMARY’   //这是报错吗?

select host, user from user; //查看下数据表

报错但,这个修改算是成功了。

再一次尝试用navicat 做常规连接 结果是

再来一次ssh 结果是

第二种方法:

授权法

GRANT ALL PRIVILEGES ON *.* TO ‘用户名‘@‘%‘ IDENTIFIED BY ‘用户密码‘ WITH GRANT OPTION;    //增加一个账号,任何ip都可以连接这到个mysql

GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘192.168.10.10‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION; //设置root用户可以通过192.168.10.10这个ip登陆 ip地址自己填写

好吧我就填写了ip地址的方法。还是失败。

第三种方法:

修改my.cnf 将远程打开  //mysql 5.0版前后有区别,一般网上找到的修改是5.0后的修改方法。

注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1

//5.0版本前是找不到bind-address的 那就注释掉 #skip-networking  //我本地本来就是注释了的。

因为常规连接时报的是192.168.10.1这个vagrant 的桥接网关吧(ps:我是这样理解的有错大家指出来),没有远程连接mysql的权限?

用telnet 192.168.10.10 3306 得到的也是192.168.10.1没有mysql 远程连接权限的报错

为什么是192.168.10.1   是因为vagrant的环境有问题吗?一直都是这样想

后来又是各种试吧,但一直不行。最后看到百度经验里的一篇文章,文章上的mysql是在windowns上的,也是修改ip地址允许的方法。死马当活马医吧,照做一次,当时root 的host改成了%了 ,我就以为是192.168.10.1这个真的没有权限远程吗?所以再加了一个192.168.10.1这个ip上去  ,不同的地方是下面这个命令

flush privileges;   //重新加载权限,让修改的权限生效

//重新加载权限。。。。对好多文章都没有加入重新加载权限这一条,我重启linux后mysql 也没有给我重新加载权限(当时没有去试重新启动mysql,有兴趣的可以自行试下)

妹的搞了一大圈就是因为修改了权限没有重新加载,我们这种不太懂mysql内操作的怎么办。

然后呢,打算自己总结下问题写这个文章吧,想将问题重现一次来做测试,将root 允许192.168.10.1这个删除了尝试,navicat还是可以连接,再删除了任何ip都能访问那一条设置还是能用navicat常规连接,当时就快疯了,为什么?最后再将root host %改回localhost   flush privileges; (ps:一定要重置下配置好的权限) 问题终于重现了。

最后吐槽一下百度 firewall-cmd 关闭端口的方法,出来的结果不是开端口呢就是直接将firewall这个防火墙关了,去google 用相同的关键字一查第一条就是我要找的结果

sudo firewall-cmd --permanent --remove-port=3306/tcp  //关闭centos7 3306这个端口

当然不要忘记要重启防火墙生效哦

sudo firewall-cmd --reload

时间: 2024-08-25 04:09:32

mysql 不能远程连接的相关文章

MySQL开启远程连接的方法

原文地址 http://www.cnblogs.com/linjiqin/p/5270938.html 配置mysql允许远程连接的方法 默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0.0.1这一行改为bind-address = 0.0.0.0即可 二.为需要远程登录的用户赋予权限1.新建用户远程连接mysql数据库grant all on

MySQL数据库远程连接开启方法

第一中方法:比较详细以下的文章主要介绍的是MySQL 数据库开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是MySQL 数据库开启远程连接的时机操作流程. 1.d:\MySQL\bin\>MySQL -h localhost -u root 这样应该可以进入MySQL服务器 复制代码代码如下: MySQL>update user set host = '%' where user = 'root'; MySQL>

mysql 打开远程连接

1.在控制台执行 mysql -u root -p mysql,系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台,这个命令的第一个mysql是执行命令,第二个mysql是系统数据名称,不一样的. 2.在mysql控制台执行 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyPassword' WITH GRANT OPTION; 3.在mysql控制台执行命令中的 ‘root'@'%' 可以这样理解: ro

mysql允许远程连接

1. 3306端口是不是没有打开? 使用nestat命令查看3306端口状态: ~# netstat -an | grep 3306 tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN 从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问. 解决方法:修改/etc/mysql/my.cnf文件.打开文件,找到下面内容: # Instead of skip-netw

mysql 开启远程连接指定的数据库

mysql 开启远程连接指定的数据库 grant all privileges on `my_db`.* to 'username'@'%' identified by 'passwod' WITH GRANT OPTION; FLUSH PRIVILEGES; FLUSH PRIVILEGES; my_db 表示要连接的数据库(提前建好) ,前面username这个是数据名字:后面passwod数据库密码

mysql 授予远程连接直接访问

不通过ssh通道,mysql 授予远程连接直接访问 语句 GRANT ALL PRIVILEGES ON *.* TO [email protected]'%' IDENTIFIED BY '!DSJdg!' WITH GRANT OPTION; 后来revoke 一下,错误. 重新grant 出现错误. mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected]'%' IDENTIFIED BY '!DSJdg!' WITH GRANT OP

[转]配置mysql允许远程连接的方法

配置mysql允许远程连接的方法 vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1保存退出.mysql -uroot -p123456 为需要远程登录的用户赋予权限: 复制代码代码如下: mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "123456";mysql&

开启本地MySql数据库远程连接

做网站,要经常更新数据库,接触的数据库肯定都是mysql.有时候建站的时候因为数据库和网站放在不同的IP,这个时候就需要用程序进行mysql的远程连接,而mysql因为安全的因素,默认的时候用户设置的是不能远程连接,只能本地连接,这个时候就需要自己去修改其中的设置.下面小编就介绍一下操作方法. 进入cmd命令模式. mysql -h localhost-u mysql -p Enter password: ****** 连接数据库. mysql> use mysql; (此DB存放MySQL的各

Linux下开启MySQL的远程连接

Linux下开启MySQL的远程连接 基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限.下面是基本的步骤: 1.登录到mysql中,为root进行远程访问的授权,执行下面的命令: mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "root"; mysql> flush privileges; 第一句中"%