Backup
Бэкап, бекап — резервное копирование сайтов.
Для хранения бэкапов на NAS используем папку:
\\NAS\backup /volume1/backup
Доступ к ней по FTP (порт стандартный 21):
- ftp://nas.zina.com.ua:21/backup
- Логин: backup
- Пароль см. здесь: https://info.zina.com.ua/adm/nas#backup
Структура папок:
- dev
- dev2
- hp
- Jira — пока пустая
- prod — сюда автоматически бэкапятся сайты с прода
- Routers — конфиги роутеров, на случай неудачного обновления или изменений настроек
- Mikrotik
- tserver
- 1C
- AllSubmitter
- Users — пока пустая
- WindowsServer2019 — образы диска с Windows Server, пока не настроено
- WTware — конфиги
- Zina-DVD — временная папка, куда собираются файлы для архивирования на DVD
- Design — все дизайнерские папки, без кода
- Webserver — дев-версии и ручные бэкапы сайтов: код, базы данных, info.txt
Используем штатную программу коммандной строки robocopy.
- robocopy | Microsoft Docs
- Используем утилиту Robocopy. Примеры.
- Robocopy и примеры использования с параметрами | Настройка серверов windows и linux
- Утилита robocopy и примеры использования
Параметры robocopy, которые мы используем
/S— копировать рекурсивно, за исключением пустых директорий и файлов (альтернатива/E— копировать с пустыми директориями и файлами)/DCOPY:T— копировать метки времени директорий/COPY:DAT— копировать атрибуты файлов (DAT — параметры по умолчанию):DDataAAttributesTTime stamps
/Z— restartable mode — возможность продолжить копирование в случае обрыва/M— копировать только файлы с атрибутом "Архивный" и потом его сбросить на конечной стороне. Благодаря этому при следующем копировании будут скопированы только измененные файлы./MIN:1— копировать только файлы ненулевого размера/MT:64— Creates multi-threaded copies with N threads. N must be an integer between 1 and 128. The default value for N is 8./R:2— Количество повторных попыток копирования файла в случае, если копирование не удалось. Причем «не удалось» срабатывает и в том случае, если доступ к файлу закрыт. По-умолчанию равно одному миллиону, т.е. бесконечно, поэтому копирование благополучно зависнет на первом же файле, к которому не будет доступа./W:5— Задержка в секундах между попытками копирования. По умолчанию равно 30 секундам./MOVE— Moves files and directories, and deletes them from the source after they are copied./MIR— зеркалирование: эквивалентно/E(копировать с вложенными директориями, в т.ч. пустыми) плюс/PURGE(удалять на конечно стороне файлы и директории, которых уже нет в источнике).
C:\Tools\Backup\Backup-1C-DB.bat
set yyyy=%date:~6,4%
set mm=%date:~3,2%
set dd=%date:~0,2%
set h=%time:~0,2%
set m=%time:~3,2%
set source="C:\1Cv82-Base-Zina"
set destination="\\nas\backup\tserver\1C\%yyyy%-%mm%-%dd%_%h%-%m%"
set log="\\nas\backup\tserver\1C\robocopy.log"
robocopy %source% %destination% /S /DCOPY:T /Z /MIN:1 /MT:64 /R:2 /W:5 /LOG:%log%
Отличие от бэкапа AllSubmitter:
- параметр
/MIN:1, благодаря которому копируются только файлы больше 0 байт; - отсутствие параметра
/M, благодаря чему всегда копируются все файлы, а не только измененные.
C:\Tools\Backup\Backup-1C-full-daily.bat
set source="C:\1Cv82-Base-Zina"
set destination="\\nas\backup\tserver\1C\full-daily\1Cv82-Base-Zina"
set log="\\nas\backup\tserver\1C\full-daily\robocopy.log"
robocopy %source% %destination% /MIR /DCOPY:T /Z /MT:64 /R:2 /W:5 /LOG:%log%
C:\Tools\Backup\Backup-AllSubmitter.bat
set yyyy=%date:~6,4%
set mm=%date:~3,2%
set dd=%date:~0,2%
set h=%time:~0,2%
set m=%time:~3,2%
set source="C:\AllSubmitter"
set destination="\\nas\backup\tserver\AllSubmitter\%yyyy%-%mm%-%dd%_%h%-%m%"
set log="\\nas\backup\tserver\AllSubmitter\robocopy.log"
robocopy %source% %destination% /S /DCOPY:T /Z /M /R:2 /W:5 /MT:64 /LOG:%log%
robocopy %destination% %destination% /S /MOVE
Отличия от бэкапа 1С:
- параметр
/M, благодаря которому копируются только измененные файлы; - второй вызов
robocopy, который удаляет директорию бекапа, если она оказалась пустой.
C:\Tools\Backup\Backup-AllSubmitter-hourly.bat
set source="C:\AllSubmitter"
set destination="\\nas\backup\tserver\AllSubmitter\full-hourly\DB\AllSubmitter"
set log="\\nas\backup\tserver\AllSubmitter\full-hourly\DB\robocopy.log"
robocopy %source% %destination% /MIR /DCOPY:T /Z /MT:64 /R:2 /W:5 /LOG:%log%
set source="C:\ProgramData\WebLogAnalyzer\AllSubmitter"
set destination="\\nas\backup\tserver\AllSubmitter\full-hourly\Settings\ProgramData\WebLogAnalyzer\AllSubmitter"
set log="\\nas\backup\tserver\AllSubmitter\full-hourly\Settings\robocopy.log"
robocopy %source% %destination% /MIR /DCOPY:T /Z /MT:64 /R:2 /W:5 /LOG:%log%
Сначала необходимо открыть терминал и перейти в каталог, в который будет сохранен бэкап.
cd ПУТЬ_К_КАТАЛОГУ
Путь к каталогу можно скопировать из строки адреса Nautilus или Krusader. Путь должен быть локальным, т.е. без ftp:// и smb://.
Архивировать лучше не файлы внутри папки, а целиком папку. Потому что при архивировании списка файлов даже через шаблон * в архив не попадают файлы, начинающиеся с точки, типа .htaccess. А если архивировать папку, то все вложенные в нее файлы будут сохранены.
Сделать бэкап папки html в формате tar.gz (наиболее естественный для Linux вариант) и автоматически добавить к имени архива текущую дату:
tar -cvzf `date +%Y-%m-%d_%H-%M`_backup.tar.gz html
То же в формате zip:
zip -r `date +%Y-%m-%d_%H-%M`_backup.zip html
Если нужно исключить из архивирования сляшком тяжелую папку — например, sites/default/files/:
tar -czf `date +%Y-%m-%d_%H-%M`_backup.tar.gz html --exclude='sites/default/files/*'
Бэкап базы данных со сжатием и именованием файла по текущей дате:
mysqldump -u USER -p DATABASE | gzip > `date +%Y-%m-%d_%H-%M`.sql.gz
Пароль можно не указывать, тогда он будет запрошен, или можно вставить сразу после параметра -p, без пробела.
С быстрым заполнением параметров (один раз указать имя базы, если имя юзера совпадает с базой), добавлением к имени бэкапа названия базы данных и отображением имени и размера файла в конце:
db='DATABASE'; user=$db; backup=$db'_'`date +%Y-%m-%d_%H-%M`'.sql.gz'; mysqldump -u $user -p $db | gzip > $backup; du -h $backup; unset db user backup
С отображением прогресса (используется дополнительная программа pv):
db='DATABASE'; user=$db; backup=$db'-'`date +%Y-%m-%d_%H-%M`'.sql.gz'; mysqldump -u $user -p $db | gzip | pv > $backup; unset db user backup
mysql -u USER -p DATABASE < FILE.sql
Импорт базы данных их архива .gz и с отображением прогресса:
pv FILE.sql.gz | gunzip | mysql -u USER -p DATABASE
Команда, которая соединяется с хостингом по SSH из-под root (нужно будет ввести пароль root) и бэкапит базу с именем ИМЯ_БАЗЫ_ДАННЫХ. Это имя можно узнать из списка "Инструмены > Базы данных" в IspManager или из списка "Databases" в phpMyAdmin http://77.120.105.84/.
db_name='ИМЯ_БАЗЫ_ДАННЫХ'; ssh root@zina.com.ua "mysqldump $db_name --compact | gzip" > $db_name.sql.gz; du -h $db_name.sql.gz; unset db_name
- DB_LOCAL_DBNAME - имя локальной базы данных
- DB_LOCAL_USER - пользователь базы данных на локальном компьютере
- DB_LOCAL_PASS - пароль пользователя на локальном компьютере
- DB_REMOTE_DBNAME - имя удаленной базы данных
- DB_REMOTE_USER - пользователь базы данных на удаленном компьютере
- DB_REMOTE_PASS - пароль пользователя на удаленном компьютере
ssh root@zina.com.ua "mysqldump -h localhost -u DB_LOCAL_USER -pDB_LOCAL_PASS DB_LOCAL_DBNAME | mysql -h 192.168.0.100 -u DB_REMOTE_USER -pDB_REMOTE_PASS DB_REMOTE_DBNAME"
Пример:
ssh root@zina.com.ua "mysqldump -h localhost -u kozakam_kozakam -pht1cNOWj kozakam_kozakam | mysql -h 192.168.0.100 -u kozakam_kozakam -pht1cNOWj kozakam_kozakam"
- ИМЯ_ПОЛЬЗОВАТЕЛЯ - unix-пользователь (владелец домена). Можно посмотреть в IspManager'e, на странице "Учетные записи" > "Пользователи".
- ИМЯ_ДОМЕНА - домен (без www.) из списка доменов пользователя (Страница "WWW домены" IspManager).
user_name='ИМЯ_ПОЛЬЗОВАТЕЛЯ'; domain_name='ИМЯ_ДОМЕНА'; ssh root@zina.com.ua "cd /var/www/$user_name/data/www/$domain_name && tar cz ./" > $domain_name.tar.gz; du -h $domain_name.tar.gz; unset user_name; unset domain_name
~/.bashrc ~/.config/mc/ini ~/.config/xfce4/terminal/terminalrc
- AOMEI Backupper Standard for Win7 — Win7 потому что это уменьшенный размер для Windows выше WinXP
- R.saver – бесплатная программа для восстановления данных - R.LAB
Самая популярная программа для Linux — Bacula, но, по отзывам, она сложная в настройке. В качестве более простых альтернатив резервного копирования под Linux рекомендуются эти программы:
- UrBackup - Client/Server Open Source Network Backup for Windows and Linux
- Бесплатное резервное копирование ОС Linux — Veeam Agent для Linux
- Borg — BorgBackup
- Web UI for Borg Backup
- его предшественник Attic — развивается медленнее