#!/usr/bin/env bash # Nightly backup: mysqldump (gz) + code tarball (upload excluded). # Retention: KEEP_DAYS. Restore notes in README. set -euo pipefail KEEP_DAYS=14 DB_NAME="${DB_NAME:-sitemanager}" BACKUP_DIR="${BACKUP_DIR:-/var/backups/bitrix}" SITE_DIR="${SITE_DIR:-/home/bitrix/www}" TS="$(date +%F_%H%M)" mkdir -p "$BACKUP_DIR/db" "$BACKUP_DIR/code" echo "[$(date -Is)] dumping database $DB_NAME" mysqldump --single-transaction --quick --routines --triggers --events \ --databases "$DB_NAME" \ | gzip -6 > "$BACKUP_DIR/db/${TS}_${DB_NAME}.sql.gz" echo "[$(date -Is)] archiving code tree (without upload/caches)" tar czf "$BACKUP_DIR/code/${TS}_site.tar.gz" \ -C "$(dirname "$SITE_DIR")" \ --exclude='www/upload' \ --exclude='www/bitrix/cache' \ --exclude='www/bitrix/managed_cache' \ --exclude='www/bitrix/stack_cache' \ --exclude='www/bitrix/tmp' \ --exclude='www/local/php_interface/include/.backup*' \ "$(basename "$SITE_DIR")" echo "[$(date -Is)] pruning older than $KEEP_DAYS days" find "$BACKUP_DIR/db" -name '*.sql.gz' -mtime +"$KEEP_DAYS" -delete find "$BACKUP_DIR/code" -name '*.tar.gz' -mtime +$((KEEP_DAYS * 3)) -delete echo "[$(date -Is)] done: $(du -sh "$BACKUP_DIR" | cut -f1) total"