[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подключение к БД через SSH тунель
MailRes
Всем привет!

Возникла задача выполнять ресурсоемкие скрипты и результат записывать в БД на сайте. НО т.к. на хостинге оперативка ограничена, и перезжать на более дорогой тариф не хочется - решил поставить себе на комп wamp server, проверил скрипты - работают исправно (не жалуются что оперативки не хватило). Решил результат записать в БД, но получил облом - не смог подключиться. Хостеры сказали, что внешний доступ к БД запрещен, но можно подключиться с помощью SSH тунеля. Покопал в гугле и сделал тунель с БД с помощью библиотеки php_ssh2.dll, которую поставил себе на комп.
я так понял что после установки тунеля работать можно с базой с помощью функции ssh2_exec и отправлять команды, которые понимает ssh , а хотелось бы работать с базой обычными php командами - это возможно?

Т.к. в ssh я полный чайник, боюсь что-то делать, вдруг базу косячну(

"извращался" ли кто так ранее?



Спустя 26 минут, 15 секунд (22.04.2012 - 18:13) I++ написал(а):
Я хз как вы все ищете...

http://stackoverflow.com/questions/464317/...over-ssh-in-php

Спустя 22 минуты, 26 секунд (22.04.2012 - 18:35) MailRes написал(а):
хз почему не нашел(((
но там с ошибкой написано, буду копать дальше

mysqli_connect() expects parameter 6 to be string

Спустя 8 минут, 16 секунд (22.04.2012 - 18:44) ruzarh написал(а):
Так ты получается сам будешь парсить и сам заливать, я правильно понял? т.е. не в автоматическим режима а ручками? Если да то попробуй mysqlYog. Он подключается по ssh и можешь что угодно там творить.

Спустя 3 минуты, 46 секунд (22.04.2012 - 18:47) MailRes написал(а):
Да, сам по схеме: закачал файл по FTP, запустил скрипт, который файл парсит и сразу льёт его в БД.

А mysqlYog спасёт? Т.к. хочу автоматизировать процесс по максимуму. Как вариант (простой) можно на локальной машине завести БД, в неё парсить xls файлы, потом экспортировать таблицы, подключаться к своей основной базе и туда импортировать - но не хочу так. Замучаюсь каждый день так делать

Спустя 58 минут, 44 секунды (22.04.2012 - 19:46) MailRes написал(а):

if(!($con = ssh2_connect("my_ssh_host", 22))){
echo "fail: unable to establish connection\n";
} else {
if(!ssh2_auth_password($con, "ssh_user", "ssh_password")) {
echo "fail: unable to authenticate\n";
} else {
echo "okay: logged in...\n";
}
}

if(!ssh2_tunnel($con, 'mysql_host', 3306 ))
{echo "<br/>fail tunnel";} else {echo "<br/> success tunnel<br/>";}
$tunnel=ssh2_tunnel($con, 'mysql_host', 3306 );
mysql_connect('127.0.0.1',$username,$password) or die ("СОЕДИНЕНИЕ НЕ УСТАНОВЛЕНО");

Приведённый выше код не соединяется с базой, в чем может быть проблема?
В результате выполнения кода на экран выводится следующее:
okay: logged in...
success tunnel
СОЕДИНЕНИЕ НЕ УСТАНОВЛЕНО


1) Если в качестве хоста использую 127.0.0.1 то получаю ошибку: "Доступ запрещен для user@localhost
2) Если в качестве хоста использую "mysql_host", то получаю ошибку: "удалённый компьютер не ответил"

Спустя 10 минут, 1 секунда (22.04.2012 - 19:56) Игорь_Vasinsky написал(а):
на хостинге должен быть открыт к серверу БД "из вне"

проверяйте имя, логин, пароль.

Спустя 5 минут, 1 секунда (22.04.2012 - 20:01) MailRes написал(а):
1) на хостинге закрыть доступ к базе "из вне", но к базе можно подключиться через SSH туннель (это мне сказала техподдержка и на сайте хостинга написано)
2) правильные логин и пароль
3) раз прямой доступ закрыт - я начал копать на тему "как на php с помощью ssh туннеля подключиться к mysql"... если я всё правильно понял, то (скрипт, который я сюда запостил) я с помощью php подключаюсь к ssh, делаю туннель к базе, а к базе залогиниться не могу - не понимаю почему user posted image

p.s. через putty то можно попасть в базу, а через php не получается

Спустя 38 минут, 16 секунд (22.04.2012 - 20:39) I++ написал(а):
Зачем SSH хостер позволяет подключаться к базе из вне с помощью ssl?

Спустя 48 секунд (22.04.2012 - 20:40) ruzarh написал(а):
mysql_connect('localhost',$username,$password) or die ("СОЕДИНЕНИЕ НЕ УСТАНОВЛЕНО");


может надо установить localhost да и подключаешься ты не к той базе а к своей на той где скрипт выполняется. Тебе надо команду передать для подключения на ssh

Спустя 4 минуты, 29 секунд (22.04.2012 - 20:45) ruzarh написал(а):

$conect = ssh2_exec($con, ' mysql -u и так далее');

Спустя 4 минуты, 59 секунд (22.04.2012 - 20:50) MailRes написал(а):
Цитата (I++ @ 22.04.2012 - 18:39)
Зачем SSH хостер позволяет подключаться к базе из вне с помощью ssl?

с SSH и SSL я очень плохо знаком, так что не могу ничего сказать, кроме того, что хостинг Мастерхост

Спустя 2 минуты, 54 секунды (22.04.2012 - 20:53) MailRes написал(а):
дописал так:
$consshsql = ssh2_exec($con, 'mysql -u sql_user -p -h sql_host sql_DB_name');

как теперь прикрутить это к php чтоб с базой работать на привычных php функциях?
p.s. понятия не имею, что означают "-p -h" в запросе)) взял это из примера на сайте хостеров

Спустя 14 минут, 40 секунд (22.04.2012 - 21:07) ruzarh написал(а):
$conect = ssh2_exec($con, ' mysql -u NAMEUSER -p PASSWORD USE MyDataBase; INSERT INTO ..... ;  ');
Как то так наверное

Спустя 4 минуты, 29 секунд (22.04.2012 - 21:12) MailRes написал(а):
В эту сторону я накапал уже инфы, и как понял, если я напишу:
$conect = ssh2_exec($con, ' mysql -u NAMEUSER -p PASSWORD USE MyDataBase; SELECT * FROM ..... ;  ');

то запрос к базе то может и сделается, а как тогда вывести результат на экран в браузер?

Спустя 14 минут, 11 секунд (22.04.2012 - 21:26) I++ написал(а):
Попроси GovnoHost прикрепить к внешнему IP доступ.

P.S

Они до сих пор заставляют юзать php файлик для смены прав доступа?
Интересно они баг исправили с переполнением tmp из-за нерабочих квот при смене тех же прав.
А так же доступ к файлу со всеми юзерами, я так раньше самый свежий хост выбирал, где поменьше народу.

Кстати у них апач запускается от общих прав, но юзера ограничены. Лучше бы сделали форк от того юзера чей хост, как у нормальных хостеров.

Спустя 21 минута, 59 секунд (22.04.2012 - 21:48) MailRes написал(а):
к внешнему IP нельзя сказали, просил уже. даже за доп. плату отказали, а вот весь день мозг кипячу на эту тему. Уже бы давно скрипт написал, так нет же - продолжаю поиски на тему тунелирования. Т.к. думаю - полюбому должно быть решение.
Цитата
Они до сих пор заставляют юзать php файлик для смены прав доступа?

Не знаю, а что за права доступа? т.е. на что?

p.s. оффтоп - может подскажете хороший хостинг? т.к. есть там и с Гигом оперативки VPS, но без поддержки, и так чё случись буду голову ломать - как всё реанимировать??? а так пусть техподдержка парится.
вот и приходится велосипед изобретать (

Спустя 22 минуты, 54 секунды (22.04.2012 - 22:11) MailRes написал(а):
if($consshsql = ssh2_exec($ssh_conn, 'ssh -L 3306:mysql_host:3306 mysql_user@localhost'))
{echo ('ssh2_exec - SUCCESS!');} else {echo ('ssh2_exec - DENIED');}

Написал такой код, в надежде перенаправить по ssh соединение с базой данных на локальный хост, чтобы обычные функции пхп юзать, но безуспешно. На экране вижу "ssh2_exec - SUCCESS!", скорее всего означает, что команда отправилась, а вот выполнилась ли она правильно хз.

Спустя 37 минут, 29 секунд (22.04.2012 - 22:48) killer8080 написал(а):
Цитата (MailRes @ 22.04.2012 - 23:11)
Написал такой код, в надежде перенаправить по ssh соединение с базой данных на локальный хост

Ничего перенаправить ты не сможешь, стандарнтые расширения для работы с мускулом не станут работать через ssh туннель. Все что ты можешь таким образом сделать - это установить соединение и выполнять консольные команды на сервере. Работать таким образом с mysql это полный изврат. Если тебе нужно просто залить данные в базу, сливай данные в дамп
SELECT ... INTO OUTFILE 'file_name'

заливай дапм по фтп на сервер, и заливай в базу
LOAD DATA INFILE 'file_name' INTO TABLE ...

Надеюсь привилегии FILE этот чудо хостер клиентов не лишает user posted image

Спустя 20 минут, 8 секунд (22.04.2012 - 23:08) MailRes написал(а):
Эх... у них как раз на сайте написано, как сделать дамп базы и залить её обратно... Вот уже (расстроен) сижу читаю на тему - "Где лучше хоститься?"

Спустя 9 минут, 10 секунд (22.04.2012 - 23:18) killer8080 написал(а):
Цитата (MailRes @ 23.04.2012 - 00:08)
Эх... у них как раз на сайте написано, как сделать дамп базы и залить её обратно...

Так я ж тебе показал как примерно, читай про синтаксис SELECT ... INTO OUTFILE и LOAD DATA INFILE

Спустя 14 часов, 34 минуты, 33 секунды (23.04.2012 - 13:52) MailRes написал(а):
Цитата (ruzarh @ 22.04.2012 - 19:15)

А где же мой плюсик ?)))

Поставил))

Цитата
Так я ж тебе показал как примерно, читай про синтаксис SELECT ... INTO OUTFILE и LOAD DATA INFILE


Ага про это ковырял, но проблема в том, что не смогу угадать в какое время БД будет не активна, т.к. с ней постоянно работают - добавляют/правят.
Её же целиком придётся заливать?

Спустя 38 минут, 12 секунд (23.04.2012 - 14:30) killer8080 написал(а):
Цитата (MailRes @ 23.04.2012 - 14:52)
Ага про это ковырял, но проблема в том, что не смогу угадать в какое время БД будет не активна, т.к. с ней постоянно работают - добавляют/правят.
Её же целиком придётся заливать?

там есть опции CONCURRENT и LOW_PRIORITY, если нужно чтоб не тормозило работу.

Спустя 2 минуты, 56 секунд (23.04.2012 - 14:33) MailRes написал(а):
Т.е. я могу вытащить таблицу с сервера, закачать её к себе на локальную машину, обработать так как мне нужно и закачать её снова на сервер?
И все эти операции я смогу сделать с помощью php?

Спустя 13 минут, 45 секунд (23.04.2012 - 14:47) killer8080 написал(а):
Цитата (MailRes @ 23.04.2012 - 15:33)
И все эти операции я смогу сделать с помощью php?

При наличии привилегии FILE у юзера бд на сервере.

Спустя 1 час, 2 минуты, 15 секунд (23.04.2012 - 15:49) MailRes написал(а):
Спасибо! Буду дальше копать (предстоят бессонные ночи\))))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.