Когда нужна БД
Стандартному проверочному профилю OpenM отдельная SQL-база не требуется. База нужна игровому режиму, который хранит персонажей, экономику, транспорт и другие постоянные данные. Центральные базы аккаунтов и каталога OpenM принадлежат инфраструктуре проекта и не являются вашей игровой БД.
СУБД и коннектор не входят в серверный ZIP. Выберите версию, которую поддерживает конкретный framework, и используйте официальную инструкцию её установки. Совместимость MySQL и MariaDB не означает идентичность всех SQL-функций и миграций.
Размещение и доступ
Для одного хоста используйте loopback 127.0.0.1. Для отдельного сервера — закрытую сеть, ограничение источника и защищённое соединение согласно возможностям СУБД/коннектора. Не пробрасывайте SQL-порт на домашнем маршрутизаторе ради подключения игроков: игроки обращаются к FXServer, а не к SQL напрямую.
Запускайте СУБД под отдельной служебной учётной записью. Ограничьте объём хранения и настройте резервное копирование. Свободное место требуется не только таблицам, но и журналам, временным операциям и дампам.
Создание отдельной базы
Следующий пример рассчитан на MySQL и выполняется администратором в SQL-клиенте. Это шаблон: замените пароль длинным случайным значением и согласуйте кодировку с framework.
CREATE DATABASE openm_game CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'openm_game'@'localhost' IDENTIFIED BY 'REPLACE_WITH_RANDOM_PASSWORD';
GRANT SELECT, INSERT, UPDATE, DELETE ON openm_game.* TO 'openm_game'@'localhost';
Не используйте root в игровом конфиге. Для первоначального импорта схемы и миграций применяйте отдельную административную учётную запись. Некоторым ресурсам нужны DDL-права на запуске; выясните точные операции, выдавайте их осознанно только для этой базы и пересматривайте после миграции. Не решайте ошибку доступа глобальным GRANT ALL ON *.*.
Host-часть учётной записи должна соответствовать реальному источнику подключения. Для удалённого FXServer localhost не подходит; создайте учётную запись для конкретного адреса, а не универсального % без сетевых ограничений.
Импорт схемы
Возьмите SQL-файлы из той же версии framework и ресурсов, которые устанавливаете. Создайте пустую тестовую БД, импортируйте базовую схему, затем предусмотренные миграции по порядку. Проверяйте код завершения и журнал каждой операции. Не импортируйте поверх рабочей базы случайный «готовый дамп» с чужими администраторами и секретами.
Через интерактивный MySQL-клиент можно использовать:
USE openm_game;
SOURCE C:/OpenM-Import/schema.sql;
SHOW TABLES;
Путь и имя файла заменяются реальными. Перед SOURCE прочитайте SQL: файл может содержать DROP DATABASE, изменение пользователей или переключение на другую БД.
Подключение oxmysql
Создайте приватный конфиг рядом с server.cfg, вне каталогов выдаваемых клиенту ресурсов:
set mysql_connection_string "mysql://openm_game:ENCODED_PASSWORD@127.0.0.1:3306/openm_game?charset=utf8mb4"
Это шаблон URI. Специальные символы логина/пароля должны быть корректно закодированы для URI; сверьте поддерживаемый формат с документацией именно установленной версии коннектора. Не добавляйте строке префикс sets: он предназначен для публикуемых сведений.
В основном конфиге до framework:
exec private-database.cfg
ensure oxmysql
ensure qb-core
Ограничьте NTFS-доступ к приватному файлу учётной записью сервера и администраторами. Не включайте его в публичный ресурс, Git, скриншоты или архив для игроков. Публикация конфига в открытом репозитории требует смены пароля даже после удаления файла.
Проверка работоспособности
Убедитесь, что СУБД работает, порт доступен с игрового хоста, учётная запись входит в нужную базу и коннектор не пишет ошибок авторизации. Затем проверьте реальное действие режима: создание персонажа, сохранение, выход и повторный вход. Успешное TCP-соединение не проверяет схему и права SQL.
Access denied обычно относится к пользователю, паролю, host-части или правам. Unknown database — к имени БД. Table doesn't exist и Unknown column — к версии схемы/миграциям. Таймаут соединения проверяется на уровне службы, адреса и сети. Полную строку подключения в обращение поддержки не прикладывайте.
Резервирование и обслуживание
Используйте инструкцию резервного копирования вместе с копией ресурсов и их версий. Контролируйте ошибки запросов, размер таблиц и свободное место. Не применяйте автоматические «оптимизаторы» и массовое удаление данных без проверенной копии и понятного плана возврата.