Автоматический бэкап базы данных сайта в облако Dropbox по расписанию

Как настроить автоматический бэкап базы данных сайта в облако Dropbox по расписанию

Автоматический бэкап базы данных сайта в Dropbox настраивается через комбинацию инструментов: скрипт на PHP или Python, токен доступа Dropbox API и задача в планировщик cron. Процесс занимает 15–20 минут и обеспечивает ежедневное сохранение данных в облако без ручного вмешательства.

Зачем нужен автоматический бэкап в облако

  • Защита от потери данных при сбое сервера или хостинга
  • Возможность восстановления БД за любой период времени
  • Снижение нагрузки на дисковое пространство основного хостинга
  • Соответствие требованиям безопасности данных клиентов
  • Возможность быстрого переноса сайта на другой хостинг

Необходимые инструменты и доступы

  • Аккаунт Dropbox с достаточным местом для хранения (минимум 2 ГБ)
  • Доступ к панели управления хостингом (cPanel, Plesk или прямой доступ по SSH)
  • Установленные на сервере: PHP 7.0+ или Python 3.6+, утилита mysqldump или pg_dump
  • Токен доступа Dropbox API (долгоживущий токен)
  • FTP или SSH доступ для загрузки скрипта на сервер

Пошаговая инструкция настройки

Шаг 1. Создание приложения в Dropbox Developer Console

  1. Откройте https://www.dropbox.com/developers/apps в браузере
  2. Нажмите кнопку Create app
  3. Выберите Scoped access в качестве типа API
  4. Выберите Full Dropbox как тип доступа
  5. Введите имя приложения (например, SiteBackup)
  6. Нажмите Create app
  7. Перейдите на вкладку Permissions и установите права: files.metadata.read, files.metadata.write, files.content.read, files.content.write
  8. Сохраните изменения кнопкой Submit

Шаг 2. Получение токена доступа

  1. На странице приложения перейдите на вкладку Settings
  2. В разделе OAuth 2 нажмите Generate в поле Generated access token
  3. Скопируйте полученный токен в безопасное место (длинная строка начинается с sl.)
  4. Никому не передавайте этот токен

Шаг 3. Создание скрипта бэкапа (PHP вариант)

  1. На сервере создайте папку /home/username/backups (замените username на ваш логин)
  2. Создайте файл backup.php в этой папке
  3. Скопируйте в файл следующий код:
    <?php
    $db_host = 'localhost';
    $db_user = 'db_username';
    $db_password = 'db_password';
    $db_name = 'database_name';
    $dropbox_token = 'YOUR_DROPBOX_TOKEN_HERE';
    
    $date = date('Y-m-d_H-i-s');
    $backup_file = "/tmp/backup_$date.sql";
    
    $command = "mysqldump -h $db_host -u $db_user -p$db_password $db_name > $backup_file";
    shell_exec($command);
    
    if (file_exists($backup_file)) {
        $file_content = file_get_contents($backup_file);
        $dropbox_path = "/backups/backup_$date.sql";
        
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => 'https://content.dropboxapi.com/2/files/upload',
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_HTTPHEADER => [
                'Authorization: Bearer ' . $dropbox_token,
                'Dropbox-API-Arg: {"path":"' . $dropbox_path . '","mode":"add"}'
            ],
            CURLOPT_POSTFIELDS => $file_content,
            CURLOPT_RETURNTRANSFER => true
        ]);
        
        $response = curl_exec($ch);
        curl_close($ch);
        
        unlink($backup_file);
        
        file_put_contents('/tmp/backup.log', "[" . date('Y-m-d H:i:s') . "] Backup uploaded\n", FILE_APPEND);
    } else {
        file_put_contents('/tmp/backup.log', "[" . date('Y-m-d H:i:s') . "] Backup failed\n", FILE_APPEND);
    }
    ?>
  4. Замените значения переменных на ваши: db_host, db_user, db_password, db_name, dropbox_token
  5. Установите права доступа: chmod 600 backup.php

Шаг 4. Создание скрипта бэкапа (Python вариант, альтернатива)

  1. Создайте файл backup.py в папке /home/username/backups
  2. Установите Dropbox SDK: pip install dropbox
  3. Скопируйте в файл код:
    #!/usr/bin/env python3
    import subprocess
    import os
    from datetime import datetime
    import dropbox
    
    DB_HOST = 'localhost'
    DB_USER = 'db_username'
    DB_PASSWORD = 'db_password'
    DB_NAME = 'database_name'
    DROPBOX_TOKEN = 'YOUR_DROPBOX_TOKEN_HERE'
    
    date_str = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
    backup_file = f'/tmp/backup_{date_str}.sql'
    
    cmd = f'mysqldump -h {DB_HOST} -u {DB_USER} -p{DB_PASSWORD} {DB_NAME} > {backup_file}'
    os.system(cmd)
    
    if os.path.exists(backup_file):
        try:
            dbx = dropbox.Dropbox(DROPBOX_TOKEN)
            with open(backup_file, 'rb') as f:
                dbx.files_upload(f.read(), f'/backups/backup_{date_str}.sql', mode=dropbox.files.WriteMode('add'))
            os.remove(backup_file)
            print(f'[{datetime.now()}] Backup uploaded successfully')
        except Exception as e:
            print(f'[{datetime.now()}] Backup failed: {str(e)}')
    
  4. Замените переменные на ваши значения
  5. Установите права: chmod +x backup.py

Шаг 5. Настройка задачи cron для автоматического запуска

  1. Откройте редактор cron: crontab -e
  2. Добавьте строку для ежедневного запуска в 02:00 ночи (для PHP): 0 2 * * * /usr/bin/php /home/username/backups/backup.php
  3. Или для Python (если используете Python вариант): 0 2 * * * /usr/bin/python3 /home/username/backups/backup.py
  4. Для запуска каждые 6 часов используйте: 0 */6 * * * /usr/bin/php /home/username/backups/backup.php
  5. Сохраните файл (в nano нажмите Ctrl+X, затем Y и Enter)
  6. Проверьте установку: crontab -l

Шаг 6. Проверка работоспособности

  1. Запустите скрипт вручную: /usr/bin/php /home/username/backups/backup.php
  2. Откройте приложение Dropbox на компьютере или зайдите на https://www.dropbox.com
  3. Перейдите в папку Apps/SiteBackup/backups (или аналогичную)
  4. Убедитесь, что там появился файл backup_YYYY-MM-DD_HH-MM-SS.sql
  5. Проверьте логи: cat /tmp/backup.log

Шаг 7. Дополнительные настройки безопасности

  1. Создайте отдельного пользователя Linux для запуска бэкапов: useradd -m -s /bin/false backupuser
  2. Переместите скрипт в его домашнюю папку: mv backup.php /home/backupuser/
  3. Установите владельца: chown backupuser:backupuser /home/backupuser/backup.php
  4. Настройте cron для этого пользователя: sudo crontab -e -u backupuser
  5. Сохраняйте токены в отдельном защищённом файле .env, а не в коде скрипта

Часто задаваемые вопросы

Как часто должны выполняться бэкапы? Для большинства сайтов достаточно одного бэкапа в сутки, но при высокой активности рекомендуется запускать каждые 6–12 часов.

Что делать, если cron не выполняет скрипт? Проверьте права доступа на файл скрипта (chmod 755), убедитесь что указан полный путь к интерпретатору PHP/Python, и проверьте логи сервера: grep CRON /var/log/syslog.

Как восстановить БД из бэкапа? Скачайте файл .sql из Dropbox и выполните команду mysql -h localhost -u db_user -p db_name < backup_file.sql.

Похожие материалы

Облачный буфер обмена Windows 11 для копирования между устройствами
Освободить место на жестком диске используя функцию Диск-О или Облако
Автоматическая синхронизация папок с ПК на Яндекс Диск