Перенос файлов сайта и базы данных между серверами

Перенос сайта не вызывает больших проблем, для небольших можно даже через файловый менеджер скопировать файлы со старого и загрузить на новый, а затем через phpmyadmin слить дамп и также залить.
Но гораздо приятнее указать несколько переменных в скрипте и выполнить синхронизацию.

Выполняется копирование файлов с помощью rsync
Смена владельца файлов (если копирование запущено от рута, а права файлов должны быть такие, чтобы апач (или другой сервер) мог получить к ним доступ)
Дамп mysql
Копирование дампа по протоколу scp
Заливка дампа в новую базу

Требуется
— Доступ к серверам по протоколу ssh
— Желательно настроенная ключевая авторизация с нового сервера (локального) на старый (удаленный), иначе два раза будет запрашиваться ssh пароль.
— Созданная база данных на локальном сервере. Желательно настройки доступа сделать идентичными (чтобы не править конфиги сайта)
— Параметры доступа к базам данных.


#!/bin/sh

##path
# remote server
RMSERVER=root@site.ru
# path to site on remote server
RMPATH=/home/site/blogs.site.ru
# path to site on local server
LPATH=/var/www/html/blogs
# path to temp sql dump on remote server
RMTMPSQLFILE=/home/site/blogs.site.ru/site.sql
# path to temp sql dump on local server
LTMPSQLFILE=/var/www/html/blogs/site.sql
#remote mysql
RMSQLSRV=localhost
RMSQLUSER=blogs
RMSQLDB=blogs
RMSQLPASS=gJk_dsf12d87SKJf
#local mysql
LSQLSRV=localhost
LSQLUSER=blogs
LSQLDB=blogs
LSQLPASS=gJk_dsf12d87SKJf
#local apache user
LAPACHEUSER="www:www"

echo 'rsync'
rsync -cxzrl $RMSERVER:$RMPATH $LPATH
echo 'chown'
chown -R $LAPACHEUSER $LPATH
echo 'dump db'
ssh -q -t $RMSERVER "mysqldump --single-transaction -u $RMSQLUSER -h $RMSQLSRV -p$RMSQLPASS $RMSQLDB > $RMTMPSQLFILE"
echo 'copy db'
scp $RMSERVER:$RMTMPSQLFILE $LTMPSQLFILE
echo 'mysql upload'
mysql -u $LSQLUSER -h $LSQLSRV -p$LSQLPASS $LSQLDB < $LTMPSQLFILE echo 'end'

Если меняется также и домен, то поменять и абсолютные ссылки в базе данных. Например для wp: Сменить в БД домен сайта на WordPress