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

264

被折叠的 条评论
为什么被折叠?



