zoukankan      html  css  js  c++  java
  • window下利用navicat访问Linux下的mariadb数据库

    1.再Linux上成功安装mariadb数据库后,不管是在dos(敲命令mysql -h192.168.136.8 -uroot -p)下或者是navicat(创建连接)下连接mariadb数据库,会报错:

     Can't get hostname for your address

    2.在vim /etc/my.cnf文件下,添加

    [mysqld]

    skip-name-resolve

    解释:连不上mariadb数据库的原因是由于mysql对连接的客户端进行DNS反向解析。

    ①有2种解决办法:
       第一种:把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
       第二种:在 my.cnf 中加入 –skip-name-resolve 。
       对于第一种方法比较笨,也不实用,那么 skip-name-resolve 选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
    ②我理解mysql是这样来处理客户端解析过程的,
      当mysql的client连过来的时候,服务器会主动去查client的域名。
      首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
      如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,

      就进行反向解析,直到timeout。

      ③所谓反向解析是这样的:
      mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
      如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。
      添加skip-name-resolve以后就跳过着一个过程了。

    3.一般情况下,应该就能连上mariadb数据库了。如果上述方案还是不行的话,那么就可能是你的数据的权限没有分配,执行以下命令:


    登录Linux的mariadb数据库,使用mysql -uroot -p //这样应该可以进入MySQL服务器

    mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION //赋予任何主机访问数据的权限

    mysql>FLUSH PRIVILEGES //修改生效

    mysql>EXIT //退出MySQL服务器

  • 相关阅读:
    Delphi操作ACCESS技巧集
    Delphi ADOQuery
    Delphi 与SQL编程
    delphi Sqlite
    Delphi 2010下使用sqlitesimpledelphi连接SQLite数据库及中文乱码问题的解决
    Java并发指南13:Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
    Java并发指南12:深度解读 java 线程池设计思想及源码实现
    Java并发指南11:解读 Java 阻塞队列 BlockingQueue
    Java并发指南10:Java 读写锁 ReentrantReadWriteLock 源码分析
    Java并发指南9:AQS共享模式与并发工具类的实现
  • 原文地址:https://www.cnblogs.com/jpfss/p/10128112.html
Copyright © 2011-2022 走看看