引言: 在本地訪問數據庫之時,通常使用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