Files
XC_VM/docs/ru/administration/backup-strategy.md
T
Divarion_D d4da90f37b fix(docs): translate bold spans atomically and auto-prune orphaned ru pages
The line-by-line web translator reordered words inside `**bold**` spans and
misplaced/dropped the markers, producing `**LB` or `****` (empty bold). Mask
each `**...**` as ONE atomic sentinel: translate the inner text on its own,
then store the whole balanced `**inner**` — the engine never sees the markers
and cannot reorder or collapse them. Also harden the anthropic prompt to keep
emphasis balanced.

Auto-prune: after translating, delete generated docs/ru files whose docs/en
source no longer exists (renamed/removed) and drop now-empty dirs, so the tree
mirrors docs/en 1:1 (removes the stale development/modules.md and
guides/geoip-and-device-detection.md).

Bump PROMPT_VERSION to 6 to invalidate the contaminated cache and regenerate
docs/ru (0 broken bold spans remaining, aside from pre-existing multi-line
bold that spans a soft line break).
2026-08-27 18:07:43 +03:00

223 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Стратегия резервного копирования
XC_VM поддерживает автоматическое и ручное резервное копирование баз данных с помощью локального хранилища и дополнительной загрузки в Dropbox.
Управление резервными копиями осуществляется с помощью панели администратора, команд CLI и задания cron.
---
## Что сохраняется в резервной Копии
Резервные копии содержат полную структуру базы данных и данные, **кроме** следующие таблицы:
```text
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 будет запущено в принудительном режиме:
```bash
/home/xc_vm/console.php cron:backups 1
```
### Автоматический (cron)
Задание `cron:backups` проверяет расписание при каждом запуске:
|График|Интервал|
| --- | --- |
| `hourly` |3600 - е годы|
| `daily` |86400-е годы|
| `weekly` |604800-е годы|
| `monthly` |2419200 - е годы|
Запускается только на главном сервере (`is_main=1`). Используется блокировка на основе PID для предотвращения дублирования запусков.
### Процесс резервного копирования
1. Закройте соединение MySQL перед сбросом.
2. Запустите `mysqldump --no-data` (структура) + `mysqldump --ignore-table` (данные, исключая таблицы журнала).
3. Проверьте размер файла (пустые файлы удаляются).
4. Если включен Dropbox: загружайте с отслеживанием статуса.
5. Примените политику хранения (удалите самые старые файлы, превышающие установленный лимит).
### Расположение файла
```text
/home/xc_vm/backups/backup_YYYY-MM-DD_HH:MM:SS.sql
```
---
## Восстановление резервных копий
### Из панели администратора
Нажмите **Восстанавливать** на любой записи резервной копии. Требуется подтверждение.
Процесс:
1. Если существует локальный файл, используйте его. В противном случае загрузите из Dropbox в `/home/xc_vm/tmp/restore.sql`.
2. Удалите базу данных и создайте ее заново.
3. Импортируйте SQL-файл.
4. Повторно загрузите структуру после импорта.
```php
BackupService::restore($filename, $config)
```
> **Важный:** При восстановлении вся база данных удаляется и создается заново. Все данные, отсутствующие в резервной копии, будут потеряны.
### Из CLI
Для сценариев миграции с выборочным импортом таблиц:
```bash
sudo /home/xc_vm/console.php tools migration /path/to/backup.sql
```
При этом выполняется восстановление в базе данных `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` включен:
1. После создания локальной резервной копии загрузите ее в Dropbox.
2. Во время загрузки создается файл маркера `.uploading`.
3. В случае успеха: `.uploading` удаляется.
4. On failure: `.error` file is created with the error message.
Индикаторы состояния панели администратора:
|Показатель|Значение|
| --- | --- |
|Зеленый|успешно загружен|
|Желтый|текущая загрузка (менее 10 минут назад)|
|Красный|ошибка загрузки (наведите курсор на сообщение об ошибке)|
|Серый|не загружен|
Методы:
```php
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`:
```bash
sudo -u xc_vm /home/xc_vm/console.php cron:backups
sudo -u xc_vm /home/xc_vm/console.php cron:backups 1 # force
```
### миграция инструментов
Восстановите резервную копию в базе данных миграции для выборочного импорта:
```bash
sudo /home/xc_vm/console.php tools migration /path/to/backup.sql
```
### база данных инструментов - подтвердите
Сброс в пустую базу данных (уничтожает все данные):
```bash
sudo /home/xc_vm/console.php tools database --confirm
```
### инструменты mysql
Повторная авторизация подсистем балансировки нагрузки на MySQL:
```bash
sudo /home/xc_vm/console.php tools 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` |административный контроллер|