zoukankan      html  css  js  c++  java
  • 详解mysql如何配置远程链接,解决各种连接问题

      在服务器上面我们经常需要去使用mysql,有些童鞋刚刚配置好了服务器,想在本地的一些图形化软件去连接mysql得到更直观的表格显示,此时很可能不允许连接,为了探究为什么连接失败,在这里我会对mysql里的mysql数据库的user表进行分析,相信看完之后,大致的权限以及主机的连接问题,都会迎刃而解

      1.问题分析

      基本每个mysql都会有名为mysql的数据库,里面存放的是mysql的核心东西,其中user表里面就有mysql连接的用户信息,里面的字段有如下

        1.Host    (允许连接的主机,%代表全部主机可以连接)

        2.User    (连接的用户名)

        3.password  (连接的密码,密码用mysql自带的password函数加密)

        4.Select_priv   (是否允许查询,Y表示允许,N表示拒绝)

        5.Alter_priv  (是否允许插入数据,Y表示允许,N表示拒绝)

      剩下都是一堆权限,和Select_priv的设置一样,其实组合起来就很容易理解了,处在host地址的用户User可以通过密码password访问数据库对应的权限。

      举个粟子:例如有以下记录(省略部分权限字段)

    +------+-------------------------------------------+--------------+-------------+

    | user | password | Host | Select_priv |
    +------+-------------------------------------------+--------------+-------------+
    | root | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | localhost | Y |

     

      ip地址在localhost的用户root可以通过password函数加密之后密码*B16BCB720468FF0ED1..为访问数据库,并可以使用Select_priv权限 。

      相信看到这里你已经明白了为什么,怎么不能连接mysql呢?其实就是你的条件没有符合user表里的记录,只要符合 用户名(user),密码(password),主机地址(Host),你就能访问数据库,至于权限,那就得看后面对应的字段。

      至于多条记录之间同一个用户是取交集还是取最新一条,我还没测试过,我出问题的时候查询数据库是有以下记录。

     +------+-------------------------------------------+--------------+-------------+

    | user | password | Host | Select_priv |
    +------+-------------------------------------------+--------------+-------------+
    | root | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | % | Y |
    | root |  | localhost  | N|

       那时候远程访问需要密码,但是可以全部权限可以访问,但是在本地用命令行mysql -uroot -p密码 连数据库输了密码就错,一狠心不输入密码,居然可以了,但是什么权限都没有。一查数据库看到上面的数据顿时知道出什么事了...

      最后一条记录localhost限制了访问权限,之后我一样在本地访问,但是指定了一下ip地址,让mysql认为我是127.0.0.1,就可以访问全部权限了...

      2.解决问题

      相信看到很多人就知道怎么做了,如果要远程访问数据库,只需要把拥有全部权限的root账号对应的记录的Host字段改为%就可以了。在我这里数据库显示是这样子(忽略若干权限...一般root账户如果后面Select_priv为Y,其他一般都全为Y)。

    mysql> select user,Host,password,Select_priv from user;

    +------+--------------+-------------------------------------------+-------------+
    | user | Host | password | Select_priv |
    +------+--------------+-------------------------------------------+-------------+
    | root | localhost | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | Y |
    | root | iz289q95684z | | Y |
    | root | 127.0.0.1 | | Y |
    | root | ::1 | | Y |
    | | localhost | | N |
    | | iz289q95684z | | N |
    +------+--------------+-------------------------------------------+-------------+

       只要把第一条记录改为的Host改为%就好了

      以下是命令:  

    update user  set Host = '%' where Host = 'localhost' & user = 'root'; 
    flush privileges;

      以上第一条命令为修改允许访问的主机地址

      第二条命令为刷新权限

      只要执行上面的两条命令就能远程访问服务器。当然啦,具体情况具体分析,可能你本地的数据库记录和我的不同,那么你只需要按着上面的介绍去调整就好了,最后别忘了执行flush privileges刷新一下。

       3.特殊情况

      如果你还是没有解决问题,远程连接还是连接不上,那么很有可能是你的mysql配置文件绑定了本地,你可以找到本地的mysql配置文件去进行修改,mysql配置文件叫my.cnf,如果找不到路径可以用locate my.cnf去查找,在我这里就是/etc/mysql/my.cnf。在里面你会看到一系列的mysql配置信息,找到里面的bind-address,这个就是万恶之源。把他注释掉(在前面加#)再重启mysql就OK了。

         万恶的mysql,终于看到连接成功页面了。。。

  • 相关阅读:
    IOC Unity的配置问题
    编译时常量与运行时常量
    Revit二次开发,将插件按钮(Ribbon)变灰或者隐藏
    C#类库读取App.config配置文件
    winform固定窗体大小
    Revit二次开发,获取模型版本信息
    JavaScript:文件保存自動下載函數:Save和SaveAs
    JavaScript:年月日時分秒設置
    JavaScript:字符串の空格刪減和字符刪減功能
    JavaScript:獲取數據の類型
  • 原文地址:https://www.cnblogs.com/s-b-b/p/5974332.html
Copyright © 2011-2022 走看看