解决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 相关文章推荐
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
浅谈Javascript事件模拟
Jun 27 Javascript
如何在指定的地方插入html内容和文本内容
Dec 23 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
Javascript Event(事件)的传播与冒泡
Jan 23 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
vue2中filter()的实现代码
Jul 09 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
Mar 07 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
ajax jquery实现页面某一个div的刷新效果
Mar 04 jQuery
js实现上传图片到服务器
Apr 11 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
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
php备份数据库类分享
2015/04/14 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
详解php协程知识点
2018/09/21 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python将多个excel表格合并为一个表格
2021/02/22 Python
python生成器与迭代器详解
2019/01/01 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
python读写csv文件方法详细总结
2019/07/05 Python
Python configparser模块常用方法解析
2020/05/22 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
新学期国旗下演讲稿
2014/05/08 职场文书
公关活动策划方案
2014/05/25 职场文书
机关党员公开承诺书
2014/08/30 职场文书
单位单身证明样本
2014/10/11 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
vue router 动态路由清除方式
2022/05/25 Vue.js