Unhandled rejection SequelizeAccessDeniedError: Access denied for user 'lupeng'@'localhost' (using password: YES)
這是Node
在使用Sequlize
鏈接Mysql
數據時報的錯,關鍵看冒號後面的錯誤:訪問拒絕,關鍵是訪問拒絕的錯誤,說明數據庫鏈接這裏有問題,數據庫鏈接訪問拒絕,要麼是沒有相應的操做權限,要麼是帳號密碼錯誤。javascript
這樣就把問題定位在訪問權限以及帳號密碼錯誤兩點上了,千萬不要忘其餘方面去找問題了,那樣只會是浪費時間。java
1. 用戶權限的問題mysql
權限問題從數據庫着手,確認用戶受權後,是否刷新的權限列表。也就是在使用Grant
命令受權用戶後,應該要使用flush privileges
命令,這個是不少人會忽略的問題。sql
若是用戶受權沒有問題,那麼嘗試重啓mysql服務器。使用命令/etc/init.d/mysql restart
重啓mysql服務器,不一樣Linux版本重啓命令可能不同,我這裏是Debain系。shell
若是重啓了問題尚未解決,那麼可能就不是數據庫用戶權限的問題了。數據庫
2. 帳號密碼的問題npm
帳號密碼錯誤,這個問題聽起來很扯,可是開發過程當中,不少人會忽略掉。爲何這麼說?我使用的是config-lite
模塊來配置數據庫參數,由於會在多個系統環境中切換開發,使用config-lite
模塊能夠經過簡單的環境變量配置,來加載不一樣的參數文件。具體用法參照:不一樣環境下配置文件使用 - Node實戰 - 技術人生 - SegmentFault。json
個人問題就出如今這裏,打開一個終端運行項目npm run test
,package.json
文件裏配置着test
的運行腳本NODE_ENV=test supervisor --harmony -i views/ ./bin/www
。另打開一個終端,運行數據庫同步的命令,同步命令是單獨寫在一個js
腳本中,腳本里引用了數據鏈接方法(通用的),鏈接方法以下:segmentfault
var Sequelize = require('sequelize'); // 引入數據庫配置文件 var sqlConfig = require('config-lite')(__dirname).mysql; var sequelize = new Sequelize(sqlConfig.database, sqlConfig.user, sqlConfig.password, { host: sqlConfig.host, dialect: 'mysql', pool: { max: 10, min: 0, idle: 10000 } }); module.exports = sequelize;
因而在同步數據庫的時候,老是如標題報錯,然而以爲沒錯啊,最後檢查才發現問題所在:運行test
腳本里的NODE_ENV
環境變量只在當前終端下才有效,若是要另開一個終端來同步數據庫,那麼須要在另開的終端裏再設置一下環境變量。否則加載的數據庫參數是不一致的,也就是說鏈接數據庫的用戶名密碼是不對的。服務器
完