Опишу пример резервного копирования биллинговой системы ABillS.
Создадим директорию для резервных копий базы данных если она не создана:
mkdir /usr/abills/backup
chown www-data:www-data /usr/abills/backup
Замечу что резервное копирование базы данных также выполняется по «periodic monthly» и очищаются файлы старше 30 дней. Но при желании можно отключить добавив «SKIP_MODULES», например:
/usr/abills/libexec/periodic monthly SKIP_MODULES=backup
Для ручного создания резервной копии базы данных можно выполнить (скрипт также удаляет файлы старее 30 дней):
/usr/abills/libexec/periodic backup
/usr/abills/libexec/periodic backup DEBUG=2
Вручную резервную копию базы ABillS данных можно также сделать через веб-интерфейс открыв — «Настройка» — «Другое» — «Архивация базы».
На высоконагруженных системах эту команду лучше не запускать, так как блокируются таблицы и могут быть не предсказуемые проблемы, у меня из-за этого страдал сервер доступа, либо вручную запускать mysqldump с ключом single-transaction.
Так как «periodic monthly» делает копии базы, то добавлять команду «periodic backup» в планировщик заданий нет смысла.
Для больших баз данных рекомендую настроить репликацию MySQL и со второй базы уже делать резервные копии, а на основном сервере отключить резервные копии.
Если файлы резервных копий базы не создаются, то возможно не указан путь к mysqldump, его можно указать в меню «Настройка» — «Другое» — «Пути», также в файлах:
/usr/abills/Abills/programs
/usr/abills/Abills/templates/programs.tpl
либо создать символическую ссылку в /usr/local/bin/mysqldump
Восстановить базу из резервной копии можно так:
cd /usr/abills/backup
gzip -d stats-xxxx-xx-xx.sql.gz
mysql -D abills < stats-xxxx-xx-xx.sql
Через утилиту «pv» можно видеть процесс импорта:
apt install pv
pv stats-`date +%Y-%m-%d`.sql | mysql -u root -D abills
Также можно делать копию директории биллинга и других важных директорий, используя nice и ionice я понизил приоритет использования диска и CPU чтобы не влиять на производительность сервера, команда в конце удаляет копии старше 4 дней, если база большая то лучше исключить директорию /usr/abills/backup, вот для примера я написал такой скрипт:
#!/bin/bash
mkdir /backup/data/`date +%Y-%m-%d`-abills
cd /backup/data/`date +%Y-%m-%d`-abills
nice -n 19 ionice -c2 -n7 mysqldump --single-transaction -R -h localhost -u root -p abills | gzip -c > /backup/data/`date +%Y-%m-%d`-abills/abills_`date +%Y-%m-%d`.sql.gz
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/etc_`date +%Y-%m-%d`.tar.bz2 /etc/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/www_`date +%Y-%m-%d`.tar.bz2 /var/www/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/abills_`date +%Y-%m-%d`.tar.bz2 /usr/abills/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/usr_local_`date +%Y-%m-%d`.tar.bz2 /usr/local/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/scripts_`date +%Y-%m-%d`.tar.bz2 /backup/scripts/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/tftp_`date +%Y-%m-%d`.tar.bz2 /srv/tftp/
iptables-save > /backup/data/`date +%Y-%m-%d`-abills/iptables_`date +%Y-%m-%d`.dump
# Delete old backups
nice -n 19 ionice -c2 -n7 find /backup/data/ -type d -mtime +20 -exec rm -rfv {} \;
Смотрите также мои статьи:
Установка и настройка ABillS
Установка и настройка fsbackup
Импорт и экспорт MySQL баз данных
Настройка репликации в MySQL
Использование и настройка CRON