Когда-то делала интересный вариант архивирования для Asterisk, который практически нигде в Интернете не описан, но очень удобен, потому что лаконичен. Я уверена, что мало кто так делал архивирование. Обычно в команде tar пишут простыню.
Дополню: дамп SQL не всегда целесообразно делать через mysqldump. Если база очень большая, нужно использовать новый способ через mysqlsh с автоматическим архивированием в zstd архивы. Этот способ намного быстрее и не требует блокировки.
Сначала создается массив astfiles, где перечисляем в каждой строке папку или файл, который нужно архивировать. Это удобно, потому что ненужные компоненты всегда можно закомментировать решеткой в начале строки. При этом сам элемент массива astfiles может быть переменной. Потом архируем вызывая этот массив. Вот часть из скрипта бэкапа:
bkdir="/backup" # каталог бэкапа
timestamp=$(date +%Y%m%d_%H%M) # текущие дата и время
hostname=$(hostname -s) # имя хоста (актуально для удаленных бэкапов когда с нескольких хостов собирают архивы)
astFile="astbackup-$hostname-$timestamp.tar.gz" # имя файла итогового архива бэкапа
sqlFile="sqldump-$timestamp.sql" # имя файла дампа sql
astPath="$bkdir/$astFile" # полный путь
sqlPath="$bkdir/$sqlFile" # полный путь к дампу sql
# Снимаем дамп базы (одной или нескольких) SQL со статистикой звонков
mysqldump asterisk > $sqlPath
# Перечисляем каталоги или отдельные файлы для бэкапа в массиве astfiles. Ненужное закомментировать
astfiles=(
# /etc/dahdi
$sqlPath # дамп базы данных MariaDB со статистикой по звонкам
/etc/asterisk # файлы конфигурации Asterisk
/etc/zabbix # файлы конфигурации Zabbix
/etc/profile.d # каталог с алиасами Linux, скриптами, настройками редактора vim и пр.
/etc/yum.repos.d # каталог со списком репозиториев
/var/www/html/acdr # каталог веб-сервера, скрипт статистики звонков
... тут любые каталоги и папки, ненужное закомментировать.
)
### отобразим на экране весь список каталогов и файлов, которые бэкапим
echo 'Список файлов и каталогов бэкапа:'
echo ${astfiles[@]}
### Сжатие всех каталогов и файлов в один архив.
tar czfp $astPath ${astfiles[@]}
### Удаляем дамп базы CDR, т.к. он теперь есть в сжатом виде внутри общего архива.
# Работает, если даже несколько баз бэкапили, для этого ставим *
rm -f $bkdir/sqldump-*.sqlДалее у меня в файле описано копирование на сетевое хранилище NAS и удаление старых копий: Удаляем бэкапы старше keep_days. Удаляем старые бэкапы, количество которых превышает keep_copies. Отображаем статус и конечные каталоги.
Cколько времени занимает архивирование:
date=$(date '+%Y-%m-%d_%H-%M-%S') # дата в читабельном формате
start=$SECONDS # для подсчета, сколько времени занимает бэкап
.....
тут всякие команды, например архивирование
.....
end=$SECONDS
echo "Длительность бэкапа youtrack: $((end-start)) секунд."