nacos使用mysql8作为存储媒介时报Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not all
nacos2使用外部搭建的mysql8服務作為存儲媒介,剛搭建完mysql8發現nacos連接mysql8沒有任何問題,但是后面突然報了類似下面的異常信息
Caused by: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:906)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:831)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
?? ?at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
?? ?at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
?? ?at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354)
?? ?at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
?? ?at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
?? ?at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)
?? ?at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
?? ?at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
?? ?at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
?? ?at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
?? ?at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
?? ?... 172 more
Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed
?? ?at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
?? ?at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
?? ?at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:124)
?? ?at com.mysql.cj.protocol.a.authentication.CachingSha2PasswordPlugin.nextAuthenticationStep(CachingSha2PasswordPlugin.java:151)
?? ?at com.mysql.cj.protocol.a.authentication.CachingSha2PasswordPlugin.nextAuthenticationStep(CachingSha2PasswordPlugin.java:49)
?? ?at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:438)
?? ?at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:171)
?? ?at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1342)
?? ?at com.mysql.cj.NativeSession.connect(NativeSession.java:157)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:850)
?? ?... 186 more
Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed
?? ?at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
?? ?at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
?? ?at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
?? ?at com.mysql.cj.protocol.a.authentication.CachingSha2PasswordPlugin.nextAuthenticationStep(CachingSha2PasswordPlugin.java:128)
前幾次還報了下面的錯誤日志:
Caused by: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
?? ?at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:906)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:831)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
?? ?at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
?? ?at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
?? ?at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354)
?? ?at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
?? ?at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
?? ?at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554)
?? ?at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
?? ?at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
?? ?at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
?? ?at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
?? ?at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
?? ?... 172 more
Caused by: com.mysql.cj.exceptions.CJException: null, ?message from server: "Host '172.18.0.4' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
?? ?at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
?? ?at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
?? ?at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
?? ?at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:129)
?? ?at com.mysql.cj.protocol.a.NativeProtocol.rejectProtocol(NativeProtocol.java:365)
?? ?at com.mysql.cj.protocol.a.NativeProtocol.readServerCapabilities(NativeProtocol.java:494)
?? ?at com.mysql.cj.protocol.a.NativeProtocol.beforeHandshake(NativeProtocol.java:377)
?? ?at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1340)
?? ?at com.mysql.cj.NativeSession.connect(NativeSession.java:157)
?? ?at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:850)
?? ?... 186 more
最下面爆出的日志都是
Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
?? ?at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:204)
?? ?at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:52)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?? ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
?? ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
?? ?at java.lang.reflect.Method.invoke(Method.java:498)
?? ?at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
?? ?at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
?? ?at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
?? ?... 53 common frames omitted
Caused by: java.lang.IllegalStateException: No DataSource set
?
所以如果不向上翻日志的話可能找不到解決問題的方法,最初幾次nacos啟動失敗爆出的錯誤信息也不能明確問題所在,只能告訴我們nacos連接MySQL錯誤次數過多,最后一次啟動失敗日志則給出了明確的解決方向,具體方法為在數據庫連接url上增加allowPublicKeyRetrieval=true配置
如果使用nacos-server docker部署的話可以增加下面的配置
?MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=2000&allowPublicKeyRetrieval=true&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
該參數具體解析參照mysql官網說明:https://mysqlconnector.net/connection-options/
總結
以上是生活随笔為你收集整理的nacos使用mysql8作为存储媒介时报Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not all的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《introduction to inf
- 下一篇: linux服务器双网卡链路聚合,服务器多