oxmysql не может подключиться: ECONNREFUSED, access denied, unknown database

oxmysql не подключится к вашей базе данных FiveM? Исправьте ECONNREFUSED, ER_ACCESS_DENIED_ERROR и unknown database с правильной mysql_connection_string.

Когда ваш сервер запускается, oxmysql печатает одно из этих и каждый скрипт, который трогает базу данных, не работает после неё:

text
Error: connect ECONNREFUSED 127.0.0.1:3306
ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
Unknown database 'fivem'

Каждая строка означает что-то разное. Это руководство показывает, как их читать, как писать строку подключения и что проверять на сервере базы данных.

Строка подключения

oxmysql получает всё из одного convar в server.cfg. Форма URL:

cfg
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"

Форма key=value делает то же самое:

cfg
set mysql_connection_string "user=fivem;password=yourpassword;host=127.0.0.1;port=3306;database=fivem"

Поместите её выше ensure oxmysql и выше любого скрипта, который использует базу данных:

cfg
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"

ensure oxmysql
ensure ox_lib
ensure es_extended

Совет: рецепты txAdmin создают эту строку для вас. Если вы редактируете её вручную, сохраняйте кавычки и держите её в одной строке.

ECONNREFUSED: ничего не слушает

ECONNREFUSED означает, что сервер базы данных отказал в подключении или не запущен по этому адресу и порту. Работайте с этими в порядке:

  1. Запущены ли MariaDB или MySQL? На Windows с XAMPP запустите MySQL в панели управления. С установкой сервиса проверьте Services. На Linux:
bash
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb
  1. Правильны ли хост и порт? localhost и 127.0.0.1 — это одна и та же машина, порт по умолчанию — 3306. Если ваша база данных находится на другой машине или управляемом хосте, используйте её адрес и порт, и проверьте, что её брандмауэр позволяет IP вашего сервера игры.
  2. Привязана ли база данных к правильному адресу? Если она только слушает на локальной машине, удалённый сервер игры не может её достичь.

ER_ACCESS_DENIED_ERROR: неправильный вход

Access denied for user означает, что сервер ответил, но отклонил пользователя, пароль или хост, с которого этому пользователю разрешено подключаться.

  • Проверьте пользователя и пароль, войдя сами с теми же значениями:
bash
mysql -u fivem -p -h 127.0.0.1
  • Создайте выделенного пользователя вместо использования root. В консоли MariaDB или MySQL:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;
CREATE USER 'fivem'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON fivem.* TO 'fivem'@'localhost';
FLUSH PRIVILEGES;
  • Пользователь привязан к хосту. 'fivem'@'localhost' не может подключиться с другой машины. Для удалённого сервера игры создайте пользователя для этого хоста.
  • root на свежей Linux установке часто использует аутентификацию сокетов, поэтому вход по паролю через сеть не работает. Отдельный пользователь избегает проблемы.

Специальные символы в пароле

В форме mysql:// пароль находится внутри URL. Символы с значением в URL ломают его, и ошибка, которую вы получаете, обычно access denied. Кодируйте их:

Символ Напишите как
@ %40
# %23
/ %2F
: %3A
% %25
? %3F

Поэтому пароль p@ss#1 становится:

cfg
set mysql_connection_string "mysql://fivem:p%40ss%231@localhost/fivem?charset=utf8mb4"

Простейшие альтернативы — пароль, состоящий только из букв и цифр, или форма user=...;password=..., где только ; в пароле проблема.

Unknown database: имя не существует

Unknown database 'fivem' означает, что вход работал, но база данных с этим именем не существует. Две причины:

  • Имя написано неправильно. Имя в строке подключения должно совпадать точно. На Linux, имена баз данных чувствительны к регистру.
  • Вы никогда не создали её. Создайте её, затем импортируйте файл SQL вашего фреймворка в неё:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;

После этого, следующая проблема обычно отсутствующие таблицы, рассмотрено в Table 'db.x' doesn't exist.

Проверьте, что это сработало

Перезагрузите oxmysql из консоли сервера и прочитайте вывод:

text
restart oxmysql

Когда подключение успешно, oxmysql сообщает версию сервера базы данных и никакая ошибка не следует. Если скрипт всё ещё не работает, проблема в собственном запросе этого скрипта, а не в подключении.

Порядок в server.cfg

oxmysql должен быть запущен перед всем, что запрашивает базу данных. Вот порядок, который работает для сервера ESX:

cfg
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_script

На QBCore или QBox замените es_extended на qb-core или qbx_core. Ядро, которое запускается перед oxmysql, может не работать с ошибками, которые выглядят как проблемы фреймворка, например те в ESX is nil.

Контрольный список

Симптом Решение
ECONNREFUSED Запустите MariaDB или MySQL, затем проверьте хост и порт (127.0.0.1, 3306)
ER_ACCESS_DENIED_ERROR Неправильный пользователь, пароль или хост; создайте выделенного пользователя и дайте ему права на базу данных
Unknown database Создайте базу данных и совпадите её имя точно в строке
Не работает только с некоторыми паролями Кодируйте URL специальные символы, или используйте форму user=...;password=...
Строка кажется игнорируемой Поместите set mysql_connection_string выше ensure oxmysql в одну строку
Подключается, но таблицы отсутствуют Импортируйте файл .sql в эту базу данных

Короткие ответы

Куда идёт строка mysql_connection_string?

В server.cfg, выше строки ensure oxmysql. oxmysql читает convar при запуске, поэтому строка размещённая после прочитывается слишком поздно.

Мой пароль содержит @ или # и подключение не работает. Почему?

В форме mysql:// пароль является частью URL, поэтому специальные символы должны быть закодированы: @ становится %40, # становится %23, / становится %2F. Форма user=...;password=... не нуждается в кодировании.

ESX и QBCore используют другую строку подключения?

Нет. ESX, QBCore и QBox все читают один и тот же convar mysql_connection_string через oxmysql. Отличается только база данных, которую вы импортируете.

Скрипты без этой проблемы

Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.Смотреть скрипт →Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →

Читайте также