Настройка бэкапирования базы данных сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка бэкапирования базы данных сайта
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка резервного копирования базы данных сайта

Резервное копирование — страховка от потери данных при сбое железа, случайного удаления, атаки ransomware. Стратегия 3-2-1: три копии, два разных носителя, одна вне сайта.

PostgreSQL: автоматический backup скрипт

#!/bin/bash
# /usr/local/bin/pg-backup.sh

set -euo pipefail

DB_NAME="myapp"
DB_USER="myapp"
BACKUP_DIR="/var/backups/postgresql"
S3_BUCKET="s3://myapp-backups/postgresql"
RETAIN_LOCAL=7   # дней
RETAIN_S3=30     # дней

TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"

mkdir -p "$BACKUP_DIR"

# Дамп с компрессией
pg_dump -U "$DB_USER" -Fp --no-owner --no-acl "$DB_NAME" | \
  gzip -9 > "$BACKUP_FILE"

BACKUP_SIZE=$(du -sh "$BACKUP_FILE" | cut -f1)
echo "[$(date)] Backup created: $BACKUP_FILE ($BACKUP_SIZE)"

# Загрузить в S3
aws s3 cp "$BACKUP_FILE" "${S3_BUCKET}/${DB_NAME}_${TIMESTAMP}.sql.gz" \
  --storage-class STANDARD_IA

# Удалить локальные бэкапы старше N дней
find "$BACKUP_DIR" -name "*.sql.gz" -mtime "+${RETAIN_LOCAL}" -delete

# Удалить старые бэкапы из S3
aws s3 ls "${S3_BUCKET}/" | \
  awk '{print $4}' | \
  sort | \
  head -n -"$RETAIN_S3" | \
  xargs -I{} aws s3 rm "${S3_BUCKET}/{}"

echo "[$(date)] Backup completed successfully"
# Crontab: ежедневный backup в 2:00
0 2 * * * /usr/local/bin/pg-backup.sh >> /var/log/pg-backup.log 2>&1

MySQL/MariaDB backup

#!/bin/bash
MYSQL_DEFAULTS_FILE="/etc/mysql/backup.cnf"  # содержит [client] user/password
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)

# --single-transaction для InnoDB (без блокировок)
mysqldump \
  --defaults-extra-file="$MYSQL_DEFAULTS_FILE" \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  myapp | gzip -9 > "/var/backups/mysql/myapp_${TIMESTAMP}.sql.gz"

Laravel Spatie Backup

Пакет spatie/laravel-backup автоматизирует backup БД и файлов:

// config/backup.php
return [
    'backup' => [
        'name'    => 'myapp',
        'source'  => [
            'databases' => ['mysql'],
            'files'     => [
                'include' => [storage_path('app')],
                'exclude' => [storage_path('app/temp')],
            ],
        ],
        'destination' => [
            'disks'    => ['s3'],
            'filename_prefix' => 'backup_',
        ],
        'temporary_directory' => storage_path('app/backup-temp'),
    ],
    'cleanup' => [
        'keep_all_backups_for_days'                 => 7,
        'keep_daily_backups_for_days'               => 30,
        'keep_weekly_backups_for_weeks'             => 8,
        'keep_monthly_backups_for_months'           => 4,
        'delete_oldest_backups_when_using_more_megabytes_than' => 5000,
    ],
];
# Запуск
php artisan backup:run
php artisan backup:clean

# В schedule
$schedule->command('backup:run')->daily()->at('02:00');
$schedule->command('backup:clean')->daily()->at('03:00');
$schedule->command('backup:monitor')->dailyAt('07:00');

Проверка восстановления

Backup без проверки — не backup. Автоматическое тестирование:

#!/bin/bash
# Восстановить последний backup в тестовую БД и проверить
LATEST=$(ls -t /var/backups/postgresql/*.sql.gz | head -1)

gunzip -c "$LATEST" | psql -U postgres -d myapp_test

# Проверить количество записей
USERS=$(psql -U postgres -d myapp_test -t -c "SELECT COUNT(*) FROM users;")
ORDERS=$(psql -U postgres -d myapp_test -t -c "SELECT COUNT(*) FROM orders;")

if [ "$USERS" -gt 0 ] && [ "$ORDERS" -gt 0 ]; then
    echo "Backup verification OK: $USERS users, $ORDERS orders"
    # Отправить OK статус в healthchecks.io
    curl -fsS https://hc-ping.com/your-uuid > /dev/null
else
    echo "Backup verification FAILED"
    # Алерт
fi

psql -U postgres -c "DROP DATABASE myapp_test;"

Срок реализации

Автоматический backup PostgreSQL/MySQL в S3 с ротацией: 1–2 дня. С проверкой восстановления и Slack-уведомлениями: 2–3 дня.