Резервное копирование GTA-сервера: файлы, база данных и восстановление
Резервная копия GTA-сервера должна включать не только серверную сборку, но и базу данных, конфигурацию, игровые ресурсы, скрипты, журналы и файлы, необходимые для восстановления проекта. Копирование одной папки сервера не защищает аккаунты игроков, транспорт, имущество и другие данные, сохранённые в MySQL или MariaDB.
В этой инструкции рассмотрено ручное и автоматическое резервное копирование GTA-сервера на Windows и Linux. Вы узнаете, как создавать SQL-дампы, архивировать серверные файлы, запускать копирование по расписанию, хранить несколько поколений архивов и восстанавливать проект после повреждения диска, неудачного обновления или удаления данных.
Примеры подходят для CRMP, SA-MP, open.mp, FiveM, alt:V и других GTA-платформ. Названия каталогов, служб, серверных процессов и баз данных необходимо заменить на используемые в вашем проекте.
Создание и подключение базы данных:
Размещение сервера на Linux:
Запуск проекта на Windows:
Для чего нужны резервные копии GTA-сервера
Даже стабильно работающий проект может потерять данные из-за технической ошибки, неудачного обновления или действий администратора.
Резервная копия помогает восстановиться после
- повреждения файлового диска;
- удаления VPS;
- неудачного обновления игрового мода;
- ошибочной миграции базы;
- повреждения таблиц;
- удаления аккаунтов или имущества;
- вредоносного плагина;
- компрометации административного доступа;
- ошибки разработчика;
- сбоя операционной системы;
- повреждения конфигурации;
- блокировки или закрытия хостинга.
Снимок VPS не заменяет отдельную копию
Снимок удобен перед обновлением, но обычно хранится у того же провайдера. При потере аккаунта, удалении проекта или сбое площадки снимок может оказаться недоступным вместе с сервером.
Что необходимо копировать
Классический сервер CRMP, SA-MP или open.mp
- папка
gamemodes; - файлы AMX и PWN;
- папка
filterscripts; - папка
plugins; - папка
scriptfiles; - папка
pawnoи include-файлы; server.cfg;- серверное ядро;
- пользовательские конфигурации;
- необходимые библиотеки.
Сервер GTA 5
- игровые ресурсы;
- серверные скрипты;
- конфигурация запуска;
- манифесты ресурсов;
- файлы JavaScript, TypeScript, C# или Lua;
- пользовательские карты;
- веб-интерфейсы;
- файлы зависимостей;
- конфигурация голосового сервера;
- ключи, необходимые для запуска.
База данных
- структура таблиц;
- данные игроков;
- триггеры;
- представления;
- процедуры и функции, если используются;
- события базы данных;
- кодировка и сопоставления;
- миграции структуры.
Дополнительные данные
- конфигурация веб-сайта проекта;
- файлы панели управления;
- конфигурация Nginx или Apache;
- службы systemd;
- задания Планировщика Windows;
- Docker Compose;
- SSL-сертификаты при необходимости;
- настройки автоматического запуска;
- документация администратора.
Журналы можно хранить отдельно
Старые журналы способны занимать значительный объём. Для восстановления обычно достаточно последних журналов и файлов, необходимых для анализа сбоя.
Полные и инкрементальные резервные копии
Полная копия
Содержит все выбранные файлы проекта и полный дамп базы данных.
Преимущества
- простое восстановление;
- архив не зависит от предыдущих копий;
- легко перенести на другой VPS;
- удобно проверить содержимое;
- подходит перед обновлением проекта.
Недостатки
- занимает больше места;
- создаётся дольше;
- увеличивает нагрузку на диск;
- требует контроля свободного пространства.
Инкрементальная копия
Содержит только файлы или блоки, изменившиеся после предыдущего сохранения. Такой способ экономит место, но усложняет восстановление и требует сохранности цепочки копий.
Для небольшого GTA-сервера
Обычно проще создавать регулярный полный SQL-дамп и полный архив важных серверных файлов. Инкрементальные системы полезнее при большом размере ресурсов и длительном времени полного копирования.
Почему файлы сервера и база копируются отдельно
Папка GTA-сервера и база данных являются разными источниками данных.
Серверная папка содержит
- исполняемые файлы;
- игровые скрипты;
- конфигурацию;
- плагины;
- ресурсы;
- локальные файлы;
- журналы.
MySQL или MariaDB хранит данные отдельно
На Linux внутренние файлы базы обычно находятся в системном каталоге, например:
/var/lib/mysql/
Не копируйте работающий каталог MySQL обычным архиватором
Копирование внутренних файлов базы во время активной записи может создать несогласованную или непригодную для запуска копию.
Для стандартной резервной копии создайте SQL-дамп
Серверные файлы → архив
База данных → SQL-дамп
Архив + SQL-дамп → единая резервная копия
Логический дамп удобен для
- восстановления отдельных баз;
- переноса на другой сервер;
- проверки SQL-содержимого;
- миграции между совместимыми версиями;
- хранения в сжатом архиве.
Как создать согласованную резервную копию
Файлы и база должны относиться примерно к одному состоянию проекта.
Самый надёжный порядок
- Предупредите игроков о техническом сохранении.
- Запретите новые подключения.
- Выполните штатное сохранение данных.
- Корректно остановите GTA-сервер.
- Создайте дамп базы данных.
- Скопируйте серверные файлы.
- Проверьте дамп и архив.
- Запустите GTA-сервер.
- Перенесите копию во внешнее хранилище.
Копирование без остановки
Для круглосуточного проекта можно создать онлайн-дамп InnoDB и скопировать редко изменяющиеся серверные файлы без остановки. Однако база и файлы могут отражать немного разные моменты времени.
Перед крупным обновлением
Рекомендуется создать отдельную остановочную копию, которую нельзя автоматически удалить обычным правилом хранения.
Стратегия хранения резервных копий
Практическое правило 3-2-1
- не менее трёх экземпляров данных;
- копии минимум на двух независимых носителях или системах;
- минимум одна копия находится вне рабочего сервера.
Пример для GTA-проекта
1. Рабочий GTA VPS
2. Локальный архив на отдельном диске или хранилище
3. Внешняя копия на другом сервере или в облаке
Не синхронизируйте удаление бездумно
Если вредоносная программа или администратор удалит рабочие файлы, обычная зеркальная синхронизация может удалить их и в копии.
Для защиты от удаления используйте
- версионирование;
- неизменяемое хранилище;
- отдельный аккаунт резервного сервера;
- ограниченные права на удаление;
- несколько поколений архивов;
- офлайн-копию важных версий.
Как часто создавать резервные копии
Для тестового проекта
- один раз в сутки;
- перед изменением игрового мода;
- перед импортом новой базы;
- перед обновлением плагинов.
Для небольшого публичного сервера
- полная копия ежедневно;
- дополнительный дамп базы каждые несколько часов;
- отдельный архив перед обновлением;
- еженедельная копия во внешнее хранилище.
Для активного проекта
- частые дампы или специализированная система базы данных;
- ежедневный архив файлов;
- несколько удалённых поколений;
- контроль результатов каждого задания;
- регулярное тестовое восстановление.
Частота зависит от допустимой потери данных
Если копия создаётся раз в сутки, после сбоя можно потерять изменения, накопленные после последнего успешного запуска задания.
Подготовка резервного копирования на Linux
Создайте отдельный каталог
sudo mkdir -p /var/backups/gta-server
sudo chmod 700 /var/backups/gta-server
Проверьте свободное место
df -h /var/backups/gta-server
Проверьте размер серверной папки
sudo du -sh /opt/gta-server
Проверьте размер базы
mysql -u root -p -e "
SELECT
table_schema AS database_name,
ROUND(
SUM(data_length + index_length) / 1024 / 1024,
2
) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'gta_server'
GROUP BY table_schema;
"
Не записывайте архив внутрь серверной папки
Иначе следующий архив может включить предыдущие резервные копии и начать быстро увеличиваться в размере.
Нежелательный путь
/opt/gta-server/backups/
Предпочтительный путь
/var/backups/gta-server/
Для внешнего диска
/mnt/backup-storage/gta-server/
Установите необходимые инструменты
sudo apt update
sudo apt install tar gzip rsync -y
Создание резервной копии MySQL на Linux
Полный дамп базы GTA-сервера
mysqldump \
-u root \
-p \
--single-transaction \
--routines \
--triggers \
--events \
--databases gta_server \
> /var/backups/gta-server/gta_server.sql
Сжатый дамп
mysqldump \
-u root \
-p \
--single-transaction \
--routines \
--triggers \
--events \
--databases gta_server |
gzip \
> /var/backups/gta-server/gta_server.sql.gz
Параметры команды
--single-transaction— согласованный логический дамп таблиц InnoDB;--routines— добавление процедур и функций;--triggers— добавление триггеров;--events— добавление событий планировщика базы;--databases— добавление команд создания и выбора базы.
Проверка обычного SQL-файла
test -s /var/backups/gta-server/gta_server.sql
Просмотр первых строк
head -n 30 /var/backups/gta-server/gta_server.sql
Проверка сжатого файла
gzip -t /var/backups/gta-server/gta_server.sql.gz
Не указывайте пароль в командной строке
Команда вида:
mysqldump -u root -pМОЙ_ПАРОЛЬ gta_server
может раскрыть пароль через историю команд или список процессов.
Создание резервной копии MariaDB
Обычный SQL-дамп
mariadb-dump \
-u root \
-p \
--single-transaction \
--routines \
--triggers \
--events \
--databases gta_server \
> /var/backups/gta-server/gta_server.sql
Сжатый дамп
mariadb-dump \
-u root \
-p \
--single-transaction \
--routines \
--triggers \
--events \
--databases gta_server |
gzip \
> /var/backups/gta-server/gta_server.sql.gz
Проверка архива
gzip -t /var/backups/gta-server/gta_server.sql.gz
Команда mysqldump в MariaDB
В некоторых установках имя mysqldump остаётся совместимым псевдонимом. Для новых версий и автоматических сценариев лучше явно использовать:
mariadb-dump
Логический дамп не включает конфигурацию сервера базы
Отдельно сохраните:
- конфигурационные файлы MySQL или MariaDB;
- список пользователей и прав;
- информацию о версии базы;
- настройки firewall;
- файлы автоматических заданий.
Архивирование файлов GTA-сервера на Linux
Создание архива tar.gz
sudo tar \
-czf /var/backups/gta-server/gta_files.tar.gz \
-C /opt \
gta-server
Ключи команды
-c— создать архив;-z— использовать gzip;-f— указать имя архива;-C— перейти в указанный каталог перед упаковкой.
Исключение ненужных журналов
sudo tar \
-czf /var/backups/gta-server/gta_files.tar.gz \
--exclude='gta-server/logs/*.log' \
--exclude='gta-server/cache/*' \
--exclude='gta-server/backups/*' \
-C /opt \
gta-server
Просмотр содержимого без распаковки
tar -tzf /var/backups/gta-server/gta_files.tar.gz |
head -n 50
Проверка чтения всего архива
tar -tzf /var/backups/gta-server/gta_files.tar.gz \
> /dev/null
Архив с датой и временем
sudo tar \
-czf "/var/backups/gta-server/gta_files_$(date +%Y-%m-%d_%H-%M-%S).tar.gz" \
-C /opt \
gta-server
Полная ручная резервная копия на Linux
Остановите игровой сервер
sudo systemctl stop gta-server.service
Проверьте остановку
sudo systemctl is-active gta-server.service
Создайте рабочий каталог
STAMP="$(date +%Y-%m-%d_%H-%M-%S)"
WORK="/tmp/gta-backup-$STAMP"
sudo mkdir -p "$WORK/server-files"
Создайте SQL-дамп
sudo mysqldump \
-u root \
--single-transaction \
--routines \
--triggers \
--events \
--databases gta_server \
> "$WORK/database.sql"
При использовании MariaDB замените mysqldump на mariadb-dump.
Скопируйте серверные файлы
sudo rsync \
-a \
--exclude='logs/*.log' \
--exclude='cache/*' \
--exclude='backups/*' \
/opt/gta-server/ \
"$WORK/server-files/"
Создайте единый архив
sudo tar \
-czf "/var/backups/gta-server/gta_backup_$STAMP.tar.gz" \
-C "$WORK" \
.
Проверьте архив
sudo tar \
-tzf "/var/backups/gta-server/gta_backup_$STAMP.tar.gz" \
> /dev/null
Создайте контрольную сумму
cd /var/backups/gta-server
sudo sha256sum \
"gta_backup_$STAMP.tar.gz" \
> "gta_backup_$STAMP.tar.gz.sha256"
Удалите временные файлы
sudo rm -rf "$WORK"
Запустите GTA-сервер
sudo systemctl start gta-server.service
Проверьте запуск
sudo systemctl status gta-server.service
Автоматический скрипт резервного копирования Linux
Создайте защищённый файл подключения к базе
sudo nano /root/.gta-backup.cnf
Содержимое
[client]
user=gta_backup
password=ЗАМЕНИТЕ_НА_СЛОЖНЫЙ_ПАРОЛЬ
host=127.0.0.1
port=3306
Ограничьте права
sudo chmod 600 /root/.gta-backup.cnf
Создайте скрипт
sudo nano /usr/local/sbin/backup-gta-server.sh
Готовый пример
#!/usr/bin/env bash
set -Eeuo pipefail
SERVER_SERVICE="gta-server.service"
SERVER_DIR="/opt/gta-server"
BACKUP_DIR="/var/backups/gta-server"
DATABASE_NAME="gta_server"
DATABASE_CONFIG="/root/.gta-backup.cnf"
# Для MariaDB замените на /usr/bin/mariadb-dump
DUMP_PROGRAM="/usr/bin/mysqldump"
RETENTION_DAYS=14
STAMP="$(date +%Y-%m-%d_%H-%M-%S)"
WORK_DIR="$(mktemp -d)"
ARCHIVE="$BACKUP_DIR/gta_backup_$STAMP.tar.gz"
TEMP_ARCHIVE="$ARCHIVE.tmp"
SERVER_WAS_RUNNING=0
mkdir -p "$BACKUP_DIR"
chmod 700 "$BACKUP_DIR"
exec 9>/run/lock/gta-server-backup.lock
if ! flock -n 9; then
echo "Другая резервная копия уже выполняется"
exit 1
fi
cleanup() {
rm -rf "$WORK_DIR"
rm -f "$TEMP_ARCHIVE"
if [[ "$SERVER_WAS_RUNNING" -eq 1 ]]; then
systemctl start "$SERVER_SERVICE" || true
fi
}
trap cleanup EXIT
mkdir -p "$WORK_DIR/server-files"
if systemctl is-active --quiet "$SERVER_SERVICE"; then
SERVER_WAS_RUNNING=1
systemctl stop "$SERVER_SERVICE"
fi
if systemctl is-active --quiet "$SERVER_SERVICE"; then
echo "Не удалось остановить GTA-сервер"
exit 1
fi
"$DUMP_PROGRAM" \
--defaults-extra-file="$DATABASE_CONFIG" \
--single-transaction \
--routines \
--triggers \
--events \
--databases "$DATABASE_NAME" \
> "$WORK_DIR/database.sql"
if [[ ! -s "$WORK_DIR/database.sql" ]]; then
echo "SQL-дамп не создан или имеет нулевой размер"
exit 1
fi
rsync \
-a \
--exclude='logs/*.log' \
--exclude='cache/*' \
--exclude='backups/*' \
"$SERVER_DIR/" \
"$WORK_DIR/server-files/"
tar \
-czf "$TEMP_ARCHIVE" \
-C "$WORK_DIR" \
.
tar -tzf "$TEMP_ARCHIVE" > /dev/null
mv "$TEMP_ARCHIVE" "$ARCHIVE"
sha256sum "$ARCHIVE" \
> "$ARCHIVE.sha256"
find "$BACKUP_DIR" \
-type f \
-name 'gta_backup_*.tar.gz' \
-mtime +"$RETENTION_DAYS" \
-delete
find "$BACKUP_DIR" \
-type f \
-name 'gta_backup_*.tar.gz.sha256' \
-mtime +"$RETENTION_DAYS" \
-delete
echo "Резервная копия создана: $ARCHIVE"
Разрешите выполнение
sudo chmod 700 /usr/local/sbin/backup-gta-server.sh
Запустите вручную
sudo /usr/local/sbin/backup-gta-server.sh
Проверьте результат
sudo ls -lh /var/backups/gta-server
Важная особенность скрипта
Даже при ошибке временный каталог удаляется, а ранее работавший GTA-сервер запускается повторно через обработчик trap.
Автоматический запуск резервной копии через systemd timer
Создайте службу
sudo nano /etc/systemd/system/gta-backup.service
Содержимое службы
[Unit]
Description=Backup GTA server files and database
After=network.target mysql.service mariadb.service
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup-gta-server.sh
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
Создайте таймер
sudo nano /etc/systemd/system/gta-backup.timer
Ежедневный запуск в 04:30
[Unit]
Description=Daily GTA server backup
[Timer]
OnCalendar=*-*-* 04:30:00
Persistent=true
RandomizedDelaySec=5m
[Install]
WantedBy=timers.target
Примените конфигурацию
sudo systemctl daemon-reload
Включите таймер
sudo systemctl enable --now gta-backup.timer
Проверьте расписание
systemctl list-timers gta-backup.timer
Запустите копирование вручную
sudo systemctl start gta-backup.service
Проверьте результат задания
sudo systemctl status gta-backup.service
Просмотрите журнал
sudo journalctl \
-u gta-backup.service \
-n 100 \
--no-pager
Значение Persistent
Если VPS был выключен во время планового запуска, systemd сможет выполнить пропущенное задание после следующего включения системы.
Автоматическое копирование через cron
Откройте расписание root
sudo crontab -e
Ежедневный запуск в 04:30
30 4 * * * /usr/local/sbin/backup-gta-server.sh >> /var/log/gta-backup.log 2>&1
Проверьте службу cron
sudo systemctl status cron
Проверьте журнал скрипта
sudo tail -n 100 /var/log/gta-backup.log
Не используйте относительные пути
Среда cron содержит ограниченный PATH. В автоматическом скрипте лучше использовать полные пути к важным программам.
Не запускайте одновременно cron и systemd timer
Выберите один механизм расписания. В скрипте предусмотрена блокировка flock, но два независимых расписания всё равно создают лишнюю нагрузку и путаницу.
Подготовка резервного копирования на Windows
Пример структуры
C:\GTA-Server\
C:\GTA-Backup\
D:\GTA-Backups\
Назначение каталогов
C:\GTA-Server— рабочая серверная сборка;C:\GTA-Backup— скрипт и закрытая конфигурация базы;D:\GTA-Backups— готовые архивы.
Проверьте диски
Get-Volume |
Select-Object `
DriveLetter,
FileSystemLabel,
SizeRemaining,
Size
Не храните архив внутри рабочей папки
Неправильно:
C:\GTA-Server\Backups\
Следующая полная копия может включить предыдущие архивы.
Используйте отдельный диск или сетевое хранилище
D:\GTA-Backups\
\\BACKUP-SERVER\GTA-Backups\
Создание SQL-дампа на Windows
Пример пути MySQL
C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqldump.exe
Пример пути MariaDB
C:\Program Files\MariaDB 11.4\bin\mariadb-dump.exe
Фактическая версия и каталог могут отличаться.
Создайте файл подключения
C:\GTA-Backup\mysql-backup.cnf
Содержимое
[client]
user=gta_backup
password=ЗАМЕНИТЕ_НА_СЛОЖНЫЙ_ПАРОЛЬ
host=127.0.0.1
port=3306
Ограничьте доступ к файлу
Откройте свойства файла, перейдите в раздел безопасности и оставьте чтение только системной учётной записи и техническому администратору.
Команда MySQL
"C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqldump.exe" ^
--defaults-extra-file="C:\GTA-Backup\mysql-backup.cnf" ^
--single-transaction ^
--routines ^
--triggers ^
--events ^
--databases gta_server ^
> "D:\GTA-Backups\gta_server.sql"
Команда MariaDB
"C:\Program Files\MariaDB 11.4\bin\mariadb-dump.exe" ^
--defaults-extra-file="C:\GTA-Backup\mysql-backup.cnf" ^
--single-transaction ^
--routines ^
--triggers ^
--events ^
--databases gta_server ^
> "D:\GTA-Backups\gta_server.sql"
Проверьте размер
Get-Item `
"D:\GTA-Backups\gta_server.sql" |
Select-Object `
Name,
Length,
LastWriteTime
Копирование файлов GTA-сервера через Robocopy
Копирование всей серверной папки
robocopy ^
"C:\GTA-Server" ^
"D:\GTA-Backups\Current\server-files" ^
/E ^
/COPY:DAT ^
/DCOPY:DAT ^
/R:2 ^
/W:3 ^
/MT:8 ^
/LOG:"D:\GTA-Backups\robocopy.log"
Исключение временных каталогов
robocopy ^
"C:\GTA-Server" ^
"D:\GTA-Backups\Current\server-files" ^
/E ^
/COPY:DAT ^
/DCOPY:DAT ^
/R:2 ^
/W:3 ^
/MT:8 ^
/XD ^
"C:\GTA-Server\cache" ^
"C:\GTA-Server\backups" ^
/XF ^
"*.log" ^
/LOG:"D:\GTA-Backups\robocopy.log"
Не используйте /MIR без понимания последствий
Параметр /MIR может удалить в каталоге назначения файлы, которых больше нет в источнике. Для резервного архива безопаснее создавать новый каталог с датой.
Коды завершения Robocopy
Robocopy использует особую систему результатов. Значения ниже 8 могут означать успешное копирование с дополнительной информацией, а значение 8 и выше указывает на ошибку копирования.
Создание архива GTA-сервера на Windows
Архивирование через встроенную команду tar
tar.exe ^
-czf "D:\GTA-Backups\gta_backup.tar.gz" ^
-C "D:\GTA-Backups\Current" ^
.
Просмотр содержимого
tar.exe ^
-tzf "D:\GTA-Backups\gta_backup.tar.gz"
Архив ZIP через PowerShell
Compress-Archive `
-Path "D:\GTA-Backups\Current\*" `
-DestinationPath "D:\GTA-Backups\gta_backup.zip" `
-CompressionLevel Optimal `
-Force
Ограничения Compress-Archive
- скрытые файлы и каталоги могут быть пропущены;
- используемый API имеет ограничение размера отдельного файла;
- большие серверные сборки удобнее архивировать через tar или специализированный архиватор.
Для полной серверной папки
Встроенный tar.exe обычно удобнее, поскольку сохраняет структуру каталога и позволяет проверить список файлов без распаковки.
Автоматический PowerShell-скрипт резервного копирования
Создайте файл
C:\GTA-Backup\backup-gta-server.ps1
Готовый пример
$ErrorActionPreference = "Stop"
$ServerTask = "GTA Server"
$ServerDirectory = "C:\GTA-Server"
$BackupDirectory = "D:\GTA-Backups"
$DatabaseName = "gta_server"
$DumpProgram = `
"C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqldump.exe"
# Для MariaDB укажите mariadb-dump.exe
$DatabaseConfig = "C:\GTA-Backup\mysql-backup.cnf"
$RetentionDays = 14
$Stamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$WorkDirectory = Join-Path `
$env:TEMP `
"gta-backup-$Stamp"
$FilesDirectory = Join-Path `
$WorkDirectory `
"server-files"
$DumpFile = Join-Path `
$WorkDirectory `
"database.sql"
$Archive = Join-Path `
$BackupDirectory `
"gta_backup_$Stamp.tar.gz"
$ChecksumFile = "$Archive.sha256"
$ServerWasRunning = $false
try {
New-Item `
-ItemType Directory `
-Path $BackupDirectory `
-Force |
Out-Null
New-Item `
-ItemType Directory `
-Path $FilesDirectory `
-Force |
Out-Null
$Task = Get-ScheduledTask `
-TaskName $ServerTask `
-ErrorAction SilentlyContinue
if (
$null -ne $Task -and
$Task.State -eq "Running"
) {
Stop-ScheduledTask `
-TaskName $ServerTask
$ServerWasRunning = $true
Start-Sleep -Seconds 5
}
$DumpCommand = (
'"{0}" ' +
'--defaults-extra-file="{1}" ' +
'--single-transaction ' +
'--routines ' +
'--triggers ' +
'--events ' +
'--databases "{2}" ' +
'> "{3}"'
) -f `
$DumpProgram,
$DatabaseConfig,
$DatabaseName,
$DumpFile
& cmd.exe `
/d `
/s `
/c `
$DumpCommand
if ($LASTEXITCODE -ne 0) {
throw "Не удалось создать SQL-дамп"
}
if (
-not (Test-Path $DumpFile) -or
(Get-Item $DumpFile).Length -eq 0
) {
throw "SQL-дамп отсутствует или имеет нулевой размер"
}
& robocopy `
$ServerDirectory `
$FilesDirectory `
/E `
/COPY:DAT `
/DCOPY:DAT `
/R:2 `
/W:3 `
/MT:8 `
/XD `
"$ServerDirectory\cache" `
"$ServerDirectory\backups" `
/XF `
"*.log"
$RobocopyCode = $LASTEXITCODE
if ($RobocopyCode -ge 8) {
throw "Robocopy завершился с кодом $RobocopyCode"
}
& tar.exe `
-czf `
$Archive `
-C `
$WorkDirectory `
.
if ($LASTEXITCODE -ne 0) {
throw "Не удалось создать архив"
}
& tar.exe `
-tzf `
$Archive |
Out-Null
if ($LASTEXITCODE -ne 0) {
throw "Созданный архив не прошёл проверку"
}
$Hash = Get-FileHash `
-Path $Archive `
-Algorithm SHA256
$HashLine = (
"{0} *{1}" -f `
$Hash.Hash.ToLower(),
[System.IO.Path]::GetFileName($Archive)
)
Set-Content `
-Path $ChecksumFile `
-Value $HashLine `
-Encoding ASCII
$Limit = (Get-Date).AddDays(
-$RetentionDays
)
Get-ChildItem `
-Path $BackupDirectory `
-File |
Where-Object {
$_.Name -like "gta_backup_*" -and
$_.LastWriteTime -lt $Limit
} |
Remove-Item `
-Force
Write-Output "Создан архив: $Archive"
}
finally {
if (
$ServerWasRunning -and
$null -ne (
Get-ScheduledTask `
-TaskName $ServerTask `
-ErrorAction SilentlyContinue
)
) {
Start-ScheduledTask `
-TaskName $ServerTask
}
if (Test-Path $WorkDirectory) {
Remove-Item `
-Path $WorkDirectory `
-Recurse `
-Force
}
}
Что необходимо изменить
- имя задачи GTA-сервера;
- путь к рабочей папке;
- путь к хранилищу;
- путь к mysqldump или mariadb-dump;
- имя базы;
- срок хранения;
- исключаемые каталоги.
Если сервер запускается не через Планировщик
Замените команды Stop-ScheduledTask и Start-ScheduledTask на штатный способ управления вашим серверным процессом или службой.
Первый запуск выполните вручную
PowerShell.exe `
-NoProfile `
-File "C:\GTA-Backup\backup-gta-server.ps1"
Проверьте
- создан ли SQL-файл внутри архива;
- присутствуют ли серверные файлы;
- создана ли контрольная сумма;
- запустился ли GTA-сервер после копирования;
- нет ли ошибок PowerShell;
- не заполняется ли диск.
Запуск копирования через Планировщик заданий Windows
Откройте Планировщик
Win + R
taskschd.msc
Создайте задачу
- Нажмите «Создать задачу».
- Введите имя
GTA Server Backup. - Выберите запуск независимо от входа пользователя.
- Включите выполнение с наивысшими правами.
- Создайте ежедневный триггер.
- Укажите время с минимальным количеством игроков.
- Добавьте действие запуска PowerShell.
- Укажите путь к резервному скрипту.
Программа
PowerShell.exe
Аргументы
-NoProfile -File "C:\GTA-Backup\backup-gta-server.ps1"
Рабочая папка
C:\GTA-Backup
Полезные настройки
- запускать как можно скорее после пропущенного запуска;
- не запускать второй экземпляр одновременно;
- останавливать зависшую задачу через разумный срок;
- разрешить ручной запуск;
- перезапустить задачу после временной ошибки;
- не останавливать задачу только из-за отсутствия входа пользователя.
Ручной запуск
Start-ScheduledTask `
-TaskName "GTA Server Backup"
Проверка результата
Get-ScheduledTaskInfo `
-TaskName "GTA Server Backup"
Проверка самой задачи
Get-ScheduledTask `
-TaskName "GTA Server Backup"
Проверка целостности резервной копии
Наличие файла с правильным названием ещё не означает, что резервная копия пригодна для восстановления.
Проверьте размер
Linux:
ls -lh /var/backups/gta-server
Windows:
Get-ChildItem `
"D:\GTA-Backups" |
Select-Object `
Name,
Length,
LastWriteTime
Проверьте структуру архива
Linux:
tar -tzf gta_backup.tar.gz |
head -n 100
Windows:
tar.exe -tzf gta_backup.tar.gz
Проверьте наличие базы
tar -tzf gta_backup.tar.gz |
grep 'database.sql'
Проверьте контрольную сумму Linux
sha256sum \
-c gta_backup.tar.gz.sha256
Проверьте контрольную сумму Windows
Get-FileHash `
"D:\GTA-Backups\gta_backup.tar.gz" `
-Algorithm SHA256
Проверьте SQL-файл
- он имеет ненулевой размер;
- содержит команды создания таблиц;
- содержит данные;
- не оборван посередине;
- соответствует нужной базе;
- создан в ожидаемое время.
Самая надёжная проверка
Распакуйте архив в отдельную папку, импортируйте SQL в тестовую базу и запустите копию сервера на другом порту.
Автоматическое удаление старых резервных копий
Без ограничения срока хранения архивы могут заполнить диск и остановить GTA-сервер или базу данных.
Удаление Linux-копий старше 14 дней
find /var/backups/gta-server \
-type f \
-name 'gta_backup_*.tar.gz' \
-mtime +14 \
-delete
Удаление контрольных сумм
find /var/backups/gta-server \
-type f \
-name 'gta_backup_*.tar.gz.sha256' \
-mtime +14 \
-delete
Удаление Windows-копий старше 14 дней
$Limit = (Get-Date).AddDays(-14)
Get-ChildItem `
"D:\GTA-Backups" `
-File |
Where-Object {
$_.Name -like "gta_backup_*" -and
$_.LastWriteTime -lt $Limit
} |
Remove-Item -Force
Пример многоуровневого хранения
- 14 ежедневных архивов;
- 8 еженедельных архивов;
- 12 ежемесячных архивов;
- несколько архивов перед крупными обновлениями;
- одна долгосрочная копия стабильной версии.
Не удаляйте аварийную копию автоматически
Архив перед обновлением можно поместить в отдельный каталог:
/var/backups/gta-server/manual/
D:\GTA-Backups\Manual\
Хранение резервной копии на другом сервере
После создания локального архива скопируйте его на отдельную площадку.
Передача через SCP
scp \
/var/backups/gta-server/gta_backup_2026-07-31_04-30-00.tar.gz \
backup@BACKUP_SERVER:/srv/backups/gta-server/
Передача контрольной суммы
scp \
/var/backups/gta-server/gta_backup_2026-07-31_04-30-00.tar.gz.sha256 \
backup@BACKUP_SERVER:/srv/backups/gta-server/
Синхронизация через rsync
rsync \
-av \
--partial \
/var/backups/gta-server/ \
backup@BACKUP_SERVER:/srv/backups/gta-server/
Не добавляйте --delete без необходимости
Параметр удаления способен удалить на резервном сервере архивы, отсутствующие в локальном каталоге. Это может уничтожить старые поколения копий.
Используйте отдельного пользователя
- без административных прав;
- с доступом только к резервному каталогу;
- с отдельным SSH-ключом;
- без доступа к рабочему GTA-серверу;
- с ограничением команд при необходимости.
Резервный сервер не должен доверять рабочему полностью
Если рабочий VPS будет взломан, злоумышленник не должен получить возможность удалить всю историю удалённых копий.
Варианты внешнего хранения
- второй VPS другого провайдера;
- объектное облачное хранилище;
- сетевое хранилище;
- домашний компьютер владельца;
- внешний накопитель;
- защищённое хранилище с версионированием.
Защита резервных копий GTA-сервера
Архив может содержать пароли базы, RCON-ключи, конфигурацию API, персональные данные игроков и закрытый исходный код.
Ограничьте права Linux
sudo chown -R root:root /var/backups/gta-server
sudo chmod 700 /var/backups/gta-server
Ограничьте доступ Windows
Разрешите чтение каталога только:
- учётной записи резервного задания;
- системе;
- владельцу проекта;
- техническому администратору.
Не размещайте архив в публичной папке сайта
Опасные расположения:
/var/www/html/backups/
C:\WebSite\public\backups\
Не отправляйте полный архив в общий чат
Для передачи разработчику подготовьте отдельную копию без:
- паролей;
- персональных данных;
- боевой базы;
- ключей API;
- RCON-пароля;
- конфигурации удалённого доступа.
Шифрование внешнего хранилища
Если архив передаётся через стороннюю площадку, используйте шифрование на стороне клиента или защищённое хранилище с управлением ключами.
Ключ шифрования храните отдельно
Если пароль или ключ находится только внутри того же VPS, после полного сбоя восстановить зашифрованный архив не получится.
Контроль выполнения автоматических копий
Проверяйте дату последнего архива
Linux:
find /var/backups/gta-server \
-maxdepth 1 \
-type f \
-name 'gta_backup_*.tar.gz' \
-printf '%TY-%Tm-%Td %TH:%TM %p\n' |
sort |
tail -n 5
Windows:
Get-ChildItem `
"D:\GTA-Backups" `
-Filter "gta_backup_*.tar.gz" |
Sort-Object LastWriteTime -Descending |
Select-Object -First 5 `
Name,
Length,
LastWriteTime
Контролируйте свободное место
Linux:
df -h /var/backups/gta-server
Windows:
Get-Volume -DriveLetter D |
Select-Object `
DriveLetter,
SizeRemaining,
Size
Проверяйте результат systemd
systemctl status gta-backup.service
Проверяйте Планировщик Windows
Get-ScheduledTaskInfo `
-TaskName "GTA Server Backup"
Сигналы проблемы
- новый архив давно не создавался;
- файл имеет нулевой размер;
- размер резко уменьшился;
- размер резко вырос;
- SQL-файл отсутствует;
- контрольная сумма не совпадает;
- GTA-сервер не запустился после копирования;
- заканчивается место;
- удалённая передача не выполняется.
Не полагайтесь только на сообщение «задача запущена»
Необходимо проверять код завершения, размер архива, содержимое и возможность тестового восстановления.
Восстановление файлов GTA-сервера на Linux
Остановите GTA-сервер
sudo systemctl stop gta-server.service
Проверьте контрольную сумму
cd /var/backups/gta-server
sha256sum \
-c gta_backup_2026-07-31_04-30-00.tar.gz.sha256
Создайте временный каталог
sudo mkdir -p /srv/gta-restore-test
Распакуйте архив
sudo tar \
-xzf gta_backup_2026-07-31_04-30-00.tar.gz \
-C /srv/gta-restore-test
Проверьте структуру
find /srv/gta-restore-test \
-maxdepth 3 \
-type f |
head -n 100
Сохраните повреждённую папку
sudo mv \
/opt/gta-server \
"/opt/gta-server-broken-$(date +%Y-%m-%d_%H-%M-%S)"
Перенесите восстановленные файлы
sudo mkdir -p /opt/gta-server
sudo rsync \
-a \
/srv/gta-restore-test/server-files/ \
/opt/gta-server/
Восстановите владельца
sudo chown -R gta:gta /opt/gta-server
Восстановите разрешения запуска
sudo chmod +x /opt/gta-server/server
Имя файла замените на фактическое.
Восстановление файлов GTA-сервера на Windows
Остановите задачу сервера
Stop-ScheduledTask `
-TaskName "GTA Server"
Создайте временную папку
New-Item `
-ItemType Directory `
-Path "C:\GTA-Restore-Test" `
-Force
Проверьте содержимое архива
tar.exe `
-tzf "D:\GTA-Backups\gta_backup.tar.gz"
Распакуйте архив
tar.exe `
-xzf "D:\GTA-Backups\gta_backup.tar.gz" `
-C "C:\GTA-Restore-Test"
Переименуйте повреждённую папку
Rename-Item `
"C:\GTA-Server" `
"GTA-Server-Broken"
Восстановите серверные файлы
robocopy `
"C:\GTA-Restore-Test\server-files" `
"C:\GTA-Server" `
/E `
/COPY:DAT `
/DCOPY:DAT `
/R:2 `
/W:3
Не удаляйте повреждённую папку сразу
Она может содержать более новые журналы, конфигурацию или данные, которых ещё нет в резервной копии.
Восстановление базы данных GTA-сервера
Перед восстановлением
- Остановите игровой сервер.
- Сделайте аварийный дамп текущей базы.
- Проверьте дату резервного SQL-файла.
- Убедитесь, что выбрана правильная база.
- Сначала протестируйте импорт отдельно.
Извлеките SQL-файл Linux
tar \
-xzf gta_backup.tar.gz \
-C /srv/gta-restore-test \
./database.sql
Восстановление MySQL
mysql \
-u root \
-p \
< /srv/gta-restore-test/database.sql
Восстановление MariaDB
mariadb \
-u root \
-p \
< /srv/gta-restore-test/database.sql
Если дамп не содержит CREATE DATABASE
CREATE DATABASE gta_server
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Затем:
mysql \
-u root \
-p \
gta_server \
< database.sql
Восстановление на Windows
"C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" ^
-u root ^
-p ^
< "C:\GTA-Restore-Test\database.sql"
После импорта проверьте
USE gta_server;
SHOW TABLES;
Проверьте важные таблицы
SELECT COUNT(*) FROM accounts;
SELECT COUNT(*) FROM vehicles;
SELECT COUNT(*) FROM houses;
Названия таблиц замените на фактические.
Восстановление GTA-сервера после полного сбоя
Если старый VPS недоступен, проект необходимо развернуть на новой системе.
Рекомендуемый порядок
- Арендуйте новый VPS.
- Установите совместимую операционную систему.
- Установите системные обновления.
- Установите MySQL или MariaDB нужной версии.
- Установите зависимости GTA-сервера.
- Создайте технического пользователя.
- Передайте резервный архив.
- Проверьте контрольную сумму.
- Распакуйте серверные файлы.
- Восстановите базу данных.
- Восстановите пользователей и права базы.
- Измените IP и сетевую конфигурацию.
- Откройте игровой порт.
- Запустите сервер в закрытом режиме.
- Проверьте данные игроков.
- Только затем откройте доступ пользователям.
Сохраните информацию о версиях
В резервный архив полезно добавить файл:
RESTORE-INSTRUCTIONS.txt
В нём укажите
- версию операционной системы;
- версию MySQL или MariaDB;
- версию серверного ядра;
- список системных пакетов;
- путь к серверной папке;
- имя службы;
- игровой порт;
- имя базы;
- порядок запуска;
- способ восстановления.
Список пакетов Ubuntu
dpkg-query \
-W \
-f='${binary:Package}\t${Version}\n' \
> installed-packages.txt
Версия базы
mysql --version
Для MariaDB:
mariadb --version
Тестовое восстановление резервной копии
Резервная копия считается проверенной только после успешного восстановления.
Тестовый процесс
- Создайте отдельный каталог.
- Распакуйте архив.
- Создайте тестовую базу.
- Импортируйте SQL-дамп.
- Измените параметры подключения.
- Назначьте другой игровой порт.
- Запустите тестовую копию.
- Проверьте вход игрока.
- Проверьте загрузку персонажа.
- Проверьте сохранение данных.
Тестовая база
CREATE DATABASE gta_restore_test
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Импорт
mysql \
-u root \
-p \
gta_restore_test \
< database.sql
Тестовый порт
port 7779
Не подключайте тестовую сборку к рабочей базе
Она может изменить аккаунты, имущество и другие данные настоящих игроков.
Проводите проверку регулярно
- после изменения скрипта копирования;
- после обновления базы;
- после изменения структуры проекта;
- после переноса хранилища;
- перед крупным обновлением;
- не реже нескольких раз в год.
Распространённые ошибки резервного копирования
Архив содержит файлы, но не содержит базу
SQL-дамп не был создан либо находился вне архивируемого каталога. Проверьте наличие файла database.sql внутри архива.
SQL-файл имеет размер 0 байт
- неверный пароль;
- нет прав на базу;
- ошибка имени базы;
- mysqldump не найден;
- неправильный путь;
- перенаправление вывода создало пустой файл до завершения команды.
Архив создаётся внутри рабочей папки
Каждая следующая копия включает предыдущую, поэтому размер начинает быстро расти.
Диск заполнился архивами
- не настроен срок хранения;
- старые копии не удаляются;
- журналы включены без ограничения;
- архив включает другие архивы;
- временные каталоги не очищаются.
Копирование /var/lib/mysql во время работы
Обычный архив внутренних файлов работающей базы может быть несогласованным. Используйте логический дамп или специализированный механизм физической резервной копии.
Сервер не запустился после копирования
- скрипт завершился до команды запуска;
- не предусмотрен обработчик ошибки;
- изменились права файлов;
- процесс уже запущен другим способом;
- служба systemd содержит ошибку;
- Планировщик Windows не смог запустить задачу.
Облачная синхронизация удалила старые версии
Зеркальная синхронизация повторила удаление рабочего каталога. Для резервных копий нужны поколения, история версий или неизменяемое хранение.
Архив невозможно распаковать
- закончился диск во время создания;
- передача файла оборвалась;
- архив был изменён;
- резервный процесс завершили принудительно;
- накопитель повреждён;
- контрольная сумма не проверялась.
Восстановление выполнено поверх работающего сервера
Процесс продолжал записывать данные одновременно с заменой файлов и таблиц. Это может привести к смешанному состоянию и дополнительному повреждению.
Пароль базы записан в открытом скрипте
Используйте отдельный защищённый конфигурационный файл и ограничьте права чтения.
Контрольный список резервного копирования GTA-сервера
Содержимое копии
- серверное ядро включено;
- игровой мод включён;
- плагины включены;
- ресурсы включены;
- конфигурация включена;
- SQL-дамп включён;
- службы запуска сохранены;
- инструкция восстановления сохранена.
База данных
- используется mysqldump или mariadb-dump;
- дамп имеет ненулевой размер;
- добавлены триггеры;
- добавлены процедуры при необходимости;
- добавлены события при необходимости;
- дамп соответствует нужной базе;
- пароль не указан в открытой команде.
Файлы
- сервер корректно остановлен или используется безопасный онлайн-режим;
- архив не создаётся внутри рабочей папки;
- исключены ненужные кэши;
- важные скрытые файлы не пропущены;
- права и структура сохранены;
- архив читается полностью.
Автоматизация
- скрипт проверен вручную;
- задание работает без входа администратора;
- исключён параллельный запуск;
- ошибка дампа останавливает скрипт;
- нулевой SQL-файл определяется;
- сервер запускается после ошибки;
- журнал задания сохраняется.
Хранение
- есть локальная копия;
- есть внешняя копия;
- хранятся несколько поколений;
- настроен срок хранения;
- контролируется свободное место;
- доступ к архивам ограничен;
- важные версии защищены от удаления.
Восстановление
- контрольная сумма проверена;
- архив тестово распакован;
- SQL импортирован в тестовую базу;
- сервер запущен на тестовом порту;
- аккаунты загружаются;
- данные сохраняются;
- порядок полного восстановления задокументирован.
Частые вопросы о резервных копиях GTA-сервера
Достаточно ли скопировать папку GTA-сервера?
Нет, если проект использует MySQL или MariaDB. Базу необходимо отдельно сохранить через SQL-дамп.
Можно ли архивировать сервер без остановки?
Можно, если файлы во время копирования не изменяются, а база сохраняется согласованным способом. Перед крупным обновлением безопаснее кратковременно остановить сервер.
Нужно ли останавливать MySQL?
Для обычного логического дампа через mysqldump или mariadb-dump останавливать службу базы не требуется.
Как часто делать резервные копии?
Для публичного сервера рекомендуется минимум ежедневная полная копия. Частоту дампов базы выбирают по допустимому объёму потери данных.
Где хранить архивы?
Минимум одна копия должна находиться вне рабочего VPS: на другом сервере, в облачном хранилище или на компьютере владельца.
Можно ли хранить копии в папке GTA-сервера?
Нежелательно. Архивы могут попасть в следующие копии и быстро заполнить диск.
Как проверить архив без восстановления?
Просмотрите список файлов, проверьте контрольную сумму и убедитесь, что внутри находится SQL-дамп. Полную проверку даёт только тестовое восстановление.
Что делать перед обновлением игрового мода?
Остановите сервер, создайте полный дамп базы и архив файлов, проверьте их и поместите в каталог, который не очищается обычной ротацией.
Как восстановить только один файл?
Распакуйте архив во временную папку и скопируйте нужный файл. Не извлекайте весь архив поверх рабочего сервера.
Как восстановить только одну таблицу?
Нужен отдельный дамп таблицы либо обработка полного SQL-файла. Перед изменением рабочей базы создайте её текущую копию и выполните операцию на тестовой базе.
Как защитить архив от удаления злоумышленником?
Храните удалённые версии под отдельной учётной записью, ограничьте права удаления и используйте версионирование или неизменяемое хранилище.
Достаточно ли автоматического задания?
Нет. Необходимо контролировать дату, размер, код завершения и периодически выполнять тестовое восстановление.
Итог
Надёжная резервная копия GTA-сервера состоит из двух основных частей: архива серверных файлов и отдельного дампа MySQL или MariaDB. Эти данные необходимо создавать согласованно, проверять и хранить в нескольких поколениях.
На Linux копирование можно автоматизировать через Bash и systemd timer, а на Windows — через PowerShell и Планировщик заданий. Скрипт должен определять ошибки, проверять размер SQL-файла, контролировать архив и повторно запускать игровой сервер.
Минимум одна актуальная копия должна находиться вне рабочего VPS. Локальный архив, снимок виртуальной машины или зеркальная синхронизация сами по себе не обеспечивают полноценную защиту.
Регулярно проводите тестовое восстановление в отдельную папку и базу данных. Только успешный импорт SQL, запуск тестовой сборки и сохранение игрового аккаунта подтверждают, что резервная копия действительно пригодна для восстановления проекта.
Комментарии к инструкции
Обсудите решение, задайте вопрос или дополните инструкцию