1. 程式人生 > >Java常見問題之Access denied for user 'root'@'localhost'

Java常見問題之Access denied for user 'root'@'localhost'

本文介紹了出現Access denied for user 'root'@'localhost' (using password: YES)問題的解決方式

一.bug提示如下

[Druid-ConnectionPool-Create-879333993] [com.alibaba.druid.pool.DruidDataSource]-[ERROR] create connection error
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964
) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:873) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1710) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226
) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2194) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779
) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)

二.分析

Access denied for user 'root'@'localhost' (using password: YES)指通過賬號名:root,以及root的密碼無法訪問本地的資料庫,那問題鎖定在連線資料庫的賬號和密碼上,與datasource的配置有關.

三.解決

因為我使用的是yml檔案配置datasource,找到yml檔案,並開啟如下程式碼:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ndc?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

將以上程式碼中usernamepassword改為正確的賬號密碼即可.

四.思考

出現上述問題,主要是因為部署專案到遠端伺服器時需要切換連線的資料庫路徑以及更換賬號密碼,因連線的伺服器資料庫資訊與本地資料庫資訊不一致造成,為了防止頻繁變更資料庫的賬號和密碼,可以將賬號和密碼設定為相同的.

簡書