Перевод плагинов с локального хранения (SQLite/Flatfile) на MySQL/MariaDB
Когда вы только запускаете сервер Minecraft, стандартные настройки большинства плагинов кажутся идеальными. Они работают «из коробки», сохраняя данные в локальные файлы конфигурации (.yml, .json) или локальные базы данных (.db через движок SQLite). Однако по мере роста проекта — когда онлайн перешагивает отметку в 20–30 игроков — сервер начинает страдать от периодических микрофризов (тиков, длящихся слишком долго), а в консоли хостинга появляются предупреждения о задержках чтения файлов.
В этой статье мы разберем, почему локальные форматы хранения неизбежно начинают лагать при росте онлайна, как развернуть централизованную базу данных на хостинге и правильно перевести на нее ключевые плагины: LuckPerms, EssentialsX и CoreProtect.
Почему Flatfile (.yml) и SQLite (.db) лагают при росте онлайна?
Проблема кроется в архитектуре того, как операционная система и сервер Minecraft взаимодействуют с диском хостинга:
- Проблема Flatfile (.yml / .json): Каждый раз, когда игроку нужно выдать привилегию, сохранить его баланс или изменить баланс кошелька, плагин вынужден перезаписывать текстовый файл целиком. Если 20 игроков одновременно совершают транзакции, сервер начинает раз за разом перечитывать и перезаписывать тяжелые файлы конфигурации. Так как это часто происходит синхронно с основным потоком игры (Main Thread), сервер буквально замирает, ожидая окончания операции ввода-вывода (I/O).
- Проблема SQLite (.db): SQLite — это отличная база данных, но она представляет собой единый файл на диске. Главный минус SQLite — блокировка на уровне всего файла (File Locking) при записи. Если плагин CoreProtect пытается записать в базу лог взрыва крипера, никакой другой плагин (или этот же плагин в другом потоке) не сможет ничего записать в этот файл, пока первая операция не завершится. Возникает очередь из запросов, которая выливается в ощутимые лаги (микрофризы) для игроков.
Решение — MySQL / MariaDB: Это полноценные сетевые системы управления базами данных (СУБД). Они работают в многопоточном режиме, поддерживают блокировку на уровне отдельных строк (а не всего файла), умеют эффективно кэшировать запросы в оперативной памяти и обрабатывают данные асинхронно, полностью разгружая основной процессор игрового сервера.
Шаг 1: Создание базы данных в панели хостинга
Перед настройкой плагинов необходимо получить реквизиты доступа к MySQL. На современном игровом хостинге это делается в пару кликов:
- Перейдите в панель управления сервером и откройте раздел «Базы данных» (Databases).
- Нажмите кнопку «Создать базу данных» (Create Database).
- После создания панель отобразит реквизиты. Нам понадобятся пять параметров:
Host(IP-адрес или домен подключения, например:127.0.0.1илиsql.mygamehost.net)Port(По умолчанию для MySQL это3306)Database Name(Имя базы данных)User(Имя пользователя)Password(Пароль)
Шаг 2: Перевод плагинов на MySQL
Рассмотрим перевод трех главных плагинов, которые создают максимальную нагрузку на дисковую подсистему.
1. LuckPerms (Права и привилегии)
LuckPerms идеально оптимизирован под работу с сетью. Перевод на MySQL не только уберет лаги, но и позволит вам связать несколько серверов (например, Сурвивал и Хаб) в единую сеть прав.
- Откройте файл
plugins/LuckPerms/config.yml. - Найдите строку
storage-method:измените значение сh2илиsqliteнаmysql. - Прокрутите конфиг ниже до блока
data:и впишите полученные от хостинга данные:
storage-method: mysql
data:
address: localhost:3306 # Укажите ваш Host и Port через двоеточие
database: lperms_db
username: admin_user
password: 'super_secure_password'
table-prefix: 'lp_'
- Сохраните файл и введите в консоли команду
/lp sync. Плагин автоматически создаст нужные таблицы в вашей СУБД.
2. EssentialsX (Экономика, дома, варпы, данные игроков)
По умолчанию EssentialsX создает под каждого нового игрока отдельный файл .yml в папке userdata. Когда на сервере регистрируются тысячи игроков, папка превращается в кошмар для файловой системы Linux.
- Для работы EssentialsX с базой данных вам потребуется дополнительный аддон — EssentialsXStorage (скачайте его с официального сайта разработчиков и положите в папку
plugins/). - Откройте основной
plugins/Essentials/config.ymlи найдите секцию хранения (обычно в самом низу файла). - Переключите тип хранилища на MySQL и заполните параметры подключения:
essentials:
storage:
type: mysql
mysql:
host: localhost
port: 3306
database: essentials_db
username: admin_user
password: 'super_secure_password'
3. CoreProtect (Логирование блоков)
CoreProtect — самый «тяжелый» плагин на сервере, так как он записывает миллионы действий. Перевод его на MySQL критически важен для стабильного TPS.
- Откройте файл
plugins/CoreProtect/config.yml. - Найдите параметр
use-mysql: falseи измените его наuse-mysql: true. - Заполните строки подключения чуть ниже:
use-mysql: true
mysql-host: localhost
mysql-port: 3306
mysql-database: coreprotect_db
mysql-username: admin_user
mysql-password: "super_secure_password"
table-prefix: "co_"
- Перезапустите сервер. При первом запуске CoreProtect начнет индексацию структуры базы данных, что может занять 1–2 минуты.
Решение возможных проблем (Troubleshooting)
Проблема 1: Сервер выдает ошибку «Communications link failure» при запуске плагина
Причина: Игровой сервер не может достучаться до сервера базы данных. Либо вы ошиблись в заполнении хоста/пароля, либо база данных на хостинге еще не запустилась.
Решение: Внимательно проверьте, нет ли лишних пробелов или кавычек в полях host и password. Если база находится на внешнем сервере, убедитесь, что хостинг разрешает удаленные подключения (Remote Connections) к этой базе данных.
Проблема 2: Пропали все донаты, варпы и регионы после включения MySQL
Причина: Это логично — плагины подключились к новой, абсолютно чистой базе данных, а все ваши старые данные остались лежать в локальных файлах .db и .yml.
Решение для LuckPerms: Плагин имеет встроенную систему миграции. Перед тем как переключать конфиг на MySQL, введите команду: /lp export local_data. Затем переключите плагин на работу с MySQL, запустите сервер и введите: /lp import local_data. Данные автоматически перенесутся из файла в СУБД.
Решение для других плагинов:
Перенос данных из SQLite (файлов .db) в MySQL требует использования сторонних скриптов или конвертеров. Если на сервере уже играет много людей, рекомендуется производить переключение на MySQL в момент проведения планового вайпа (сброса мира), чтобы начать ведение чистой и быстрой истории сервера.