溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Node.js中使用MySQL時(shí)出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306報(bào)錯(cuò)如何解決

發(fā)布時(shí)間:2021-07-21 10:19:49 來(lái)源:億速云 閱讀:1017 作者:Leah 欄目:web開(kāi)發(fā)

Node.js中使用MySQL時(shí)出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306報(bào)錯(cuò)如何解決,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

import Sequelize from 'sequelize';
let sequelize = new Sequelize('database', 'username', 'password', {
 host: 'localhost',
 port: 3306,
 dialect: 'mysql',
 pool: {
  max: 5,
  min: 0,
  idle: 10000
 }
});
// ...后面還有一堆懶得貼了

運(yùn)行一下

SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306

什么鬼,為什么會(huì)出現(xiàn)這個(gè)錯(cuò)誤呢?我明明設(shè)置的是 localhost,為什么會(huì)變成 127.0.0.1?

解決問(wèn)題

照例先谷歌,確實(shí)發(fā)現(xiàn)了很多人也遇到了這個(gè)問(wèn)題,解決方法大概有這么幾種:

     1、你丫以為不用裝 MySQL 就能跑了么?快去裝數(shù)據(jù)庫(kù)!

     2、你數(shù)據(jù)庫(kù)運(yùn)行了么你?趕緊 /etc/init.d/mysqld start 運(yùn)行起來(lái)

     3、端口寫(xiě)錯(cuò)了

     4、你是不是開(kāi)啟了 skip-networking 這個(gè)選項(xiàng)?Remove it !

看到這里,我反應(yīng)過(guò)來(lái)了,因?yàn)槲业臄?shù)據(jù)庫(kù)不涉及到遠(yuǎn)程訪問(wèn),只要使用 Unix socket 通信就夠了,于是就啟用了 skip-networking 讓 MySQL 不監(jiān)聽(tīng)指定端口。

先科普一下 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.

翻譯一下就是:

不要監(jiān)聽(tīng) TCP/IP 連接。所有與 mysqld 的交互必須使用命名管道或共享內(nèi)存(在 Windows 上)或 Unix socket 文件(在 Unix 上)。強(qiáng)烈建議對(duì)只允許本地客戶(hù)端的系統(tǒng)使用此選項(xiàng)。

來(lái)源

但是為了安全性,我并不想把這個(gè)選擇給移除,難道只好忍痛不用 ORM 了嗎?

因?yàn)榭戳宋臋n,mysql 這個(gè)連接庫(kù)是可以使用 socketPath 這個(gè)屬性指定 Unix 套接字文件,但是 Sequelize.js 沒(méi)發(fā)現(xiàn)有關(guān)屬性。

最后只好發(fā) issue,不久就有 dalao 回答說(shuō)可以用 dialectOptions 設(shè)置 mysql 的屬性。

下面是測(cè)試成功的代碼:

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
 }
});

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI