您好,登錄后才能下訂單哦!
Node.js中使用MySQL時出現connect ECONNREFUSED 127.0.0.1:3306報錯如何解決,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
import Sequelize from 'sequelize'; let sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', port: 3306, dialect: 'mysql', pool: { max: 5, min: 0, idle: 10000 } }); // ...后面還有一堆懶得貼了
運行一下
SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306
什么鬼,為什么會出現這個錯誤呢?我明明設置的是 localhost,為什么會變成 127.0.0.1?
解決問題
照例先谷歌,確實發現了很多人也遇到了這個問題,解決方法大概有這么幾種:
1、你丫以為不用裝 MySQL 就能跑了么?快去裝數據庫!
2、你數據庫運行了么你?趕緊 /etc/init.d/mysqld start 運行起來
3、端口寫錯了
4、你是不是開啟了 skip-networking 這個選項?Remove it !
看到這里,我反應過來了,因為我的數據庫不涉及到遠程訪問,只要使用 Unix socket 通信就夠了,于是就啟用了 skip-networking 讓 MySQL 不監聽指定端口。
先科普一下 skip-networking 是什么
Do not listen for TCP/IP connections at all. All interaction with mysqld must be made using named pipes or shared memory (on Windows) or Unix socket files (on Unix). This option is highly recommended for systems where only local clients are permitted.
翻譯一下就是:
不要監聽 TCP/IP 連接。所有與 mysqld 的交互必須使用命名管道或共享內存(在 Windows 上)或 Unix socket 文件(在 Unix 上)。強烈建議對只允許本地客戶端的系統使用此選項。
來源
但是為了安全性,我并不想把這個選擇給移除,難道只好忍痛不用 ORM 了嗎?
因為看了文檔,mysql 這個連接庫是可以使用 socketPath 這個屬性指定 Unix 套接字文件,但是 Sequelize.js 沒發現有關屬性。
最后只好發 issue,不久就有 dalao 回答說可以用 dialectOptions 設置 mysql 的屬性。
下面是測試成功的代碼:
import Sequelize from 'sequelize'; let sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', port: 3306, dialect: 'mysql', dialectOptions: { socketPath: '/tmp/mysql.sock' // 指定套接字文件路徑 } pool: { max: 5, min: 0, idle: 10000 } });
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。