解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题


Posted in Javascript onMarch 09, 2017

前言

最近用 Node 写一个小玩意,需要用到 MySQL 数据库,现在用得最广泛的是 mysql 这个库。然后呢,现在 ORM 这么火,干脆也上 ORM 吧,正好我也不会可以学习一下,于是找到了 Sequelize.js 这个 ORM 库。

发现问题

看看 Sequelize 的文档,so easy,两分钟搞定~

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

就是这么简单…

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery隐藏标签和显示标签的实例
Nov 11 Javascript
详解JavaScript的策略模式编程
Jun 24 Javascript
javascript实现2016新年版日历
Jan 25 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
JavaScript数据结构学习之数组、栈与队列
May 02 Javascript
JS实现简单短信验证码界面
Aug 07 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
vue组件watch属性实例讲解
Nov 07 Javascript
JS监听事件的叠加和移除功能
Nov 19 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 Javascript
基于vue实现分页/翻页组件paginator示例
Mar 09 #Javascript
vue.js利用Object.defineProperty实现双向绑定
Mar 09 #Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 #Javascript
微信小程序 五星评价功能的实现
Mar 09 #Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 #Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
Mar 09 #Javascript
Vue监听数据对象变化源码
Mar 09 #Javascript
You might like
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
php 分页类 扩展代码
2009/06/11 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
php多重接口的实现方法
2015/06/20 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
五段实用的js高级技巧
2011/12/20 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
简介Django框架中可使用的各类缓存
2015/07/23 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python中get和post有什么区别
2020/06/19 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
python实现控制台输出颜色
2021/03/02 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
餐厅筹备计划书
2014/04/25 职场文书
2014年党支部承诺书
2014/05/30 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
单位实习介绍信
2015/05/05 职场文书
今日说法观后感
2015/06/08 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
安全教育的主题班会
2015/08/13 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript