1. 程式人生 > 實用技巧 >java換成ip訪問資料庫無法訪問

java換成ip訪問資料庫無法訪問

一.錯誤現象

1.1 問題描述

springboot使用雙資料來源:本意是從第一個資料庫中查詢導資料然後加入另外一個數據庫,程式碼一切正常後執行結果如下報錯,

仔細一排查發現數據是查詢到的,說明是入資料的庫出問題了,結果發現我之前連線的時候是用'localhost'去連線的,在專案中配置成ip就不行了,

從報錯中的意思就是安裝了資料庫的伺服器不允許部署專案的伺服器進行遠端連線。也就是許可權問題,修改許可權就可以了。

spring.datasource.db2.jdbc-url=jdbc:mysql://192.168.95.2:3306/app_database?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.db2.username=root spring.datasource.db2.password=admin spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver

[{password=app_manage, is_enable=1, account_name=系統管理員, id=1, account=appmanage}]
[DEBUG] 2020 七月 16 17:09:52 -->[SqlSessionUtils.java:97] Creating a new SqlSession
[DEBUG] 
2020 七月 16 17:09:52 -->[SqlSessionUtils.java:148] SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@570ba13] was not registered for synchronization because synchronization is not active [INFO ] 2020 七月 16 17:09:52 -->[HikariDataSource.java:110] HikariPool-2 - Starting... [WARN ] 2020 七月 16 17:09:52 -->[DriverDataSource.java:68] Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation. [ERROR]
2020 七月 16 17:09:53 -->[HikariPool.java:574] HikariPool-2 - Exception during pool initialization. java.sql.SQLException: null, message from server: "Host 'PCMICRO-D7ND2F2' is not allowed to connect to this MySQL server" at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136) at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)

1.2 解決辦法

找到資料庫預設就有的user表,這個可以通過工具找,因為我的遠端連線工具是Navicat,user表就在這裡

比如我這裡專案用的使用者名稱是root,預設只允許使用localhost連線,那麼就把"localhost"的Host改成%,就可以了,之後還要執行一下執行重新整理許可權:flush privileges(它的執行就像sql語句一樣執行就可以了);

1.3 步驟也可以這樣操作:

在mysql的bin目錄下執行:mysql -u root -p 密碼 登陸到資料:
執行use mysql;
select host,user from user;
可以看到user為root,host為localhost的話,說明mysql只允許本機連線,那麼外網,本地軟體客戶端就無法連線了。
調整方法:
執行:update user set host='%' where user ='root';
執行重新整理許可權:flush privileges;
可以測試外網連線mysql伺服器。