L2 Server Database Setup: MySQL и MariaDB без ошибок

Аккуратный l2 server database setup — это разница между миром, который переживает перезапуск, и миром, который теряет аккаунты, предметы и данные кланов. База хранит всё постоянное состояние игроков и мира: аккаунты, персонажей, инвентарь, кланы, замки и логи. NPC, спавны и шаблоны предметов лежат в датапаке. Game server можно пересобрать из исходников за вечер, но испорченная или недоустановленная схема стоит вам игроков. Этот гайд разбирает выбор движка, безопасную установку, загрузку схемы L2J, настройки, которые реально важны, и ошибки, которые встречаются по пути.
MariaDB или MySQL: выберите одно и подстройте под пак
L2J совместим с MySQL 8.0 и новее, но проект рекомендует MariaDB. Схема L2J работает на обоих, оба дружат с JDBC-драйвером и оба годятся для продакшена при аккуратной настройке. Внутри они не идентичны, поэтому выберите один движок, используйте коннектор, который идёт с паком, и не ставьте второй только потому, что в каком-то гайде был другой.
| Пункт | MariaDB | MySQL 8.0+ |
|---|---|---|
| Рекомендация L2J | Предпочтительно | Совместимо |
| Движок по умолчанию в большинстве паков | Да | Опционально |
| Файл конфигурации | my.cnf / my.ini | my.cnf / my.ini |
| JDBC-драйвер | MariaDB Connector/J | MySQL Connector/J |
Проверьте, какой драйвер идёт с паком, до установки. Пак под один коннектор во многих случаях подключится и к другому движку, но синтаксис URL и часть значений по умолчанию отличаются. Догадки здесь дают ошибки подключения, которые выглядят как проблема с паролем.

Установите и защитите движок
В Windows установщик MariaDB или MySQL создаёт службу, каталог данных и учётную запись root. В Debian или Ubuntu то же делает пакет и сразу запускает службу. В обоих случаях сразу после чистой установки выполните шаг безопасной настройки.
- Задайте пароль root, который вы не используете больше нигде.
- Удалите анонимных пользователей и тестовую базу.
- Запретите удалённый вход root.
- Перезагрузите таблицы привилегий, чтобы изменения применились сразу.
Во многих Linux-пакетах root аутентифицируется через локальный сокет, а не по паролю. Это функция безопасности, а не дефект. Она означает, что командная строка работает, а удалённое подключение root — нет, и объясняет первый непонятный "access denied" у каждого нового администратора.
Держите сервер привязанным к localhost. Если game server работает на той же машине, порту 3306 незачем отвечать в интернет, а автоматические сканеры находят открытые порты баз очень быстро.
Создайте пользователя и базу
Не запускайте game server от root. Создайте отдельную учётную запись, дайте ей ровно необходимое и используйте пароль, который невозможно угадать. Минимальная настройка выглядит так:
- Создайте базу, например
l2jdb. - Создайте пользователя вроде
l2j, ограниченногоlocalhost, если сервер локальный. - Выдайте привилегии только на эту базу, а не на всё.
- Перезагрузите привилегии и проверьте вход из командной строки.
Некоторые гайды дают полные права с хостом-джокером. Это удобно на временной тестовой машине и плохая привычка для живого сервера. Если база на другой машине, ограничьте хост этим приватным адресом и закройте порт файрволом между хостами.

Загрузите схему L2J
Современный L2J включает CLI, который устанавливает SQL-файлы за вас, включая custom- и mod-таблицы. Старые паки ждут ручного импорта SQL для login и game через phpMyAdmin, HeidiSQL или командную строку. Оба способа работают, но порядок важен.
- Сначала установите схему login, затем схему game.
- На новой базе используйте полный режим установки, а не режим обновления.
- Проверьте количество таблиц, а не доверяйте полосе прогресса.
- Убедитесь, что есть и таблица аккаунтов, и таблицы персонажей.
Если game server стартует, а login server отказывает в подключении, недоустановленная схема — одна из первых причин для проверки. Два сервиса используют разные наборы таблиц, и неполный набор ломает только часть стека.
Укажите серверу путь к базе
Параметры подключения лежат в папке конфигурации login server и ещё раз в папке game server. Это разные файлы, и обоим нужны одинаковые хост, порт, имя базы, пользователь и пароль. Отредактировать один и забыть второй — самая частая ошибка настройки.
После изменения перезапустите службы по порядку: база, login server, game server. Game server регистрируется на login server, поэтому обратный порядок может оставить мир вне списка, пока game server не переподключится, хотя оба процесса запущены.
Настройки, которые действительно важны
Значения по умолчанию рассчитаны на небольшие тестовые установки. На живом сервере почти всю работу делают несколько параметров:
- Buffer pool: отдайте InnoDB большую часть RAM на хосте, занятом только базой, обычно от половины до двух третей. Он кэширует данные и индексы, и холодный буфер — обычная причина медленных первых минут после перезапуска.
- Соединения: поднимите лимит выше размера пула вашего пака, с запасом для админ-инструментов и бэкапов.
- Надёжность против скорости: настройка сброса лога меняет небольшой риск потерять последнюю секунду коммитов на более быструю запись. На живой экономике держите безопасное значение, если не понимаете компромисс.
- Разрешение имён: отключение обратного DNS через
skip_name_resolveускоряет подключения, но MySQL начинает сверять права по IP-адресу, а не по имени хоста. Если включаете, создавайте пользователя под IP клиента или подlocalhost, когда соединение идёт через сокет. - Charset: оставьте кодировку, с которой идёт пак. Перевод живой базы на другую collation — это миграция, а не галочка.
Меняйте по одному параметру и перезапускайте чисто. Два изменения сразу ничего не объяснят, когда производительность улучшится или упадёт.
Бэкапы и проверка восстановления
Бэкап, который вы никогда не восстанавливали, — это надежда, а не резервная копия. Делайте логический дамп с согласованным снимком, сжимайте и копируйте за пределы машины по расписанию.
- Дампьте всю базу, а не только таблицы персонажей.
- Включайте процедуры и триггеры, если пак их использует.
- Храните несколько дней дампов и хотя бы одну копию в другом хранилище.
- Раз в месяц восстанавливайте в тестовую базу и проверяйте вход персонажа.
Перед каждым патчем или миграцией делайте ручной дамп с меткой версии. Автоматическое расписание спасает от отказа железа, а ручной снимок — от вашего собственного обновления.
Частые ошибки и что они значат
| Ошибка | Обычная причина | Решение |
|---|---|---|
| Access denied for user | Неверный хост, пароль или плагин аутентификации | Проверьте хост пользователя, сбросьте пароль, протестируйте локально |
| Unknown database | Имя схемы не совпадает с конфигом | Создайте базу или исправьте JDBC URL |
| Communications link failure | Служба остановлена, неверный порт или файрвол | Запустите движок, проверьте порт и держите его закрытым |
| Too many connections | Пул больше лимита сервера | Поднимите лимит или уменьшите пул |
| Incorrect string value | Несовпадение кодировки в импортированных данных | Используйте кодировку пака и в дампе, и в базе |
База, которой можно доверять
Держите её маленькой и скучной: один движок, отдельный пользователь, полностью установленная схема, локальный порт и проверенный план дампов. Такая конфигурация не выиграет спор об архитектуре, но удержит мир на ногах между патчами, падениями и очередной плохой ночью.
Когда сервер стабилен, следующая проблема — игроки. Добавьте мир в L2Calendar через форму бесплатного размещения или используйте VIP-размещение, чтобы выделиться в каталоге серверов.
