Создал(а) 'backup.sh'
This commit is contained in:
parent
6ee5509c30
commit
1e641c0c59
119
backup.sh
Normal file
119
backup.sh
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Описание:
|
||||||
|
# Этот скрипт предназначен для резервного копирования файлов и баз данных WordPress.
|
||||||
|
# Он может выполнять полный бэкап (файлы и база данных) или только бэкап базы данных.
|
||||||
|
# Результаты сохраняются в указанные директории и сжимаются в tar.gz формат.
|
||||||
|
# Логи работы скрипта сохраняются в отдельный файл в директории бэкапов.
|
||||||
|
|
||||||
|
# Использование:
|
||||||
|
# backup.sh full - выполнить полный бэкап (файлы + БД).
|
||||||
|
# backup.sh db - выполнить бэкап только базы данных.
|
||||||
|
# backup.sh install - добавить задачи в cron (только при первом запуске).
|
||||||
|
|
||||||
|
# Пути и переменные
|
||||||
|
WP_PATH="/var/www/society" # Путь к директории WordPress
|
||||||
|
BACKUP_PATH="/var/www/backups" # Путь к директории бэкапов
|
||||||
|
DB_DUMP_PATH="${BACKUP_PATH}/db_dumps" # Путь к директории с дампами баз данных
|
||||||
|
LOG_FILE="${BACKUP_PATH}/backup_log_$(date +%F).log" # Путь к лог-файлу
|
||||||
|
|
||||||
|
# Функция для логирования
|
||||||
|
log() {
|
||||||
|
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Создание директорий для бэкапов
|
||||||
|
mkdir -p "${BACKUP_PATH}"
|
||||||
|
mkdir -p "${DB_DUMP_PATH}"
|
||||||
|
|
||||||
|
# Проверка и установка необходимых пакетов
|
||||||
|
REQUIRED_PKG=("tar" "mysqldump" "mysql")
|
||||||
|
for PKG in "${REQUIRED_PKG[@]}"; do
|
||||||
|
if ! command -v $PKG &> /dev/null; then
|
||||||
|
log "$PKG could not be found and is required for the script to run."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Функция для бэкапа файлов WordPress
|
||||||
|
backup_files() {
|
||||||
|
log "Starting WordPress files backup."
|
||||||
|
tar -czf "${BACKUP_PATH}/wp-files-$(date +%F).tar.gz" -C "${WP_PATH}" .
|
||||||
|
log "WordPress files backup completed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для дампа базы данных
|
||||||
|
backup_db() {
|
||||||
|
log "Starting database backup."
|
||||||
|
local DB_NAME=$(cat "${WP_PATH}/wp-config.php" | grep DB_NAME | cut -d "'" -f 4)
|
||||||
|
local DB_USER=$(cat "${WP_PATH}/wp-config.php" | grep DB_USER | cut -d "'" -f 4)
|
||||||
|
local DB_PASSWORD=$(cat "${WP_PATH}/wp-config.php" | grep DB_PASSWORD | cut -d "'" -f 4)
|
||||||
|
|
||||||
|
mysqldump -u "${DB_USER}" -p"${DB_PASSWORD}" "${DB_NAME}" > "${DB_DUMP_PATH}/db-$(date +%F-%H%M).sql"
|
||||||
|
log "Database backup completed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Сжатие дампов БД и файлов в конце дня
|
||||||
|
compress_backups() {
|
||||||
|
log "Starting compression of all backups."
|
||||||
|
tar -czf "${BACKUP_PATH}/wp-backup-$(date +%F).tar.gz" -C "${BACKUP_PATH}" "wp-files-$(date +%F).tar.gz" -C "${DB_DUMP_PATH}" .
|
||||||
|
log "Compression of all backups completed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверка и добавление задач в cron
|
||||||
|
add_cron_jobs() {
|
||||||
|
log "Adding cron jobs for backups."
|
||||||
|
local FILES_BACKUP_JOB="0 0 * * * /bin/bash ${PWD}/backup.sh full"
|
||||||
|
local DB_BACKUP_JOB="0 * * * * /bin/bash ${PWD}/backup.sh db"
|
||||||
|
|
||||||
|
# Проверка и добавление задачи для бэкапа файлов, если ее нет
|
||||||
|
if ! crontab -l | grep -q "${FILES_BACKUP_JOB}"; then
|
||||||
|
(crontab -l 2>/dev/null; echo "${FILES_BACKUP_JOB}") | crontab -
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверка и добавление задачи для бэкапа базы данных, если ее нет
|
||||||
|
if ! crontab -l | grep -q "${DB_BACKUP_JOB}"; then
|
||||||
|
(crontab -l 2>/dev/null; echo "${DB_BACKUP_JOB}") | crontab -
|
||||||
|
fi
|
||||||
|
log "Cron jobs added."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для удаления всех суточных дампов БД
|
||||||
|
clean_db_dumps() {
|
||||||
|
log "Cleaning up all daily database dumps."
|
||||||
|
rm -f "${DB_DUMP_PATH}"/*
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для оставления только последних 10 полных бэкапов
|
||||||
|
cleanup_old_full_dumps() {
|
||||||
|
log "Cleaning up old full backups, keeping only the last 10."
|
||||||
|
local files=(${BACKUP_PATH}/wp-backup-*.tar.gz)
|
||||||
|
if [ ${#files[@]} -gt 10 ]; then
|
||||||
|
# Отсортировать файлы по дате модификации, удалить самые старые
|
||||||
|
ls -t ${BACKUP_PATH}/wp-backup-*.tar.gz | tail -n +11 | xargs rm
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#Основной логика скрипта
|
||||||
|
case $1 in
|
||||||
|
full)
|
||||||
|
log "Initiating full backup."
|
||||||
|
backup_files
|
||||||
|
backup_db
|
||||||
|
compress_backups
|
||||||
|
clean_db_dumps
|
||||||
|
cleanup_old_full_dumps
|
||||||
|
log "Full backup completed."
|
||||||
|
;;
|
||||||
|
db)
|
||||||
|
log "Initiating database only backup."
|
||||||
|
backup_db
|
||||||
|
log "Database only backup completed."
|
||||||
|
;;
|
||||||
|
install)
|
||||||
|
add_cron_jobs
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid argument. Use 'full' for full backup, 'db' for database backup only, or 'install' to set up cron jobs."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
Loading…
Reference in New Issue
Block a user