@frie666

Как перекидывать данные с одного сервера на другой?

Есть рабочий сервер на котором делаются сложные вычисления

Есть сайт на хостинге, который использует эти данные.

Необходимо раз в сутки перекидывать данные из 1 таблицы с локального сервера на сайт.

Как такое лучше реализовать?

Использую php и mysql
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 5
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
scp в помощь: https://unix.stackexchange.com/a/188289/356208

Как делать импорт/экспорт из базы я думаю вы знаете.

Вообще зависит от размера данных. Если их там немного можно какой-нибудь скрипт сделать который будет на апишку удаленного сервера отправлять это в любом удобном виде.
Ответ написан
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Как такое лучше реализовать?
Как вариант, можно попробовать настроить репликацию. Насколько я помню, в MySQL можно реплицировать в т.ч. и отдельные таблицы. Единственный момент - реплицироваться они будут немедленно, а не раз в сутки...

Если же говорить про "раз в сутки"... На вскидку, я бы наверное сделал как-то примерно так:
0. Настраиваем синхронизацию папки в которой будет лежать дамп таблицы, через rsync
1. По cron'у запускаем задачу дампа таблицы (через mysqldump)
2. Полученный дамп уходит на удалённый сервер, rsync'ом
3. После обновления файла на сервере-получателе - по триггеру (после обновления файла) - загружаем дамп в нужную нам БД. Триггер можно попробовать прикрутить либо на уровне самого rsync либо попытаться сделать через inotify. Подробнее не скажу, не проверял лично, но в теории должно работать.

Альтернативный для п.3 вариант, как же писал выше предыдущий оратор - можете на сервере просто принимать файл (я думаю лучшим вариантом будет упакованный в gzip/bzip дамп нужной таблицы) обычным способом, распаковывать и заливать его в БД. Отправлять файлы с сервера-источника можно curl'ом, как вариант.
Ответ написан
@oxidmod
А нельзя результат сохранить просто в БД и расшарить к ней доступ с обоих серверов?
Ответ написан
@DmitryUlitin
На локальном сервере создай скрипт отправки, пусть от берет готовый результат из базы, оборачивает его в JSON и желательно в base64. И с помощью file_get_contents передает POST запрос к скрипту-приемщику на сайте. тот делает decode сроки и помещает результат в базу.

т.е. вытащили из базы, добавили в объект:
$data = base64_encode( json_encode(объект с данными) );
$hash = hash_hmac("sha256", $data, "blablabla");

$post_params = array('data' => $data, 'hash' => $hash);
$post_vars = http_build_query($post_params);
$post_options = array('http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $post_vars)
);
$post_context = stream_context_create($post_options);
$result = file_get_contents('https://yoursite.ru/reception.php', false, $post_context);

На сайте приняли,
if( !isset($_POST["data"]) || !isset($_POST["hash"])) exit();
$data = $_POST["data"];
$hash = $_POST["hash"];
$real_hash = hash_hmac("sha256", $data, "blablabla");
if($real_hash != $hash) exit();
$data = json_decode( base64_decode($data) );
добавляем в базу сайта
Ответ написан
@frie666 Автор вопроса
Спасибо всем за ответы!!
Решил использовать дамп на локалке + scp для загрузки на серв.
Пока попробую так, если что то не получится, буду пробовать другие предложенные варианты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы