Miami RP Project СЕРВЕР MTA:SA ONLINE СЕРВЕР GTA 5 RAGE MP В РАЗРАБОТКЕ ЗАПУСК MTA RAGE MP: в разработке
Miami RP Project СЕРВЕР MTA:SA ONLINE СЕРВЕР GTA 5 RAGE MP В РАЗРАБОТКЕ ЗАПУСК MTA RAGE MP: в разработке

Резервное копирование GTA-сервера: файлы, база данных и восстановление

Вчера Обновлено: Вчера 0.0 (0)
Резервное копирование GTA-сервера: файлы, база данных и восстановление
Категория Резервное копирование сервера GTA Опубликовано Вчера Обновлено Вчера Просмотров 3

Резервная копия GTA-сервера должна включать не только серверную сборку, но и базу данных, конфигурацию, игровые ресурсы, скрипты, журналы и файлы, необходимые для восстановления проекта. Копирование одной папки сервера не защищает аккаунты игроков, транспорт, имущество и другие данные, сохранённые в MySQL или MariaDB.

В этой инструкции рассмотрено ручное и автоматическое резервное копирование GTA-сервера на Windows и Linux. Вы узнаете, как создавать SQL-дампы, архивировать серверные файлы, запускать копирование по расписанию, хранить несколько поколений архивов и восстанавливать проект после повреждения диска, неудачного обновления или удаления данных.

Примеры подходят для CRMP, SA-MP, open.mp, FiveM, alt:V и других GTA-платформ. Названия каталогов, служб, серверных процессов и баз данных необходимо заменить на используемые в вашем проекте.

Создание и подключение базы данных:

Настройка MySQL и MariaDB для GTA-сервера

Размещение сервера на Linux:

Настройка GTA-сервера на Linux VPS

Запуск проекта на Windows:

Установка GTA-сервера на 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-содержимого;
  • миграции между совместимыми версиями;
  • хранения в сжатом архиве.

Как создать согласованную резервную копию

Файлы и база должны относиться примерно к одному состоянию проекта.

Самый надёжный порядок

  1. Предупредите игроков о техническом сохранении.
  2. Запретите новые подключения.
  3. Выполните штатное сохранение данных.
  4. Корректно остановите GTA-сервер.
  5. Создайте дамп базы данных.
  6. Скопируйте серверные файлы.
  7. Проверьте дамп и архив.
  8. Запустите GTA-сервер.
  9. Перенесите копию во внешнее хранилище.

Копирование без остановки

Для круглосуточного проекта можно создать онлайн-дамп 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

Создайте задачу

  1. Нажмите «Создать задачу».
  2. Введите имя GTA Server Backup.
  3. Выберите запуск независимо от входа пользователя.
  4. Включите выполнение с наивысшими правами.
  5. Создайте ежедневный триггер.
  6. Укажите время с минимальным количеством игроков.
  7. Добавьте действие запуска PowerShell.
  8. Укажите путь к резервному скрипту.

Программа

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-сервера

Перед восстановлением

  1. Остановите игровой сервер.
  2. Сделайте аварийный дамп текущей базы.
  3. Проверьте дату резервного SQL-файла.
  4. Убедитесь, что выбрана правильная база.
  5. Сначала протестируйте импорт отдельно.

Извлеките 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 недоступен, проект необходимо развернуть на новой системе.

Рекомендуемый порядок

  1. Арендуйте новый VPS.
  2. Установите совместимую операционную систему.
  3. Установите системные обновления.
  4. Установите MySQL или MariaDB нужной версии.
  5. Установите зависимости GTA-сервера.
  6. Создайте технического пользователя.
  7. Передайте резервный архив.
  8. Проверьте контрольную сумму.
  9. Распакуйте серверные файлы.
  10. Восстановите базу данных.
  11. Восстановите пользователей и права базы.
  12. Измените IP и сетевую конфигурацию.
  13. Откройте игровой порт.
  14. Запустите сервер в закрытом режиме.
  15. Проверьте данные игроков.
  16. Только затем откройте доступ пользователям.

Сохраните информацию о версиях

В резервный архив полезно добавить файл:

RESTORE-INSTRUCTIONS.txt

В нём укажите

  • версию операционной системы;
  • версию MySQL или MariaDB;
  • версию серверного ядра;
  • список системных пакетов;
  • путь к серверной папке;
  • имя службы;
  • игровой порт;
  • имя базы;
  • порядок запуска;
  • способ восстановления.

Список пакетов Ubuntu

dpkg-query \
-W \
-f='${binary:Package}\t${Version}\n' \
> installed-packages.txt

Версия базы

mysql --version

Для MariaDB:

mariadb --version

Тестовое восстановление резервной копии

Резервная копия считается проверенной только после успешного восстановления.

Тестовый процесс

  1. Создайте отдельный каталог.
  2. Распакуйте архив.
  3. Создайте тестовую базу.
  4. Импортируйте SQL-дамп.
  5. Измените параметры подключения.
  6. Назначьте другой игровой порт.
  7. Запустите тестовую копию.
  8. Проверьте вход игрока.
  9. Проверьте загрузку персонажа.
  10. Проверьте сохранение данных.

Тестовая база

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, запуск тестовой сборки и сохранение игрового аккаунта подтверждают, что резервная копия действительно пригодна для восстановления проекта.

RSS инструкций
0 комментариев 0.0 из 0 оценок
MIAMI RP COMMUNITY

Комментарии к инструкции

Обсудите решение, задайте вопрос или дополните инструкцию

Всего: 0
Страница: /
Показано: 0
Добавление комментариев сейчас недоступно для текущего пользователя.