Подключение MySQL к серверу CRMP — база данных и ошибки
База данных MySQL используется на серверах CRMP для хранения аккаунтов, персонажей, транспорта, домов, бизнесов, организаций и других постоянных данных. Чтобы игровой мод работал правильно, необходимо создать отдельную базу и пользователя, импортировать SQL-файл, установить совместимый MySQL-плагин и указать корректные реквизиты подключения.
Простого создания пустой базы недостаточно. Структура таблиц должна соответствовать игровому моду, версия плагина — исходному коду Pawn, а пользователь MySQL должен иметь права только на базу конкретного сервера.
В руководстве рассмотрены создание MySQL-базы на VPS и игровом хостинге, импорт SQL через phpMyAdmin и командную строку, настройка подключения в CRMP-моде, проверка плагина и устранение распространённых ошибок.
Сначала установите игровой мод:
Настройка плагинов и параметров запуска:
Для чего серверу CRMP нужна MySQL
MySQL хранит постоянные данные отдельно от серверного процесса. После перезапуска игрового мода или VPS информация остаётся в таблицах и может быть загружена повторно.
В базе могут храниться
- аккаунты игроков;
- пароли или их хеши;
- уровни и опыт;
- деньги и банковские счета;
- персонажи;
- транспорт;
- дома и квартиры;
- бизнесы;
- организации;
- инвентарь;
- наказания;
- административные права;
- игровые журналы.
Серверное ядро CRMP не создаёт эти таблицы автоматически. Их структура определяется игровым модом и SQL-файлом, который распространяется вместе со сборкой.
Как проверить, использует ли мод MySQL
Не каждая CRMP-сборка работает с внешней базой. Старые моды могут использовать INI-файлы или SQLite в папке scriptfiles.
Признаки использования MySQL
- в архиве находится файл
.sql; - в папке
pluginsприсутствуетmysql.dllилиmysql.so; - в исходном коде подключён
a_mysql; - в
server.cfgуказан плагин MySQL; - в исходнике вызывается
mysql_connect; - в
scriptfilesнаходитсяmysql.iniили похожий файл; - при запуске выводится сообщение о соединении с базой.
Поиск в исходнике
#include <a_mysql>
mysql_connect
mysql_query
mysql_tquery
mysql_pquery
cache_get_value
cache_get_row
Если MySQL не используется
Не устанавливайте плагин без необходимости. Проверьте папки:
scriptfiles/Accounts/
scriptfiles/Users/
scriptfiles/Players/
Если аккаунты сохраняются в отдельных файлах, мод может использовать файловую систему вместо MySQL.
Какие данные потребуются для подключения
Основные реквизиты
| Параметр | Пример | Назначение |
|---|---|---|
| Host | 127.0.0.1 |
Адрес сервера MySQL. |
| Port | 3306 |
Сетевой порт MySQL. |
| Database | crmp_server |
Имя базы игрового мода. |
| User | crmp_user |
Отдельная учётная запись базы. |
| Password | СЛОЖНЫЙ_ПАРОЛЬ |
Пароль пользователя MySQL. |
| Charset | utf8mb4 |
Кодировка соединения, если её поддерживает мод. |
Дополнительно могут понадобиться
- версия MySQL-плагина;
- SQL-файл структуры;
- адрес phpMyAdmin;
- разрешённый IP игрового сервера;
- имя файла конфигурации;
- порт, отличный от 3306;
- SSL-параметры удалённой базы.
Локальная и удалённая база данных
MySQL на том же VPS
host=127.0.0.1
port=3306
Такой вариант обычно обеспечивает минимальную задержку и не требует открытия порта MySQL в интернет.
MySQL на игровом хостинге
host=mysql12.hosting.example
port=3306
Используйте адрес, указанный в панели. Значение 127.0.0.1 в этом случае направит мод на сам игровой сервер, а не на отдельный сервер базы.
MySQL на другом VPS
host=203.0.113.20
port=3306
На сервере базы необходимо разрешить подключение только с IP CRMP-сервера.
localhost и 127.0.0.1
В некоторых конфигурациях localhost может использовать локальный сокет, а 127.0.0.1 — TCP-соединение. Для старых игровых плагинов обычно проще использовать явный адрес 127.0.0.1.
Создание MySQL на игровом хостинге
Названия пунктов отличаются, но обычно база создаётся в разделе MySQL или «Базы данных».
Порядок действий
- Откройте панель игрового хостинга.
- Перейдите в раздел MySQL.
- Создайте новую базу.
- Создайте пользователя или получите автоматически созданного.
- Сохраните адрес, порт, имя базы, логин и пароль.
- Откройте phpMyAdmin.
- Импортируйте SQL-файл игрового мода.
- Укажите реквизиты в конфигурации сборки.
- Перезапустите сервер.
Хостинг может выдать
Host: mysql12.hosting.example
Port: 3306
Database: user123_crmp
User: user123_crmp
Password: созданный пароль
Не заменяйте адрес хостинга на localhost
Если база находится на отдельной машине, необходимо использовать именно выданное доменное имя или IP.
Установка MySQL на Linux VPS
Пример для Debian или Ubuntu:
Обновление списка пакетов
sudo apt update
Установка сервера MySQL
sudo apt install mysql-server -y
Запуск службы
sudo systemctl enable mysql
sudo systemctl start mysql
Проверка состояния
sudo systemctl status mysql
Вход в консоль
sudo mysql
На некоторых системах вместо MySQL устанавливается MariaDB. Основные команды создания базы и пользователя похожи, но совместимость старого плагина следует проверять отдельно.
Создание базы данных CRMP
Войдите в консоль MySQL под учётной записью, имеющей право создавать базы.
Создание базы
CREATE DATABASE `crmp_server`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Без ошибки при повторном выполнении
CREATE DATABASE IF NOT EXISTS `crmp_server`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Проверка
SHOW DATABASES;
Выбор базы
USE `crmp_server`;
Создание отдельного пользователя MySQL
Не подключайте игровой мод под учётной записью root. Создайте отдельного пользователя только для CRMP.
Для базы на том же сервере
CREATE USER 'crmp_user'@'127.0.0.1'
IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
Если мод подключается через localhost
CREATE USER 'crmp_user'@'localhost'
IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
Для удалённого CRMP-сервера
CREATE USER 'crmp_user'@'IP_CRMP_СЕРВЕРА'
IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
Проверка пользователя
SELECT
User,
Host
FROM mysql.user
WHERE User = 'crmp_user';
Часть после символа @ имеет значение. Пользователи 'crmp_user'@'localhost' и 'crmp_user'@'127.0.0.1' могут рассматриваться как разные учётные записи.
Выдача прав пользователю базы
Права следует ограничить базой конкретного игрового сервера.
Полный доступ только к одной базе
GRANT ALL PRIVILEGES
ON `crmp_server`.*
TO 'crmp_user'@'127.0.0.1';
Для пользователя localhost
GRANT ALL PRIVILEGES
ON `crmp_server`.*
TO 'crmp_user'@'localhost';
Для удалённого сервера
GRANT ALL PRIVILEGES
ON `crmp_server`.*
TO 'crmp_user'@'IP_CRMP_СЕРВЕРА';
Проверка выданных прав
SHOW GRANTS
FOR 'crmp_user'@'127.0.0.1';
Почему не следует использовать глобальные права
Опасный вариант:
GRANT ALL PRIVILEGES
ON *.*
TO 'crmp_user'@'%';
Он предоставляет доступ ко всем базам и разрешает подключения с любых адресов. Для игрового мода это обычно не требуется.
Создание базы через phpMyAdmin
- Авторизуйтесь в phpMyAdmin.
- Откройте раздел «Базы данных».
- Введите имя
crmp_server. - Выберите подходящее сравнение.
- Создайте базу.
- Откройте раздел учётных записей пользователей.
- Создайте отдельного пользователя.
- Выдайте ему права только на созданную базу.
На игровом хостинге
Панель может запрещать ручное создание пользователей через phpMyAdmin. В этом случае используйте автоматически выданные реквизиты.
Проверка SQL-файла перед импортом
Распространённые названия
database.sql
base.sql
crmp.sql
roleplay.sql
dump.sql
Откройте файл текстовым редактором и проверьте
- создаются ли таблицы;
- какое имя базы указано;
- какая кодировка используется;
- есть ли команды
DROP TABLE; - содержатся ли реальные аккаунты;
- присутствуют ли стандартные администраторы;
- есть ли процедуры, события и триггеры;
- не повреждён ли файл.
Типичное начало SQL-файла
CREATE TABLE `accounts` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(24) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
Импорт SQL-файла через командную строку
Linux
mysql \
-h 127.0.0.1 \
-P 3306 \
-u crmp_user \
-p \
crmp_server \
< database.sql
После запуска команда запросит пароль пользователя.
Windows Command Prompt
mysql.exe -h 127.0.0.1 -P 3306 -u crmp_user -p crmp_server < database.sql
Удалённый сервер базы
mysql \
-h MYSQL_ХОСТ \
-P 3306 \
-u crmp_user \
-p \
crmp_server \
< database.sql
Файл находится в другой папке
mysql \
-h 127.0.0.1 \
-u crmp_user \
-p \
crmp_server \
< /home/crmp/database.sql
Не передавайте пароль прямо в команде
Нежелательно:
mysql -u crmp_user -pПАРОЛЬ crmp_server < database.sql
Пароль может сохраниться в истории терминала или стать видимым в списке процессов.
Импорт SQL через phpMyAdmin
- Откройте phpMyAdmin.
- Выберите созданную базу.
- Перейдите во вкладку «Импорт».
- Нажмите кнопку выбора файла.
- Укажите
database.sql. - Оставьте формат SQL.
- Проверьте кодировку файла.
- Запустите импорт.
- Дождитесь сообщения об успешном завершении.
Если файл слишком большой
- используйте импорт через командную строку;
- увеличьте ограничения PHP, если управляете сервером;
- разделите дамп на несколько частей;
- обратитесь в поддержку игрового хостинга;
- загрузите архив, если панель поддерживает сжатый SQL.
Не выбирайте случайную базу
Перед импортом проверьте название базы в левой колонке phpMyAdmin. Ошибочный импорт может создать таблицы на другом проекте.
Проверка базы после импорта
Просмотр таблиц
USE `crmp_server`;
SHOW TABLES;
Проверка структуры аккаунтов
DESCRIBE `accounts`;
Количество записей
SELECT COUNT(*)
FROM `accounts`;
Проверка кодировки таблиц
SELECT
TABLE_NAME,
TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'crmp_server';
Проверьте наличие основных таблиц
- аккаунтов;
- персонажей;
- транспорта;
- домов;
- бизнесов;
- организаций;
- банов;
- администраторов.
Названия зависят от конкретной сборки. Отсутствие таблицы, которую запрашивает мод, вызовет ошибку при запуске или выполнении игровой функции.
Настройка кодировки и сравнения
Для новых проектов часто используется utf8mb4, но старые CRMP-моды могут быть рассчитаны на cp1251 или другую кодировку.
Проверка базы
SELECT
DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'crmp_server';
Изменение кодировки базы
ALTER DATABASE `crmp_server`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Если русский текст отображается неправильно
- проверьте кодировку PWN;
- проверьте кодировку AMX и используемых строк;
- проверьте параметры соединения MySQL;
- проверьте кодировку таблиц и столбцов;
- проверьте данные внутри SQL-файла;
- не смешивайте UTF-8 и Windows-1251 без преобразования.
Установка MySQL-плагина для CRMP
Pawn-код не подключается к MySQL самостоятельно. Для этого используется нативный серверный плагин и соответствующий include-файл.
Компоненты
mysql.dllдля Windows;mysql.soдля Linux;a_mysql.incдля компиляции PWN;- дополнительные библиотеки из архива плагина;
- AMX, скомпилированный под подходящую версию API.
Include-файл
pawno/include/a_mysql.inc
Нативный плагин
plugins/mysql.dll
plugins/mysql.so
Наличие только a_mysql.inc позволяет скомпилировать код, но не предоставляет функции серверу во время запуска.
Установка MySQL-плагина на Windows
Пример файлов
CRMP-Server/
├── plugins/
│ └── mysql.dll
├── pawno/
│ └── include/
│ └── a_mysql.inc
└── server.cfg
Дополнительные файлы
Некоторые версии плагина распространяются вместе с библиотеками, которые должны находиться рядом с серверным EXE или внутри каталога плагинов.
Если mysql.dll не загружается
- проверьте разрядность;
- установите нужные Visual C++ Redistributable x86;
- проверьте дополнительные DLL из архива;
- снимите блокировку файла в свойствах Windows;
- используйте версию, подходящую вашему AMX;
- запустите сервер через командную строку.
Запуск через консоль
cd C:\CRMP-Server
samp-server-cr.exe
Установка MySQL-плагина на Linux
Пример структуры
plugins/
└── mysql.so
pawno/include/
└── a_mysql.inc
Проверка типа файла
file plugins/mysql.so
Проверка зависимостей
ldd plugins/mysql.so
Если отображается not found
Установите отсутствующую библиотеку или используйте плагин, собранный для вашей системы.
Права файла
chmod 755 plugins/mysql.so
sudo chown crmp:crmp \
plugins/mysql.so
32-битные библиотеки
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install \
libc6:i386 \
libstdc++6:i386 \
libatomic1:i386 \
-y
Конкретные зависимости зависят от версии плагина.
Подключение MySQL-плагина в server.cfg
Windows
plugins mysql streamer sscanf
Linux
plugins mysql.so streamer.so sscanf.so
Если используются другие плагины
plugins crashdetect mysql streamer sscanf pawncmd
На Linux добавьте .so к каждому названию.
После изменения
- Сохраните
server.cfg. - Полностью остановите сервер.
- Запустите процесс заново.
- Проверьте статус загрузки плагина.
Успешная загрузка
Loading plugin: mysql
Loaded.
Ошибка
Loading plugin: mysql
Failed.
Совместимость версий MySQL-плагина
В старых CRMP-сборках встречаются разные поколения MySQL-плагина. Их функции, порядок аргументов и работа с результатами запросов отличаются.
Не заменяйте одновременно
mysql.dllилиmysql.so;a_mysql.inc;- AMX игрового мода.
Если AMX был скомпилирован со старым include, новая версия нативного плагина может не предоставить ожидаемые функции.
Как определить используемые функции
mysql_query
mysql_function_query
mysql_tquery
mysql_pquery
cache_get_row
cache_get_value_name
Проверка объявления mysql_connect
Откройте:
pawno/include/a_mysql.inc
и найдите объявление:
mysql_connect
Порядок параметров отличается между версиями. Не меняйте местами пароль и название базы по примеру из другой сборки.
Настройка данных подключения
В отдельном INI-файле
host=127.0.0.1
port=3306
database=crmp_server
user=crmp_user
password=СЛОЖНЫЙ_ПАРОЛЬ
В Pawn-коде
#define MYSQL_HOST "127.0.0.1"
#define MYSQL_PORT 3306
#define MYSQL_DATABASE "crmp_server"
#define MYSQL_USER "crmp_user"
#define MYSQL_PASSWORD "СЛОЖНЫЙ_ПАРОЛЬ"
На игровом хостинге
#define MYSQL_HOST "mysql12.hosting.example"
#define MYSQL_PORT 3306
#define MYSQL_DATABASE "user123_crmp"
#define MYSQL_USER "user123_crmp"
#define MYSQL_PASSWORD "СЛОЖНЫЙ_ПАРОЛЬ"
Не добавляйте кавычки в INI без проверки
Некоторые парсеры ожидают:
password=MyPassword
а другие поддерживают:
password="MyPassword"
Сохраняйте формат, который уже используется в конфигурации мода.
Где искать реквизиты MySQL в сборке
Возможные файлы
scriptfiles/mysql.ini
scriptfiles/database.ini
scriptfiles/config.ini
scriptfiles/server.ini
scriptfiles/settings.cfg
gamemodes/roleplay.pwn
Ищите слова
localhost
127.0.0.1
3306
mysql_connect
MYSQL_HOST
MYSQL_USER
MYSQL_PASS
MYSQL_DATABASE
Если найдено несколько подключений
Мод может использовать:
- основную игровую базу;
- отдельную базу логов;
- тестовую базу;
- базу сайта;
- резервное соединение.
Не заменяйте все значения автоматически. Сначала определите назначение каждого подключения.
Первый запуск и проверка подключения
Перед запуском проверьте
- MySQL-сервер работает;
- база создана;
- SQL-файл импортирован;
- пользователь имеет права;
- плагин находится в папке;
- строка
pluginsзаполнена; - реквизиты указаны правильно;
- AMX соответствует версии плагина.
Запуск Windows
cd C:\CRMP-Server
samp-server-cr.exe
Запуск Linux
cd /home/crmp/server
sudo -u crmp ./samp03svr-cr
Проверяйте
server_log.txt
Возможное успешное сообщение
MySQL connection established.
Database connected successfully.
Точный текст определяется кодом игрового мода.
После подключения
- Создайте тестовый аккаунт.
- Проверьте появление записи в таблице.
- Измените игровые данные.
- Корректно выйдите с сервера.
- Войдите повторно.
- Проверьте сохранение.
Ошибка Access denied for user
Access denied for user
'crmp_user'@'localhost'
Возможные причины
- неверный пароль;
- неверное имя пользователя;
- учётная запись создана для другого Host;
- пользователю не выданы права;
- мод подключается с другого IP;
- пароль содержит символ, неправильно обработанный конфигурацией.
Проверка пользователя
SELECT
User,
Host
FROM mysql.user
WHERE User = 'crmp_user';
Проверка прав
SHOW GRANTS
FOR 'crmp_user'@'127.0.0.1';
Проверка входа вручную
mysql \
-h 127.0.0.1 \
-u crmp_user \
-p \
crmp_server
Если ручное подключение не работает, проблема находится в MySQL-пользователе или пароле, а не в CRMP.
Ошибка Unknown database
Unknown database 'crmp_server'
Причины
- база не создана;
- в конфигурации допущена ошибка;
- мод подключается к другому MySQL-серверу;
- база игрового хостинга имеет префикс;
- используется другое имя в PWN;
- учитывается регистр имени на конкретной системе.
Проверка
SHOW DATABASES
LIKE 'crmp_server';
На игровом хостинге
Вместо:
crmp_server
реальное имя может выглядеть так:
user123_crmp_server
Ошибка Can't connect to MySQL server
Can't connect to MySQL server
Connection timed out
Connection refused
Проверьте службу MySQL
sudo systemctl status mysql
Проверьте порт
sudo ss -lntp | grep 3306
Проверьте соединение
mysql \
-h MYSQL_ХОСТ \
-P 3306 \
-u crmp_user \
-p \
crmp_server
Основные причины
- MySQL не запущена;
- неверный Host;
- неверный порт;
- порт заблокирован firewall;
- MySQL слушает только локальный адрес;
- игровой хостинг блокирует внешние соединения;
- указан внутренний адрес другой сети;
- временная проблема сети.
Для локальной базы
Не открывайте 3306 в интернет. Используйте:
127.0.0.1:3306
MySQL-плагин не загружается
Сообщение
Loading plugin: mysql
Failed.
Windows
- проверьте
mysql.dll; - проверьте дополнительные DLL;
- установите Visual C++ x86;
- проверьте разрядность;
- проверьте блокировку файла;
- используйте совместимую версию.
Linux
file plugins/mysql.so
ldd plugins/mysql.so
Проверьте строку конфигурации
Windows:
plugins mysql
Linux:
plugins mysql.so
Если файл загружается на Windows, но не на Linux
DLL нельзя использовать на Linux. Необходимо найти SO-файл той же версии API.
Ошибка Runtime Error 19 после подключения MySQL
Run time error 19:
"File or function is not found"
AMX вызывает функцию, которую не предоставил загруженный плагин.
Причины
- MySQL-плагин не загрузился;
- AMX создан под другую версию;
a_mysql.incне соответствует нативному файлу;- в
server.cfgотсутствует mysql; - установлена слишком старая версия;
- установлена новая несовместимая версия.
Порядок исправления
- Проверьте статус плагина.
- Найдите отсутствующие функции в журнале.
- Определите версию include.
- Верните исходный плагин из сборки.
- Повторно скомпилируйте PWN только с совместимым include.
- Перезапустите сервер.
Ошибка Table doesn't exist
Table 'crmp_server.accounts'
doesn't exist
Причины
- SQL-файл не импортирован;
- импорт остановился с ошибкой;
- сервер подключён к пустой базе;
- название таблицы отличается;
- не совпадает регистр букв;
- использован SQL-файл от другой версии мода.
Проверка
USE `crmp_server`;
SHOW TABLES LIKE 'accounts';
Сравните запрос игрового мода
SELECT *
FROM accounts
с реальным названием таблицы в базе.
Не создавайте пустую таблицу наугад
Мод ожидает определённые столбцы, типы данных, индексы и значения по умолчанию. Найдите правильный SQL-файл.
Ошибка Unknown column
Unknown column 'admin_level'
in 'field list'
Причины
- структура базы устарела;
- AMX относится к другой версии;
- обновление SQL не выполнено;
- столбец переименован;
- импортирован неправильный дамп;
- запрос содержит ошибку.
Проверка структуры
DESCRIBE `accounts`;
Поиск столбца
SHOW COLUMNS
FROM `accounts`
LIKE 'admin_level';
Не добавляйте столбец без понимания его типа и назначения. Используйте миграционный SQL-файл соответствующей версии мода.
Ошибка Duplicate entry
Duplicate entry 'Player_Name'
for key 'accounts.name'
Мод пытается записать значение, которое уже существует в уникальном индексе.
Возможные причины
- аккаунт уже зарегистрирован;
- регистрация вызывается дважды;
- повторно импортированы данные;
- неправильно проверяется существование аккаунта;
- два сервера записывают в одну базу;
- система не учитывает регистр ника.
Проверка записи
SELECT *
FROM `accounts`
WHERE `name` = 'Player_Name';
Не удаляйте уникальный индекс сразу
Он может защищать базу от создания двух аккаунтов с одинаковым именем. Сначала исправьте логику регистрации.
Кракозябры и ошибки русского текста
Проверьте кодировку базы
SHOW CREATE DATABASE `crmp_server`;
Проверьте таблицу
SHOW CREATE TABLE `accounts`;
Проверьте соединение в моде
Некоторые версии плагина позволяют установить кодировку соединения отдельной функцией или параметром.
Основные причины
- SQL-файл сохранён в Windows-1251;
- таблица использует UTF-8;
- Pawn-исходник имеет другую кодировку;
- соединение не устанавливает нужный charset;
- данные уже были записаны с неправильным преобразованием.
Потеря соединения с MySQL
Lost connection to MySQL server
MySQL server has gone away
Возможные причины
- MySQL была перезапущена;
- соединение слишком долго не использовалось;
- сервер базы перегружен;
- запрос выполняется слишком долго;
- передаётся слишком большой пакет;
- возник сетевой обрыв;
- старый плагин неправильно восстанавливает соединение.
Проверьте журнал MySQL
sudo journalctl \
-u mysql \
-n 100 \
--no-pager
Проверьте ресурсы VPS
free -h
df -h
top
Не скрывайте проблему бесконечным reconnect
Автоматическое восстановление полезно, но постоянные переподключения указывают на неисправность базы, сети или запросов.
Настройка удалённого подключения MySQL
Удалённый доступ нужен, когда CRMP и MySQL находятся на разных серверах.
Создайте пользователя для IP игрового сервера
CREATE USER
'crmp_user'@'IP_CRMP_СЕРВЕРА'
IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
Выдайте права
GRANT ALL PRIVILEGES
ON `crmp_server`.*
TO 'crmp_user'@'IP_CRMP_СЕРВЕРА';
Разрешите порт только нужному IP
sudo ufw allow \
from IP_CRMP_СЕРВЕРА \
to any port 3306 \
proto tcp
Проверьте bind-address
MySQL должна слушать адрес, доступный CRMP-серверу. Не устанавливайте публичное прослушивание без сетевого ограничения.
Проверка с игрового VPS
mysql \
-h IP_MYSQL_СЕРВЕРА \
-P 3306 \
-u crmp_user \
-p \
crmp_server
Безопасность базы данных CRMP
Основные правила
- не используйте root в игровом моде;
- создайте отдельного пользователя;
- ограничьте его одной базой;
- разрешите подключения только с нужного IP;
- используйте уникальный пароль;
- не публикуйте конфигурацию;
- не храните пароль в клиентских файлах;
- удаляйте доступ бывших разработчиков;
- создавайте регулярные дампы;
- проверяйте журналы ошибок.
Не размещайте рабочие реквизиты
- в публичном PWN;
- в открытом репозитории;
- в архиве для скачивания;
- в скриншоте панели;
- в сообщениях общего чата;
- в клиентском filterscript.
После утечки пароля
- Смените пароль пользователя.
- Обновите конфигурацию мода.
- Перезапустите сервер.
- Проверьте неизвестные записи.
- Проверьте пользователей MySQL.
- Просмотрите журналы подключений.
Защита запросов от SQL-инъекций
Данные игрока нельзя вставлять в запрос без экранирования или параметризации.
Опасный принцип
SELECT *
FROM accounts
WHERE name = 'ДАННЫЕ_ИГРОКА'
Если строка собирается простым объединением текста, специальные символы могут изменить смысл запроса.
Безопасный подход
- используйте форматирование и экранирование, предоставляемое своей версией плагина;
- проверяйте длину ника и других значений;
- не доверяйте данным клиента;
- не формируйте названия таблиц из пользовательского ввода;
- не выводите полный SQL с паролями в публичный лог;
- используйте хеширование паролей аккаунтов.
Резервное копирование базы CRMP
Создание дампа
mysqldump \
--single-transaction \
-h 127.0.0.1 \
-u crmp_user \
-p \
crmp_server \
> crmp-database.sql
Архив с датой
mysqldump \
--single-transaction \
-u crmp_user \
-p \
crmp_server \
| gzip \
> crmp-database-$(date +%F).sql.gz
Проверка файла
ls -lh \
crmp-database-*.sql*
Сохраняйте копии
- на рабочем VPS для быстрого отката;
- на другом сервере;
- в облачном хранилище;
- на компьютере владельца;
- перед обновлением мода;
- перед изменением структуры таблиц.
Проверяйте восстановление
Создайте отдельную тестовую базу и периодически импортируйте в неё дамп. Архив без проверки может оказаться повреждённым или неполным.
Перенос MySQL на другой сервер
1. Остановите изменение данных
Закройте игровой сервер паролем или полностью остановите его.
2. Создайте финальный дамп
mysqldump \
--single-transaction \
--routines \
--triggers \
-u crmp_user \
-p \
crmp_server \
> final-crmp.sql
3. Создайте новую базу
CREATE DATABASE `crmp_server`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
4. Импортируйте дамп
mysql \
-h НОВЫЙ_MYSQL_ХОСТ \
-u crmp_user \
-p \
crmp_server \
< final-crmp.sql
5. Измените реквизиты мода
- Host;
- Port;
- Database;
- User;
- Password.
6. Запустите закрытый тест
- проверьте существующий аккаунт;
- проверьте транспорт;
- проверьте дома и бизнесы;
- создайте новую запись;
- проверьте сохранение после выхода.
Контрольный список подключения MySQL
База данных
- база создана;
- SQL-файл импортирован;
- таблицы присутствуют;
- структура соответствует моду;
- кодировка проверена.
Пользователь
- создан отдельный пользователь;
- не используется root;
- Host соответствует подключению;
- выданы права только на одну базу;
- пароль уникален.
Игровой сервер
- установлен правильный MySQL-плагин;
- плагин подключён в
server.cfg; - статус загрузки — Loaded;
- include соответствует плагину;
- AMX скомпилирован под нужную версию.
Подключение
- Host указан правильно;
- порт указан правильно;
- имя базы совпадает;
- логин и пароль совпадают;
- удалённый firewall настроен;
- ручное подключение работает.
Игровая проверка
- аккаунт создаётся;
- авторизация работает;
- данные сохраняются;
- после перезапуска данные загружаются;
- в журнале нет SQL-ошибок;
- создана резервная копия.
Частые вопросы по MySQL для CRMP
Обязательно ли серверу CRMP использовать MySQL?
Нет. Некоторые игровые моды работают с INI или SQLite. Это определяется исходным кодом сборки.
Куда импортировать SQL-файл?
В базу, реквизиты которой будут указаны в игровом моде.
Можно ли использовать phpMyAdmin?
Да. Для небольших SQL-файлов это удобный способ создать и импортировать таблицы.
Что делать с большим SQL-файлом?
Импортировать его через консоль MySQL или обратиться в поддержку хостинга.
Что указывать в Host?
Для базы на том же VPS обычно используется 127.0.0.1. Для базы игрового хостинга — адрес из панели.
Какой стандартный порт MySQL?
Обычно используется 3306, но хостинг может назначить другой.
Можно ли использовать пользователя root?
Не рекомендуется. Создайте отдельного пользователя с правами только на базу CRMP.
Где находятся данные подключения?
В PWN-коде или конфигурационном файле внутри scriptfiles.
Нужно ли компилировать PWN после изменения пароля?
Да, если реквизиты находятся в исходном коде. При отдельном INI-файле компиляция обычно не требуется.
Почему появляется Access denied?
Неверен логин, пароль, Host пользователя или выданные права.
Почему localhost не работает?
База может находиться на другом сервере либо пользователь создан для другого Host. Попробуйте адрес, выданный хостингом.
Почему появляется Unknown database?
База не создана или в моде указано неправильное имя.
Почему не существует таблица accounts?
SQL-файл не импортирован полностью, импортирована другая версия или мод подключён к пустой базе.
Что означает Runtime Error 19?
AMX не нашёл функцию плагина. Проверьте загрузку MySQL и совместимость версий.
Почему mysql.so показывает Failed?
Проверьте расширение в server.cfg, разрядность и зависимости командой ldd.
Почему mysql.dll не загружается?
Может отсутствовать дополнительная DLL, Visual C++ x86 или подходящая версия плагина.
Можно ли обновить MySQL-плагин простой заменой файла?
Не всегда. Новая версия может иметь другое API и потребовать изменения Pawn-кода и повторной компиляции.
Как проверить подключение без запуска CRMP?
Выполните вход через консольный клиент MySQL с теми же Host, User, Password и Database.
Почему русский текст отображается неправильно?
Не совпадают кодировки исходника, соединения, таблиц или импортированного SQL-файла.
Нужно ли открывать порт 3306?
Для локальной базы — нет. Для удалённой разрешайте его только с IP игрового сервера.
Как часто делать резервные копии?
Регулярно и обязательно перед обновлением мода, изменением таблиц и переносом сервера.
Можно ли хранить дамп только на игровом VPS?
Это небезопасно. Храните дополнительную копию вне рабочего сервера.
Официальные и технические источники
Заключение
Для подключения MySQL к серверу CRMP создайте отдельную базу и пользователя, выдайте ему права только на нужную схему и импортируйте SQL-файл игрового мода.
Установите MySQL-плагин, соответствующий операционной системе и версии AMX. На Windows используется DLL, на Linux — SO с расширением в строке plugins.
Реквизиты подключения могут находиться в PWN-коде или отдельном файле внутри scriptfiles. После изменения исходника необходимо повторно скомпилировать AMX.
При ошибке сначала проверьте ручное подключение к базе, статус плагина и последние строки server_log.txt. Access denied связан с пользователем или правами, Unknown database — с именем базы, а Runtime Error 19 часто указывает на несовместимый плагин.
Не используйте root, не открывайте MySQL всему интернету и не храните единственную резервную копию на рабочем VPS. Перед обновлением мода или структуры таблиц обязательно создавайте SQL-дамп.
Установка игрового режима:
Основная конфигурация сервера:
Настройка плагинов и параметров запуска:
Комментарии к инструкции
Обсудите решение, задайте вопрос или дополните инструкцию