Скрипт для бэкапа данных по SSH из одной базы в другую

в разделе Программирование | Метки: PostgreSQL

Решил делать новый проект с использованием PostgreSQL, разрабатываю проект на локальной машине, сам код лежит на серваке на балконе, на нем же лежит и тестовая локальная база, еще есть боевой сервер с базой. Понадобилось синхронизировать данные, которые я добавил в таблицы на боевой базе, а также новые таблицы. Каждый раз копировать это с помощью phpPgAdmin то еще извращение, поэтому написал небольшой скрипт, который

  1. коннектится по ssh на удаленный сервак, авторизуясь по ключу
  2. запускает там pg_dump и сохраняет все содержимое в файл на локальном компе, где запущен скрипт
  3. импортирует из сохраненного скрипта все данные в локальную базу


<?php

define
('LOCALDB_USER''login_sgv');
define('LOCALDB_PASS''SecRETPassw0rd');
define('LOCALDB_NAME''login_sgv');
define('LOCALDB_HOST''srv01.lan');
define('REMOTEDB_USER''login_sgv');
define('REMOTEDB_PASS''SecRETPassw0rd');
define('REMOTEDB_NAME''login_sgv');
define('REMOTEDB_HOST''localhost');
define('REMOTE_SSH_HOST''login.webfactional.com');
define('REMOTE_SSH_USER''login');
define('REMOTE_DUMP_CMD''pg_dump --username=' REMOTEDB_USER);
define('SSH_CMD''ssh -o PreferredAuthentications=publickey ' REMOTE_SSH_USER '@' REMOTE_SSH_HOST);

$validArgsStr 'Valid arguments are: ' basename(__FILE__) . " [direction]";
if (!
$argv[1]) {
    die(
"\nArgument direction was not specified. {$validArgsStr}\n");
}
$direction $argv[1];
$validDirection = array('fromlocal''tolocal');
if (!
in_array($direction$validDirection)) {
    die(
"\nDirection is not valid. Valid directions are: " implode(', '$validDirection) . "\n");
}


if (
$direction == 'tolocal') {
    
// Так как нельзя указать пароль в самой командной строке я его вывожу тут чтобы скопировать и вставить
    
print "\nRemote db password: " REMOTEDB_PASS "; Local: " LOCALDB_PASS "\n";
    
    
$cmd SSH_CMD " 'pg_dump -h " REMOTEDB_HOST " --username=" REMOTEDB_USER "' > " LOCALDB_NAME '-dump.sql';
    
exec($cmd);
    
$cmd "psql -h " LOCALDB_HOST ' -U ' LOCALDB_USER ' < ' LOCALDB_NAME '-dump.sql';
    
exec($cmd);
}
?>