Стратегия резервного копирования¶
XC_VM поддерживает автоматическое и ручное резервное копирование баз данных с помощью локального хранилища и дополнительной загрузки в Dropbox. Управление резервными копиями осуществляется с помощью панели администратора, команд CLI и задания cron.
Что сохраняется в резервной Копии¶
Резервные копии содержат полную структуру базы данных и данные, кроме следующие таблицы:
detect_restream_logs, epg_data, lines_activity, lines_live,
lines_logs, login_logs, mag_claims, mag_logs, mysql_syslog,
panel_logs, panel_stats, servers_stats, signals,
streams_errors, streams_logs, streams_stats, syskill_log,
users_credits_logs, users_logs, watch_logs
Примечание: При восстановлении резервной копии все данные журнала будут удалены. Эти таблицы исключены, чтобы можно было управлять размерами резервных копий.
Резервные копии включают в себя нет:
- Данные файловой системы (записи, VOD файлов, EPG XML)
- Файлы конфигурации (
config/) - Двоичные зависимости (
bin/) - Временные файлы (
tmp/)
Конфигурация¶
Настройки находятся в панели администратора в разделе Резервные копии:
| Установка | По умолчанию | Описание |
|---|---|---|
automatic_backups |
off |
частота: off, hourly, daily, weekly, monthly |
backups_to_keep |
0 |
количество локальных хранилищ (0 = неограниченно) |
dropbox_remote |
0 |
включить загрузку в Dropbox |
dropbox_keep |
0 |
количество удаленных записей (0 = неограниченно) |
dropbox_token |
'' |
Токен API Dropbox |
Создание резервных копий¶
Руководство пользователя (панель администратора)¶
Нажмите Создайте резервную копию прямо сейчас на странице резервных копий. При этом задание cron будет запущено в принудительном режиме:
Автоматический (cron)¶
Задание cron:backups проверяет расписание при каждом запуске:
| График | Интервал |
|---|---|
hourly |
3600 - е годы |
daily |
86400-е годы |
weekly |
604800-е годы |
monthly |
2419200 - е годы |
Запускается только на главном сервере (is_main=1). Используется блокировка на основе PID для предотвращения дублирования запусков.
Процесс резервного копирования¶
- Закройте соединение MySQL перед сбросом.
- Запустите
mysqldump --no-data(структура) +mysqldump --ignore-table(данные, исключая таблицы журнала). - Проверьте размер файла (пустые файлы удаляются).
- Если включен Dropbox: загружайте с отслеживанием статуса.
- Примените политику хранения (удалите самые старые файлы, превышающие установленный лимит).
Расположение файла¶
Восстановление резервных копий¶
Из панели администратора¶
Нажмите Восстанавливать на любой записи резервной копии. Требуется подтверждение.
Процесс:
- Если существует локальный файл, используйте его. В противном случае загрузите из Dropbox в
/home/xc_vm/tmp/restore.sql. - Удалите базу данных и создайте ее заново.
- Импортируйте SQL-файл.
- Повторно загрузите структуру после импорта.
Важный: При восстановлении вся база данных удаляется и создается заново. Все данные, отсутствующие в резервной копии, будут потеряны.
Из CLI¶
Для сценариев миграции с выборочным импортом таблиц:
При этом выполняется восстановление в базе данных xc_vm_migrate для выборочного переноса данных, а не перезапись действующей базы данных.
Удержание¶
Локальное удержание¶
- Если
backups_to_keep > 0: сохраняются только N самых последних файлов. Сначала удаляются самые старые. - If
backups_to_keep = 0: сохраняет все файлы (неограниченное количество).
Удаленное хранение¶
- Если
dropbox_keep > 0: сохраняются только N самых последних файлов в Dropbox. Самые старые удаляются первыми. - If
dropbox_keep = 0: сохраняет все удаленные файлы (неограниченное количество).
Очистка выполняется автоматически после каждого резервного копирования с помощью BackupsCronJob.
Интеграция с Dropbox¶
Файл: src/Core/Storage/DropboxClient.php
Когда параметр dropbox_remote включен:
- После создания локальной резервной копии загрузите ее в Dropbox.
- Во время загрузки создается файл маркера
.uploading. - В случае успеха:
.uploadingудаляется. - On failure:
.errorfile is created with the error message.
Индикаторы состояния панели администратора:
| Показатель | Значение |
|---|---|
| Зеленый | успешно загружен |
| Желтый | текущая загрузка (менее 10 минут назад) |
| Красный | ошибка загрузки (наведите курсор на сообщение об ошибке) |
| Серый | не загружен |
Методы:
BackupService::checkRemoteConnection() // validate Dropbox token
BackupService::uploadRemote($path, $filename, $overwrite = true) // upload backup
BackupService::downloadRemote($path, $filename) // download backup
BackupService::deleteRemote($path) // delete remote backup
BackupService::getRemote() // list remote backups
Команды CLI¶
cron:резервные копии¶
Автоматическое задание cron для резервного копирования. Может быть задано принудительно с аргументом 1:
sudo -u xc_vm /home/xc_vm/console.php cron:backups
sudo -u xc_vm /home/xc_vm/console.php cron:backups 1 # force
миграция инструментов¶
Восстановите резервную копию в базе данных миграции для выборочного импорта:
база данных инструментов - подтвердите¶
Сброс в пустую базу данных (уничтожает все данные):
инструменты mysql¶
Повторная авторизация подсистем балансировки нагрузки на MySQL:
Конечная точка API¶
Действие: backup (требуется разрешение adv:database)
| Вспомогательное действие | Описание |
|---|---|
backup |
запуск немедленного резервного копирования (в фоновом режиме) |
delete |
удалить локальную резервную копию + копию из Dropbox |
restore |
восстановление базы данных из резервной копии |
Связанные файлы¶
| Файл | Цель |
|---|---|
src/Core/Backup/BackupService.php |
логика резервного копирования/восстановления |
src/Core/Storage/DropboxClient.php |
Клиент Dropbox API |
src/Cli/CronJobs/BackupsCronJob.php |
автоматизированный cron для резервного копирования |
src/Cli/Commands/ToolsCommand.php |
Инструменты миграции командной строки и базы данных |
src/Public/Views/admin/backups.php |
пользовательский интерфейс панели администратора |
src/Public/Views/admin/api.php |
Обработчик конечной точки API |
src/Public/Controllers/Admin/BackupsController.php |
административный контроллер |