Автоматический бэкап базы данных сайта в 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
- Откройте
https://www.dropbox.com/developers/appsв браузере - Нажмите кнопку
Create app - Выберите
Scoped accessв качестве типа API - Выберите
Full Dropboxкак тип доступа - Введите имя приложения (например,
SiteBackup) - Нажмите
Create app - Перейдите на вкладку
Permissionsи установите права:files.metadata.read,files.metadata.write,files.content.read,files.content.write - Сохраните изменения кнопкой
Submit
Шаг 2. Получение токена доступа
- На странице приложения перейдите на вкладку
Settings - В разделе
OAuth 2нажмитеGenerateв полеGenerated access token - Скопируйте полученный токен в безопасное место (длинная строка начинается с
sl.) - Никому не передавайте этот токен
Шаг 3. Создание скрипта бэкапа (PHP вариант)
- На сервере создайте папку
/home/username/backups(заменитеusernameна ваш логин) - Создайте файл
backup.phpв этой папке - Скопируйте в файл следующий код:
<?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); } ?> - Замените значения переменных на ваши:
db_host,db_user,db_password,db_name,dropbox_token - Установите права доступа:
chmod 600 backup.php
Шаг 4. Создание скрипта бэкапа (Python вариант, альтернатива)
- Создайте файл
backup.pyв папке/home/username/backups - Установите Dropbox SDK:
pip install dropbox - Скопируйте в файл код:
#!/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)}') - Замените переменные на ваши значения
- Установите права:
chmod +x backup.py
Шаг 5. Настройка задачи cron для автоматического запуска
- Откройте редактор cron:
crontab -e - Добавьте строку для ежедневного запуска в 02:00 ночи (для PHP):
0 2 * * * /usr/bin/php /home/username/backups/backup.php - Или для Python (если используете Python вариант):
0 2 * * * /usr/bin/python3 /home/username/backups/backup.py - Для запуска каждые 6 часов используйте:
0 */6 * * * /usr/bin/php /home/username/backups/backup.php - Сохраните файл (в nano нажмите
Ctrl+X, затемYиEnter) - Проверьте установку:
crontab -l
Шаг 6. Проверка работоспособности
- Запустите скрипт вручную:
/usr/bin/php /home/username/backups/backup.php - Откройте приложение Dropbox на компьютере или зайдите на
https://www.dropbox.com - Перейдите в папку
Apps/SiteBackup/backups(или аналогичную) - Убедитесь, что там появился файл
backup_YYYY-MM-DD_HH-MM-SS.sql - Проверьте логи:
cat /tmp/backup.log
Шаг 7. Дополнительные настройки безопасности
- Создайте отдельного пользователя Linux для запуска бэкапов:
useradd -m -s /bin/false backupuser - Переместите скрипт в его домашнюю папку:
mv backup.php /home/backupuser/ - Установите владельца:
chown backupuser:backupuser /home/backupuser/backup.php - Настройте cron для этого пользователя:
sudo crontab -e -u backupuser - Сохраняйте токены в отдельном защищённом файле
.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.