remote mysql database
に接続するためにssh2 package
トンネリングを使用するnode.js
を使用してrest api
を実装しています。ここで私はssh経由で接続するために使用していますが、あなたはそれが非常に効率的ではありません見ることができるように、しかしquery
Node.js ssh2トンネルを有効にしてmysqlクエリを実行
executeQuery : function(query, callback) {
var sshConnected = false;
var connection = require('ssh2').Client();
var server = require('net').createServer(function(sock) {
if (!sshConnected) return sock.end();
connection.forwardOut(
'127.0.0.1',
sock.remotePort,
'127.0.0.1',
3306,
function (err, stream) {
if (err) return sock.end();
stream.pipe(sock).pipe(stream);
});
});
connection.on('ready', function() {
console.log('Client :: ready');
sshConnected = true;
server.listen(3306);
var sqlconn = require('mysql').createConnection(config.dbOrg);
sqlconn.connect(function (conError) {
if (!conError) {
console.log(query);
sqlconn.query({sql: query.sql, values: query.values}, function (qError, results, fields) {
callback(qError, results, fields);
});
} else {
callback(response.dbError, null, null);
}
server.close();
});
}).connect(config.sshConfig);
を実行するコードです。
新しいクエリごとに、TCPサーバーを起動し、クエリ後に接続を再確立します。それぞれのクエリはおおよそ3-4s
になりますが、これは本当に悪いです。 ssh connection
とthe tcp server
の両方が生き残っているどんなアプローチでも、到着時にqueries
を実行すると大きな助けになります。ありがとう!