在服务器上面我们经常需要去使用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,终于看到连接成功页面了。。。

详解mysql如何配置远程链接,解决各种连接问题的更多相关文章

  1. 详解MySQL中concat函数的用法(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...

  2. MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!

    MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!2017年06月15日 19:59:44 蓝色-鸢尾 阅读数:2062版权声明:本文为博主原创文章,如需转 ...

  3. [深入学习Web安全](5)详解MySQL注射

    [深入学习Web安全](5)详解MySQL注射 0x00 目录 0x00 目录 0x01 MySQL注射的简单介绍 0x02 对于information_schema库的研究 0x03 注射第一步—— ...

  4. Mysql常用show命令,show variables like xxx 详解,mysql运行时参数

    MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法. 详细: http://dev.mysql.com/doc/ ...

  5. SQL Server 2008 允许远程链接 解决方法

    用户在使用SQL Server 2008远程链接时,可能会弹出如下对话框: 在链接SQL服务器时发生网络链接错误或特定实例错误.SQL服务器不存在或者链接不成功.请验证用户名是否正确或SQL服务器是否 ...

  6. 详解MySQL索引

    原文链接详解MySQL索引 索引介绍 索引是帮助MySQL高效获取数据的数据结构.在数据之外,数据库系统还维护着一个用来查找数据的数据结构,这些数据结构指向着特定的数据,可以实现高级的查找算法. 本文 ...

  7. MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题

    MySQL 数据类型中的 integer types 有点奇怪.你可能会见到诸如:int(3).int(4).int(8) 之类的 int 数据类型.刚接触 MySQL 的时候,我还以为 int(3) ...

  8. MySQL存储过程详解 mysql 存储过程

    原文地址:MySQL存储过程详解  mysql 存储过程作者:王者佳暮 mysql存储过程详解 1.     存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...

  9. 【文章阅读】详解MySQL数据类型

    详解MySQL数据类型 - 五月的仓颉 - 博客园 http://www.cnblogs.com/xrq730/p/8446246.html 注:对于MySQL的数据类型做了详细的讲解,这是我看过的最 ...

随机推荐

  1. 【Oracle基本操作1】 数据库的新建删除

    一.新建数据库 1.新建数据库. 1.1打开 Database Configuration Assistant  : 1.2选择新建数据库,下一步,选第一个"一般用途或事物处理": ...

  2. Java工程师成神之路

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:279558494 我们一起学Java! 一.基础篇 1.1 JVM 1.1.1. J ...

  3. HashMap与HashTable的区别

    HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的问题不涉及到HashSet和H ...

  4. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

  5. ASP.NET CORE配置信息

    做个笔记,原文链接 除了应用 IOptions<T> .Value的方式对配置信息进行全局注册外可以应用的另一个微软给出的组件,需要依赖两个包 Microsoft.Extensions.C ...

  6. Mysql(windows)安装

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  7. Titanium.App.Properties 对象

    Titanium.App.Properties是用来管理键值对数据的一个很方便的对象.在保存数据的时候,在Ti.App.Properties.setString相对应的Key的值中设置你要保存的值即可 ...

  8. mvc mvp mvvm模式的区别

    mvc模式中,Model不依赖于View,但是View是依赖于Model的,m和v没有进行完全的分离,三者之间是单向的操作 mvp模式中,m和v之间的交互是双向的,m和v完全分离,m和v的交互是通过P ...

  9. 华为Java编程军规,每季度代码验收标准

    引言: 这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值. 军规一:[避免在程序中使用魔鬼数字,必须用有意义的常量来标识.] 军规二:[明确方法的功能,一个方法仅完成一个功能.] 军规三: ...

  10. JS巧妙思路

    <script type="text/javascript"> window.onload = function () { var btn = document.get ...