解决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学习2 选择器的使用说明
Feb 07 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
上传图片js判断图片尺寸和格式兼容IE
Sep 01 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
Feb 17 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
浅谈angularjs $http提交数据探索
Jan 20 Javascript
bootstrap中模态框、模态框的属性实例详解
Feb 17 Javascript
微信小程序 下拉列表的实现实例代码
Mar 08 Javascript
vue.js删除列表中的一行
Jun 30 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
优化PHP代码的53条建议
2008/03/27 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
php命令行写shell实例详解
2018/07/19 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
js微信分享实现代码
2020/10/11 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
生产助理岗位职责
2014/06/18 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
高中生逃课检讨书
2014/10/10 职场文书
电气工程师岗位职责
2015/02/12 职场文书
工作简报范文
2015/07/21 职场文书
公司老总年会致辞
2015/07/30 职场文书
会计岗位工作总结
2015/08/12 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
PHP基本语法
2021/03/31 PHP
python全面解析接口返回数据
2022/02/12 Python