Зачем плагинам база данных
База данных используется для хранения статистики, привилегий, наказаний, рейтингов, настроек игроков и истории событий.
Небольшой плагин может хранить данные в JSON или SQLite. Для большого проекта с несколькими серверами удобнее использовать MySQL или MariaDB.
Не используйте root
Плагину не нужен административный пользователь базы. Создайте отдельную базу и отдельную учётную запись.
Пользователь должен иметь права только на нужную схему. Он не должен управлять системными базами, создавать других пользователей или читать данные сторонних сервисов.
Для каждого крупного проекта полезно создавать собственную учётную запись. Утечка одного пароля тогда не открывает все базы на сервере.
Локальное подключение
Если игровой сервер и база находятся на одной машине, привяжите СУБД к локальному интерфейсу.
В конфигурации плагина используйте:
127.0.0.1;- отдельное имя базы;
- отдельного пользователя;
- сложный пароль;
- нужный порт.
Не публикуйте порт MySQL во внешний интернет без реальной необходимости.
Удалённая база
Когда несколько игровых серверов используют одну базу, она может находиться на отдельном VPS.
В этом случае разрешите подключения только с конкретных IP игровых машин. Используйте firewall, защищённую сеть или VPN.
Учитывайте задержку. Плагин не должен выполнять тяжёлый удалённый запрос в критическом игровом событии.
Кодировка
Используйте современную кодировку с полноценной поддержкой Unicode. Это важно для имён игроков, сообщений и нестандартных символов.
Несовпадение кодировок может привести к ошибкам записи, повреждённому тексту и невозможности создать индекс.
Структура таблиц
Обычно плагин создаёт таблицы автоматически. Перед первым запуском изучите документацию и проверьте, какие права требуются.
После запуска убедитесь, что:
- таблицы созданы;
- данные записываются;
- нет повторяющихся миграций;
- журнал не содержит SQL-ошибок;
- индексы присутствуют;
- время запросов остаётся небольшим.
Пароль в конфигурации
Файл с подключением содержит секрет. Ограничьте права чтения и не включайте его в публичный архив.
Не отправляйте полную конфигурацию в открытый чат. Для диагностики заменяйте пароль маской.
Если пароль оказался в публичном репозитории, удаление строки недостаточно. Создайте новый пароль и отзовите старый.
Пул соединений
Некоторые плагины открывают соединение для каждого события, другие используют пул. Частое создание соединений увеличивает задержки и нагрузку.
Настройки зависят от конкретного расширения, но количество подключений должно быть ограничено.
Проверяйте список активных соединений и ошибки превышения лимита.
Индексы
При росте статистики запросы могут становиться медленнее. Индексы ускоряют поиск по SteamID, дате, серверу и другим часто используемым полям.
Не добавляйте индексы без анализа: каждый индекс увеличивает стоимость записи и занимает место.
Очистка данных
Продумайте срок хранения:
- сырых событий;
- старых сессий;
- временных токенов;
- журналов;
- удалённых пользователей;
- устаревшей статистики.
Бесконечный рост таблиц ухудшает резервное копирование и обслуживание.
Резервное копирование
Создавайте логический дамп базы. Проверяйте, что файл не пуст и может быть импортирован.
Храните удалённую копию отдельно от основного VPS.
Перед обновлением плагина, изменяющего структуру таблиц, создавайте дополнительный дамп.
Проверка после перезапуска
Перезапустите базу и игровой сервер. Убедитесь, что плагин восстанавливает соединение без ручного вмешательства.
Если база временно недоступна, сервер не должен полностью падать. Хороший плагин записывает ошибку и повторяет подключение через разумный интервал.
Несколько серверов
При общей базе добавляйте идентификатор сервера. Иначе статистика и настройки разных площадок могут смешаться.
Проверьте документацию плагина: некоторые расширения рассчитаны только на одну игровую установку.
Итог
Безопасная база для плагинов использует отдельную схему, отдельного пользователя, ограниченные права и закрытый сетевой доступ.
Настройте кодировку, резервные копии, очистку старых данных и контроль медленных запросов. Не используйте root и не публикуйте пароль базы.