Miami RP Project СЕРВЕР MTA:SA ONLINE СЕРВЕР GTA 5 RAGE MP В РАЗРАБОТКЕ ЗАПУСК MTA RAGE MP: в разработке

Подключение MySQL к серверу CRMP — база данных и ошибки

Сегодня Обновлено: Сегодня 0.0 (0)
Подключение MySQL к серверу CRMP — база данных и ошибки
Категория Подключение MySQL к серверу CRMP Опубликовано Сегодня Обновлено Сегодня Просмотров 3

База данных MySQL используется на серверах CRMP для хранения аккаунтов, персонажей, транспорта, домов, бизнесов, организаций и других постоянных данных. Чтобы игровой мод работал правильно, необходимо создать отдельную базу и пользователя, импортировать SQL-файл, установить совместимый MySQL-плагин и указать корректные реквизиты подключения.

Простого создания пустой базы недостаточно. Структура таблиц должна соответствовать игровому моду, версия плагина — исходному коду Pawn, а пользователь MySQL должен иметь права только на базу конкретного сервера.

В руководстве рассмотрены создание MySQL-базы на VPS и игровом хостинге, импорт SQL через phpMyAdmin и командную строку, настройка подключения в CRMP-моде, проверка плагина и устранение распространённых ошибок.

Сначала установите игровой мод:

Установка игрового мода на сервер CRMP

Настройка плагинов и параметров запуска:

Настройка файла server.cfg для 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 или «Базы данных».

Порядок действий

  1. Откройте панель игрового хостинга.
  2. Перейдите в раздел MySQL.
  3. Создайте новую базу.
  4. Создайте пользователя или получите автоматически созданного.
  5. Сохраните адрес, порт, имя базы, логин и пароль.
  6. Откройте phpMyAdmin.
  7. Импортируйте SQL-файл игрового мода.
  8. Укажите реквизиты в конфигурации сборки.
  9. Перезапустите сервер.

Хостинг может выдать

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

  1. Авторизуйтесь в phpMyAdmin.
  2. Откройте раздел «Базы данных».
  3. Введите имя crmp_server.
  4. Выберите подходящее сравнение.
  5. Создайте базу.
  6. Откройте раздел учётных записей пользователей.
  7. Создайте отдельного пользователя.
  8. Выдайте ему права только на созданную базу.

На игровом хостинге

Панель может запрещать ручное создание пользователей через 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

  1. Откройте phpMyAdmin.
  2. Выберите созданную базу.
  3. Перейдите во вкладку «Импорт».
  4. Нажмите кнопку выбора файла.
  5. Укажите database.sql.
  6. Оставьте формат SQL.
  7. Проверьте кодировку файла.
  8. Запустите импорт.
  9. Дождитесь сообщения об успешном завершении.

Если файл слишком большой

  • используйте импорт через командную строку;
  • увеличьте ограничения 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 к каждому названию.

После изменения

  1. Сохраните server.cfg.
  2. Полностью остановите сервер.
  3. Запустите процесс заново.
  4. Проверьте статус загрузки плагина.

Успешная загрузка

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.

Точный текст определяется кодом игрового мода.

После подключения

  1. Создайте тестовый аккаунт.
  2. Проверьте появление записи в таблице.
  3. Измените игровые данные.
  4. Корректно выйдите с сервера.
  5. Войдите повторно.
  6. Проверьте сохранение.

Ошибка 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;
  • установлена слишком старая версия;
  • установлена новая несовместимая версия.

Порядок исправления

  1. Проверьте статус плагина.
  2. Найдите отсутствующие функции в журнале.
  3. Определите версию include.
  4. Верните исходный плагин из сборки.
  5. Повторно скомпилируйте PWN только с совместимым include.
  6. Перезапустите сервер.

Ошибка 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.

После утечки пароля

  1. Смените пароль пользователя.
  2. Обновите конфигурацию мода.
  3. Перезапустите сервер.
  4. Проверьте неизвестные записи.
  5. Проверьте пользователей MySQL.
  6. Просмотрите журналы подключений.

Защита запросов от 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-дамп.

Установка игрового режима:

Установка игрового мода CRMP

Основная конфигурация сервера:

Настройка CRMP после установки

Настройка плагинов и параметров запуска:

Настройка server.cfg

RSS инструкций
0 комментариев 0.0 из 0 оценок
MIAMI RP COMMUNITY

Комментарии к инструкции

Обсудите решение, задайте вопрос или дополните инструкцию

Всего: 0
Страница: /
Показано: 0
Добавление комментариев сейчас недоступно для текущего пользователя.