扯淡

难得闲情小折腾一下VBox,本打算做一个React Server Render的小Demo玩玩,于是做着做着便打算做个基于React的多语言资源管理的一个小平台(真是TM思维发散得厉害),于是乎,又碰到了当年碰到但是木有笔记的一个小问题。

我干了些啥

Macbook Pro上安装了一个vbox,一个Nginx(反向代理),一个node server(主要基于koa+node-mysql),然后vbox里面安装一个apt-get傻瓜版本的mysql(未做任何配置,坑爹,就是这里有问题哦),vbox安装ubuntu 12.04 server;

我的那些捣腾

在出现ECONNREFUSED之前,其实我还出现过一次远程连接主动关闭的信息,在虚拟机Nat网络配置下,可以进行虚拟机端口的映射,当时使用22端口映射OK的,ssh使用正常,但是配置mysql的默认端口3306到实体主体之间,nodejs的日志那一块就会抛出server端主动关闭connection的异常

后面发现,总觉得是进行Nat配置的问题(计算机网络硬伤,只能靠直觉),加上网上有些文章又在讲:Nat配置的子机器只能打通到上层机器的访问,上层机器是默认访问不到底层机器的(这句话需要考究真实性),所以换成了VBox的桥接模式,让实体主机与虚拟机之间形成同级关系,说白了,就是我和虚拟机之间的关系相当于变成了我和我室友在同一个wifi下的关系,我可以通过192.168.1.xxx直接ping他的电脑内网ip了。

可是不幸的是,换成了桥接模式,错误日志就抛出了如下信息:

Error: connect ECONNREFUSED 192.168.1.113:3306  
    at Object.exports._errnoException (util.js:855:11)
    at exports._exceptionWithHostPort (util.js:878:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1063:14)
    --------------------

尼玛,这时才想起好久好久以前,其实碰到过这个问题。这里,实际是mysql自己默认的安全机制的问题,mysql并没有默认允许你所有ip拥有远程访问的权利,所以打开一下mysql的配置文件:

sudo vi /etc/mysql/my.cnf  

我们发现如下行:

#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address          = 127.0.0.1  

mysql主要为了安全,做了唯一的ip绑定策略,这里我只是想捣腾一下Demo,你把你主人给策略了,那我还玩个蛋蛋?所以干脆注释掉就OK了。

最后来个重启

sudo service mysql restart  
  • 记住:万万不可在线上这么乱折腾哦~~

还有一点点

grant all PRIVILEGES on *.* to db_user@'%' identified by 'password';  
flush privileges;  

这个就不强调了哈,小记小记了。