Node.js 简单的MySQL proxy

本文介绍了如何使用Node.js实现一个简单的MySQL代理,以解决在本地开发时无法直接连接生产环境的问题。通过代理,可以在具备访问权限的服务器上转发MySQL请求,从而在本地进行测试。文中详细说明了安装commander依赖、编写proxy.js代码、启动代理服务以及测试的过程。

Node.js 简单实现MySQL Proxy


公司日常开发区分生产环境和测试环境,本地开发只能连接测试环境,无法连接生产环境,但是有些问题只有在生产环境才能重新,故写了一个简单的mysql proxy,在能够访问生产db的机器上安装后,本地通过代理连接远程生产。
功能:代理mysql访问(其实不单单实现mysql代理,可以是代理任何tcp server)
实现:简单的把请求转发给目的服务器。
缺点:功能简单,没有实现mysql协议解析,所以每个proxy进程只能代理一个mysql server

1. 安装依赖commander(https://github.com/tj/commander.js

npm install commander

2. 代码开发proxy.js

var net = require('net');
var program = require('commander');
function getIPAddress(){
    var interfaces = require('os').networkInterfaces();
    for(var devName in interfaces){
        var iface = interfaces[devName];
        for(var i=0;i<iface.length;i++){
            var alias = iface[i];
            if(alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal){
                return alias.address;
            }
        }
    }
}
HOST=getIPAddress();

program
    .version('0.0.1')
    .option('-P, --port <Port>', 'supply mysql server port',parseInt)
    .option('-h, --hostname <Hostname>', 'supply mysql hostname or ip')
    .option('-x,--proxyport <port>','supply listen port of this proxy',parseInt)
    .parse(process.argv);
var PORT = program.proxyport||6969;
net.createServer(function(sock) {
    console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort+':'+program.hostname);
    var client = new net.Socket();
    console.log("hostname is "+program.hostname);
    client.connect(program.port||3306, program.hostname, function() {
        console.log('Connected');
    });

    client.on('data', function(data) {
        //   console.log('Received: ' + data);
        sock.write(data);
    });

    client.on('close', function() {
        console.log('Connection closed');
        sock.end();
    });

    client.on('error',function(){
        console.log("error");
    });
    sock.client = client;

    sock.on('data', function(data) {
        sock.client.write(data);
    });
    sock.on('close', function(data) {
        sock.client.end();
    });
    sock.on('error',function(){
        console.log("error sock");
    });

}).listen(PORT, HOST);
console.log('Server listening on ' + HOST +':'+ PORT);

3.启动

nohup node proxy.js -host 192.168.0.10 -P 3306 -p 13306>/tmp/proxy.log 2>&1 &

4.测试

mysql -u usernameofmysql -p 13306 -h proxyserveraddress -d -P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值