Синхронизация баз данных и файлов на Drupal

Для переноса контента с удаленного компьютера на локальный (или наоборот) очень помогут команды drush sql-sync и drush rsync, соответственно.

Перед тем как перейти к непосредственной настройке этих команд, настроим доступ с локальном компьютера на удаленный через SSH без ввода пароля - с помощью пары ключей: 
Настройка SSH аутентификации с помощью публичного ключа

Теперь можно переходить к непосредственной настройки drush. 

1) Создаём директорию ~/.drush:
mkdir ~/.drush

2) В данной директории создаём файл настроек синонимов, в котором мы укажем синонимы и настройки для простого обращения к удаленному и локальному компьютерам:
touch ~/.drush/aliases.drushrc.php

3) Теперь прописываем в файле что-то подобное:

<?php

$local_sites = '/home/stingmu/localserver/'; // путь к локальной директории с сайтом

$aliases['sitename.local'] = array(
  'root' => $local_sites . 'sitename.loc',
  'path-aliases' => array(
    '%dump-dir' => $local_sites . 'drush.dbdumps',
    '%files' => $local_sites . 'sitename.loc/sites/default/files'
  )
);

$remote_sites = '/var/www/username/data/www/';

$aliases['sitename.remote'] = array (
  'root' => $remote_sites . 'sitename.ru',
  'remote-host' => '46.254.21.41',
  'remote-user' => 'islamrostov',
  'ssh-options' => "-p 22",
  'path-aliases' => array(
    '%dump-dir' => $remote_sites . 'drush.dbdumps',
    '%files' => $remote_sites . 'sitename.ru/sites/default/files'
  )
);

4) Теперь всё готово к загрузке БД или файлов с удаленного сервера на локальный (или наоборот). Специальное свойство --no-cache необходимо если БД загружается чаще чем раз в сутки, иначе будет браться старый дамп вместо свежей БД.
drush -y sql-sync --no-cache @sitename.remote @sitename.local
drush -y rsync @sitename.remote:%files
@sitename.local:%files --omit-dir-times --no-p

5) Для ускорения процесса синхронизации БД следует исключить таблицы с кешем. А также, чтобы не происходило "разлогинивания" на локальном сайте следует исключить таблицу сессий. Для этого создадим файл ~/.drush/drushrc.php со следующим содержимым:

<?php

// Tables to exclude from sql-sync
$options['skip-tables']['common'] = array('cache', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions', 'watchdog');
$custom_cache = array ('cache_admin_menu','cache_block','cache_bootstrap','cache_features','cache_field','cache_form','cache_image','cache_l10n_update','cache_libraries','cache_path','cache_token','cache_update','cache_views','cache_views_data');
$options['skip-tables']['common'] = array_merge($options['skip-tables']['common'], $custom_cache);
$command_specific['sql-sync'] = array('skip-tables-key' => 'common');

6) Для упрощения выполнения обеих этих команд - можно придумать для них короткие синонимы, которые будет просто запомнить (sitename-sync, sitename-rsync). Для этого добавим в файл ~/.drush/drushrc.php следующие строки:

$options['shell-aliases']['sitename-sync'] = '-y sql-sync --no-cache @remote @local';
$options['shell-aliases']['sitename-rsync'] = '-y rsync @remote:%files/ @local:%files --omit-dir-times --no-p';