Нічого не знайдено

Спробуйте інший пошуковий запит

Популярні запити:

Додати в кошик

Кошик

У вас поки немає покупок

Переглянути маркетплейс

Автоматизація бекапів з Bash скриптами

Створюємо надійну систему автоматичного резервного копіювання для OpenCart з використанням Bash та Cron.

9 хв читання
4,737
5
1
Автоматизація бекапів з Bash скриптами

Втрата даних може знищити бізнес за лічені хвилини. У цій статті ми створимо професійну систему бекапів, яка захистить ваш OpenCart магазин.

Стратегія бекапів

Ефективна стратегія включає:

  • Щоденні бекапи — база даних
  • Щотижневі бекапи — повний архів (файли + БД)
  • Ротація — видалення старих бекапів
  • Віддалене зберігання — копія на іншому сервері

Бекап, який ви не перевірили — це не бекап. Регулярно тестуйте відновлення!

— Золоте правило сисадмінів

Скрипт бекапу бази даних

#!/bin/bash
# /home/deployer/scripts/backup-db.sh

# Конфігурація
DB_NAME="opencart"
DB_USER="opencart"
DB_PASS="your_password"
BACKUP_DIR="/home/deployer/backups/database"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=14

# Створення директорії
mkdir -p $BACKUP_DIR

# Бекап
echo "[$(date)] Starting database backup..."
mysqldump -u$DB_USER -p$DB_PASS \
    --single-transaction \
    --routines \
    --triggers \
    $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz

# Перевірка успішності
if [ $? -eq 0 ]; then
    echo "[$(date)] Database backup completed: db_$DATE.sql.gz"

    # Розмір файлу
    SIZE=$(du -h $BACKUP_DIR/db_$DATE.sql.gz | cut -f1)
    echo "[$(date)] Backup size: $SIZE"
else
    echo "[$(date)] ERROR: Database backup failed!"
    exit 1
fi

# Ротація старих бекапів
echo "[$(date)] Removing backups older than $RETENTION_DAYS days..."
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +$RETENTION_DAYS -delete

echo "[$(date)] Backup process completed."

Скрипт повного бекапу

#!/bin/bash
# /home/deployer/scripts/backup-full.sh

# Конфігурація
SITE_DIR="/var/www/opencart"
BACKUP_DIR="/home/deployer/backups/full"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=30

# Виключення з архіву
EXCLUDES="--exclude='*.log' --exclude='system/storage/cache/*' --exclude='system/storage/logs/*'"

mkdir -p $BACKUP_DIR

echo "[$(date)] Starting full backup..."

# Бекап бази
/home/deployer/scripts/backup-db.sh

# Бекап файлів
tar $EXCLUDES -czf $BACKUP_DIR/files_$DATE.tar.gz -C $(dirname $SITE_DIR) $(basename $SITE_DIR)

if [ $? -eq 0 ]; then
    SIZE=$(du -h $BACKUP_DIR/files_$DATE.tar.gz | cut -f1)
    echo "[$(date)] Files backup completed: $SIZE"
else
    echo "[$(date)] ERROR: Files backup failed!"
    exit 1
fi

# Ротація
find $BACKUP_DIR -name "files_*.tar.gz" -mtime +$RETENTION_DAYS -delete

echo "[$(date)] Full backup completed."
Порада: Використовуйте --single-transaction для mysqldump, щоб не блокувати таблиці під час бекапу.

Синхронізація з віддаленим сервером

#!/bin/bash
# /home/deployer/scripts/sync-backups.sh

BACKUP_DIR="/home/deployer/backups"
REMOTE_USER="backup"
REMOTE_HOST="backup-server.com"
REMOTE_DIR="/backups/opencart"

# Синхронізація через rsync
rsync -avz --delete \
    -e "ssh -i /home/deployer/.ssh/backup_key" \
    $BACKUP_DIR/ \
    $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/

echo "[$(date)] Sync completed."

Налаштування Cron

# Редагування crontab
crontab -e

# Щоденний бекап БД о 3:00
0 3 * * * /home/deployer/scripts/backup-db.sh >> /var/log/backup.log 2>&1

# Повний бекап щонеділі о 4:00
0 4 * * 0 /home/deployer/scripts/backup-full.sh >> /var/log/backup.log 2>&1

# Синхронізація щодня о 5:00
0 5 * * * /home/deployer/scripts/sync-backups.sh >> /var/log/backup.log 2>&1

Скрипт відновлення

#!/bin/bash
# /home/deployer/scripts/restore.sh

BACKUP_FILE=$1
DB_NAME="opencart"
DB_USER="opencart"
DB_PASS="your_password"

if [ -z "$BACKUP_FILE" ]; then
    echo "Usage: ./restore.sh backup_file.sql.gz"
    exit 1
fi

echo "WARNING: This will overwrite the current database!"
read -p "Continue? (yes/no): " confirm

if [ "$confirm" = "yes" ]; then
    gunzip -c $BACKUP_FILE | mysql -u$DB_USER -p$DB_PASS $DB_NAME
    echo "Database restored successfully."
else
    echo "Restore cancelled."
fi
Важливо: Зберігайте паролі в окремому конфіг-файлі з правами 600, а не в самих скриптах!

Моніторинг бекапів

#!/bin/bash
# Перевірка наявності свіжого бекапу

BACKUP_DIR="/home/deployer/backups/database"
MAX_AGE=86400  # 24 години в секундах

LATEST=$(find $BACKUP_DIR -name "db_*.sql.gz" -mtime -1 | head -1)

if [ -z "$LATEST" ]; then
    echo "ALERT: No backup found in last 24 hours!"
    # Відправити email або Slack повідомлення
    exit 1
fi

echo "OK: Latest backup found: $LATEST"

Висновок

Тепер у вас є повноцінна система бекапів. Не забувайте періодично тестувати відновлення — бекап без перевірки не дає гарантій.

Додатково: Розгляньте використання S3-сумісного сховища (AWS S3, DigitalOcean Spaces) для географічно розподіленого зберігання.
DEV

DEV

Привіт! Я досвідчений розробник з OpenCart екосистеми з понад 10 роками практики. Технічний стек включає PHP (core мова для OpenCart), MySQL/MariaDB для баз даних, JavaScript/jQuery для фронтенду, HTML5/CSS3/Bootstrap для верстки. Маю глибокий досвід роботи з архітектурою OpenCart (MVC, Event System, OCMOD), інтеграцією платіжних систем та API, оптимізацією продуктивності магазинів. Окрім розробки, займаюся серверним адмініструванням — Linux (Ubuntu/Debian), Apache/Nginx, налаштування VPS/Dedicated серверів, DNS менеджмент, SSL сертифікати, email. Обслуговую понад 5000 інтернет-магазинів по всьому світу, надаючи комплексні рішення від розробки до технічної підтримки.

статей
9
переглядів
39,540
вподобань
48
підписники
3

Схожі статті

Коментарі (0)

Відповідь для

Увійдіть, щоб залишити коментар

Увійти

Коментарів поки немає

Будьте першим, хто залишить коментар до цієї статті!

Ми використовуємо cookies

Ми використовуємо cookies та схожі технології для покращення вашого досвіду, аналізу трафіку та показу персоналізованої реклами. Детальніше — у нашій Політиці cookies.