Скрипт для бэкапа данных по SSH из одной базы в другую
Размещено 2010-09-24
в разделе Программирование | Метки:
PostgreSQL
Решил делать новый проект с использованием PostgreSQL, разрабатываю проект на локальной машине, сам код лежит на серваке на балконе, на нем же лежит и тестовая локальная база, еще есть боевой сервер с базой. Понадобилось синхронизировать данные, которые я добавил в таблицы на боевой базе, а также новые таблицы. Каждый раз копировать это с помощью phpPgAdmin то еще извращение, поэтому написал небольшой скрипт, который
- коннектится по ssh на удаленный сервак, авторизуясь по ключу
- запускает там pg_dump и сохраняет все содержимое в файл на локальном компе, где запущен скрипт
- импортирует из сохраненного скрипта все данные в локальную базу
<?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);
}
?>