MySQL在本机没法基于localhost访问的问题解决

引言: 在本地访问数据库之时,通常使用localhost, 127.0.0.1来进行数据库访问,可是笔者这几天就碰到了只能经过127.0.0.1来访问,可是没法基于localhost来访问,很是之诡异…..php

环境介绍

Centos 7, mariadb 10.2 tomcat 8 , Java War应用java

问题表现

在数据库链接中使用了localhost:3306之类的链接信息,可是在启动服务过程当中,一直在报链接数据库的错误信息:mysql

Java.sql.SQLException: Access denied for user ‘bladestone’@’localhost’ (using password: YES) 
at com.MySQL.jdbc.SQLError.createSQLException(SQLError.java:1078) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:928) 
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1750)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1290) 
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2493) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2526) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2311) 
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:834) 
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47) 
at sun.reflect.GeneratedConstructorAccessor62.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347) 
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:142) 
at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:211) 
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:136) 
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1271)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1325)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1215)
[com.alibaba.druid.pool.DruidDataSource]create connection errorsql

可是,切换到127.0.0.1确是能够被正常访问的,问题出在localhost上。数据库

分析过程

ping localhosttomcat

这个命令是能够正常访问的, 换句话说localhost是一个正确的域名,能够被正确的解析到。 
以后回想起来,以前是使用以下命令来受权访问的:ide

grant all privileges on zhouzdb.* to ‘zhouz’@’%’ identified by ‘1234’;ui

后面的‘%’是一个通配符,用以匹配因此的ip地址,可是其是否能够匹配localhost这个特殊域名呢?验证一下便可知道:.net

 grant all privileges on zhouzdb.* to ‘zhouz’@’locahost’ identified by ‘1234’;code

在本地从新访问一下mysql,结果顺利访问成功了。结果证实: %没法匹配localhost这个特殊的域名地址信息,须要额外进行添加设置。

总结

这里的分析过程当中,有一个想固然的问题是通配符是否能够匹配localhost的问题,本身在从一开始就认为应该是,可是事实上不是的。因为这个错误的假定认知,结果花费了很是多的时间分析这个问题,这其中的弯路是很是值得深思的。

http://www.woaipu.com/shops/zuzhuan/61406http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=117777http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=117890http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=117994http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=118376

相关文章
相关标签/搜索