Хотим иметь бэкап nginx конфигов, всей диры с wordpress а также базу данных wordpress.
Пишем скрипт на bash который назовем например backup.sh
#!/bin/bash
date=$(date +%d-%m-%Y.%H.%M.%S)
backup_folder="/srv/backup"
dump_extra_files="/etc/my.cnf.d/.dump"
database_name="wordpress"
wordpress_root_dir="/usr/share/nginx/html"
nginx_root_dir="/etc/nginx"
function mysql_backup() {
mysqldump --defaults-extra-file=$dump_extra_files $database_name > $backup_folder/${date}_wordpress.sql
}
function backup_files() {
tar -czvf ${backup_folder}/${date}_${1}.tar.gz -C $2 .
}
function rotate_backup() {
find $backup_folder -type f -mtime +3 -exec rm -f {} \;
}
function create_dir() {
if [[ ! -d $backup_folder ]];then
mkdir -p $backup_folder
fi;
}
create_dir
mysql_backup
backup_files "wordpress_files" "${wordpress_root_dir}"
backup_files "nginx_files" "${nginx_root_dir}"
rotate_backup
Используемые переменные:
date — тут получаем текущую даты в определенном формате.
backup_folder — в этой директории будут лежать все файлы бэкапа.
dump_extra_files — даже с localhost у нас инстанс mysql запоролен. Чтобы скрипт не ломался на предлоге ввода пароля, создадим отдельный файл в /etc/my.cnf.d/.dump следующего вида
[mysqldump]
user=<user>
password=<password>
Его то и будет использовать скрипт для коннекта к БД.
database_name — имя базы данных.
wordpress_root_dir — директория со всеми файлами wordpress.
nginx_root_dir — директория с файлами nginx.
Функции:
create_dir — проверяет наличие директории для бэкапов и создает ее, если такая директория отсутствует.
mysql_backup — делает бэкап базы в sql файл.
backup_files — переиспользуемая функция, в зависимости от переданных аргументов во время вызова делается бэкап wordpress файлов или nginx.
rotate_backup — удаляем из директории бэкапа все файлы старше 3 дней.
Добавляем в планировщик cron строку
@daily /path/to/backup.sh
Теперь скрипт запускается каждый день автоматически.
Забрать бэкап можно командой, которую также можно добавить в cron.
rsync -acvP -e 'ssh -o StrictHostKeyChecking=no' vds-site:/srv/backup/ /srv/backup_wp
vds-site — это alias в ssh конфиге, который можно настроить по этой статье.