<rmcreative>

RSS

Бэкап на NAS Synology через rsync

4 ноября 2012

Понадобилось организовать регулярный бэкап в локальной сети через rsync. Так как уже имеется NAS Synology DS212+, буду использовать его.

Источников данных несколько. Пусть это будут сайты. Для каждого необходимо взять файлы и дамп базы.

Настройка NAS

  • Control panel -> File Services -> rsync -> Enable rsync service.
  • Создаём нового пользователя Control panel -> Users -> Create.
  • Имя обязательно должно быть rsync, группа users, права на чтение/запись шары NetBackup и разрешение использовать rsync.
  • Control panel -> File Services -> rsync -> Enable rsync account.

Особенности

  1. Synology создаёт одну шару NetBackup как модуль rsync. Других по умолчанию нет.
  2. По умолчанию можно использовать либо пользователя admin, что не очень безопасно, либо создать пользователя rsync. Именно с таким именем.
  3. Указывать наш NAS rsync-у будем в виде [email protected]::NetBackup/.
  4. У пользователя rsync должны быть права на NetBackup.

Linux

Напишем скриптик и поставим на крон.

#!/bin/bash
export RSYNC_PASSWORD=your_rsync_user_password
 
backupServer=rsync@nas.ip::NetBackup/
currentDate=`date +%F`
currentMonth=`date +%Y-%m`
rsyncTmp=/tmp/rsync/
rsyncMkdir=${rsyncTmp}mkdir/
rsyncDB=${rsyncTmp}db/
 
# логин-пароль рута mysql
dbusername=root
dbpassword=mysql_root_password
 
# rsync не умеет создавать директории. Немного извернёмся.
#
# rsync_mkdir relative/path destinationPath
rsync_mkdir ()
{
  mkdir -p ${rsyncMkdir}$1
  rsync -v --archive --compress --progress ${rsyncMkdir} $2
  rm -R ${rsyncMkdir}
}
 
# Делаем дамп БД, сжимаем, отсылаем на NAS.
#
# rsync_db dbname destinationPath
rsync_db ()
{
  mkdir -p ${rsyncDB}
  mysqldump -u $dbusername --password=$dbpassword $1 | gzip -9 > ${rsyncDB}${1}_${currentDate}.sql.gz;
  rsync -v --archive --compress --progress --partial ${rsyncDB} $2
  rm -R ${rsyncDB}
}
 
# Отсылаем всю директорию на NAS.
#
# --delete-after --force после завершения копирования удаляет на NAS всё, чего
# больше нет в исходнике.
# --partial позволяет докачивать прерванные загрузки. Полезно, если соединение не очень.
# --compress жать перед отправкой, разжимать на NAS.
# --archive сохраняем атрибуты файлов.
# -v --progress показываем прогресс загрузки и другие сообщения.
#
# rsync_dir sourcePath destinationPath
rsync_dir ()
{
  rsync -v --archive --compress --progress --delete-after --force --partial $1 $2
}
 
### example.com ###
 
backupdir=example.com/
backupdirMonth=${backupdir}${currentMonth}/
 
rsync_mkdir ${backupdirMonth} ${backupServer}
rsync_db example_com1 ${backupServer}/${backupdir}
rsync_db example_com2 ${backupServer}/${backupdir}
rsync_dir /var/www/example.com/ ${backupServer}/${backupdirMonth}

Windows

Под Windows я попробовал DeltaCopy. Бесплатная, работает. Настраивается вот так.

Комментарии RSS

  1. №6988
    Николай
    Николай 06 нояб. 2012 г., 6:17:34

    Deltacopy уже больше года используется на серверах, работает в вариантах Windows->FreeBSD и Windows->Windows.

    Есть только одно большое НО: комплект программ из поставки не поддерживает длинные имена файлов и кириллицу. Пришлось на просторах интернета найти замену некоторым EXE и DLL файлам.

  2. №8413
    ppa
    ppa 26 сент. 2013 г., 8:59:28

    rsync_dir - это опечатка? такой функции в скрипте нет

  3. №8415
    Sam
    Sam 27 сент. 2013 г., 13:07:58

    ppa, исправил. CTRL+F5.

  4. №12277
    Alex
    Alex 30 янв. 2023 г., 17:43:05

    Вот спасибо, бро! Полдня провёл в думах почему permision denied если ssh работает...

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.