Я запускаю сайт узла Express на своей машине OS X локально.Не удается подключиться к MySQL через SSH
Мне нужно ssh для удаленной базы данных mysql, поэтому я могу начать писать запросы против него.
Теперь я могу передать ssh на наш удаленный сервер (запустив базу данных mysql) в облаке, когда я это сделаю через терминал OS X Yosemite.
Но я не успел сделать это в коде с использованием промежуточного программного обеспечения node-mysql и туннеля-ssh.
Мой код работает, но на самом деле это не ошибка, за исключением моего GET при отладке моего экспресс-приложения в Webstorm.
Некоторые факты:
Я могу SSH в MySql из OS X с помощью этой команды:
SSH -L 3306: 127.0.0.1: 3306 ourCloudServerName.net MyUserNameHere
Я могу затем подключиться к MySQL с помощью следующей команды:
MySQL -h локальный -p -u myUserNameHere
Когда я нахожусь в командной строке mysql и нажимаю SHOW GLOBAL VARIABLES LIKE 'PORT', я понимаю, что сервер (или база данных, я думаю, это означает ... не уверен) работает на порту 3306
Я отладка с помощью WebStorm 10.0.3 Это означает, что я отладка моего приложения Node Express, который начинается так:
вара порт = 3000;
app.set ('порт', порт);
app.listen (app.get ('порт'), функция() { console.log ('веб-сервер Экспресс прослушивает порт' + app.get ('порт'));} )
- Я могу запустить мой экспресс-приложение с помощью локального хоста: 3000 в Chrome
Теперь вот моя первая попытка попробовать и использовать как узел-MySQL и тоннельного SSH
mysqlConfig.js
var databaseConfig = module.exports = function(){};
module.exports = {
mySQLConfig: {
host: '127.0.0.1',
username: 'root',
password: 'rootPassword',
database: 'SomeDatabaseName',
port: 3306,
timeout: 100000
},
sshTunnelConfig: {
username: 'myusername',
password: 'mypassword',
host: 'ourCloudServerName\.net',
port: 22,
//localPort: 3306, //4370
//port: 3333,
//localPort: 4370,
dstPort: 3306,
srcHost: 'localhost',
dstHost: 'localhost',
localHost: 'localhost'
}
};
connection.js
var mysql = require('mysql'),
config = require('./mysqlConfig'),
tunnel = require('tunnel-ssh');
var connection = module.exports = function(){};
createDBConnection = function(){
var mysqlConnection = mysql.createConnection({
host: config.mySQLConfig.host,
user: config.mySQLConfig.username,
password: config.mySQLConfig.password,
database: config.mySQLConfig.database,
connectTimeout: config.mySQLConfig.timeout
});
return mysqlConnection;
};
connection.invokeQuery = function(sqlQuery){
var data = undefined;
var sshTunnel = tunnel(config.sshTunnelConfig, function(error, result) {
var sqlConnection = createDBConnection();
sqlConnection.connect(function (err) {
console.log(err.code);
});
sqlConnection.on('error', function (err) {
console.log(err.code);
});
data = sqlConnection.query({
sql: sqlQuery,
timeout: config.mySQLConfig.timeout
}, function (err, rows) {
if (err && err.code) {
console.log("error code: " + err.code)
}
if (err) {
console.error("error stack: " + err.stack)
}
;
if (rows) {
console.log("We have Rows!!!!!!")
}
});
sqlConnection.destroy();
});
return data;
};
маршрутизатор/индекс.JS
var connection = require('../config/database/connection');
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
var sqlStatement = "Select top 10 from someTable";
var rows = connection.invokeQuery(sqlStatement);
});
module.exports = router;
Так что я стараюсь отладки в WebStorm и я либо никогда не получить хорошую ошибку, выводимой на консоль или если я делаю, это общая ошибка узла как. У меня могла бы возникнуть фундаментальная проблема с кодом и/или просто не устанавливать правильные значения или использовать право промежуточного программного обеспечения, я просто не знаю. Во время отладки это не говорит. Я просто знаю, что:
1) Я не получаю подключение к серверу через ssh. Соединения показывают 0 в объекте сервера SSH во время отладки
2) MySQL объект подключения показывает отсоединен, никогда не подключен
3) Я также получаю эту ошибку узла в WebStorm при выполнении экспресс-сайт, который не говорит мне домкрат:
Какая связь отказано, я бегу этот сайт через локальный порт 3000. является ли это высказывание не может подключиться к SSH? Я понятия не имею. Это не всегда появляется или происходит, это прерывистая ошибка и может быть просто отладочной вещью webstorm, где мне просто нужно снова отлаживать отладку и обычно уходить ... но может быть взаимосвязано, не имеет понятия.
А вот что мой объект конфигурации имеет, когда я проверить его во время отладки
И в туннельном SSH/index.js, строка 70, где она возвращает сервер, он пытается создать, я вижу, что нет никакой связи SSH:
UPDATE - на СУГ Gestions из ответов
Можете ли вы попробовать console.log (ошибка, результат) внутри обратного вызова туннеля SSH, чтобы узнать, что такое ошибка SSH? – Harangue
, где бы я положил это сразу после закрытия соединения DB (уничтожить линию)? – PositiveGuy
Прямо в начале вашего обратного вызова (после var sshTunnel ...). Если то, что говорит ваше сообщение, верно, соединение SSH никогда не устанавливается, поэтому нам нужно выяснить, что вызывает это. – Harangue