oxmysql nie może się połączyć: ECONNREFUSED, dostęp odrzucony, nieznana baza danych

oxmysql nie będzie się łączyć do twojej bazy danych FiveM? Napraw ECONNREFUSED, ER_ACCESS_DENIED_ERROR i nieznaną bazę danych z prawidłowym mysql_connection_string.

Gdy twój serwer się uruchamia, oxmysql drukuje jeden z tych i każdy skrypt który dotyka bazy danych nie powiedzie się po nim:

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'

Każda linia oznacza coś innego. Ten przewodnik pokazuje jak je przeczytać, jak napisać ciąg połączenia, i co sprawdzić na serwerze bazy danych.

Ciąg połączenia

oxmysql otrzymuje wszystko z jednego convara w server.cfg. Forma URL:

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

Forma key=value robi to samo:

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

Umieść to powyżej ensure oxmysql, i powyżej każdego skryptu który używa bazy danych:

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

ensure oxmysql
ensure ox_lib
ensure es_extended

Porada: przepisy txAdmin to tworzą dla ciebie. Jeśli edytujesz to ręcznie, trzymaj cudzysłowy, i trzymaj to na jednej linii.

ECONNREFUSED: nic nie słucha

ECONNREFUSED oznacza serwer bazy danych odmówił połączenia lub nie jest uruchomiony na tym adresie i porcie. Pracuj przez te w kolejności:

  1. Czy MariaDB lub MySQL jest uruchomiony? Na Windows z XAMPP, uruchom MySQL w panelu kontrolnym. Z instalacją usługi, sprawdzaj Usługi. Na Linux:
bash
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb
  1. Czy host i port są prawidłowe? localhost i 127.0.0.1 to ta sama maszyna, domyślny port to 3306. Jeśli twoja baza danych jest na innej maszynie lub zarządzanym hoście, użyj jego adresu i portu, i sprawdzaj że jego firewall pozwala na IP twojego serwera gry.
  2. Czy baza danych jest związana z prawidłowym adresem? Jeśli tylko słucha na lokalnej maszynie, zdalny serwer gry nie może go osiągnąć.

ER_ACCESS_DENIED_ERROR: zły login

Access denied for user oznacza serwer odpowiedział, ale odrzucił użytkownika, hasło, lub hosta z którego użytkownik może się połączyć.

  • Sprawdzaj użytkownika i hasło przez zalogowanie się sam z tymi samymi wartościami:
bash
mysql -u fivem -p -h 127.0.0.1
  • Stwórz dedykowanego użytkownika zamiast używania root. W konsoli MariaDB lub 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;
  • Użytkownik jest związany z hostem. 'fivem'@'localhost' nie może się połączyć z innej maszyny. Dla zdalnego serwera gry, stwórz użytkownika dla tego hosta zamiast.
  • root na świeżej instalacji Linux często używa autentykacji socket, więc login hasła przez sieć nie powiedzie się. Osobny użytkownik unika problemu.

Znaki specjalne w haśle

W formie mysql://, hasło siedzi wewnątrz URL'a. Znaki z znaczeniem w URL'ach go łamią, i błąd który otrzymujesz to zwykle dostęp odrzucony. Koduj je:

Znak Pisz go jako
@ %40
# %23
/ %2F
: %3A
% %25
? %3F

Więc hasło p@ss#1 staje się:

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

Najprostsze alternatywy to hasło wykonane z tylko liter i cyfr, lub forma user=...;password=..., gdzie tylko ; w haśle to problem.

Nieznana baza danych: nazwa nie istnieje

Unknown database 'fivem' oznacza login pracował, ale żadna baza danych z tą nazwą nie istnieje. Dwie przyczyny:

  • Nazwa jest błędnie napisana. Nazwa w ciągu połączenia musi dokładnie pasować. Na Linux, nazwy baz danych są wrażliwe na wielkość liter.
  • Nigdy jej nie stworzyłeś. Stwórz ją, potem importuj plik SQL twojego framework'u do niej:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;

Po tym, następny problem to zwykle brakujące tabele, objęte w Tabela 'db.x' nie istnieje.

Sprawdzaj że zadziałało

Uruchom ponownie oxmysql z konsoli serwera i przeczytaj wyjście:

text
restart oxmysql

Gdy połączenie się powiedzie, oxmysql raportuje wersję serwera bazy danych i bez błędu następuje. Jeśli skrypt wciąż nie powiedzie się, problem to jego własne zapytanie, nie połączenie.

Kolejność w server.cfg

oxmysql musi być uruchomiony zanim cokolwiek który pyta bazę danych. Tutaj jest kolejność która pracuje dla serwera ESX:

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

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_script

Na QBCore lub QBox, zamień es_extended na qb-core lub qbx_core. Rdzeń który się uruchamia przed oxmysql może nie powiedzie się z błędami które wyglądają jak problemy framework'u, na przykład te w ESX jest nil.

Checklist

Objaw Naprawić
ECONNREFUSED Uruchom MariaDB lub MySQL, potem sprawdzaj host i port (127.0.0.1, 3306)
ER_ACCESS_DENIED_ERROR Zły użytkownik, hasło lub host; stwórz dedykowanego użytkownika i przyznaj mu bazę danych
Unknown database Stwórz bazę danych, i dopasuj jej nazwę dokładnie w ciągu
Nie powiedzie się tylko z niektórymi hasłami Koduj znaki specjalne URL, lub użyj formy user=...;password=...
Ciąg wydaje się ignorowany Umieść set mysql_connection_string powyżej ensure oxmysql, na jednej linii
Łączy, ale tabele brakują Importuj plik .sql do tej bazy danych

Szybkie odpowiedzi

Gdzie idzie linia mysql_connection_string?

W server.cfg, powyżej linii ensure oxmysql. oxmysql czyta convar gdy się uruchamia, więc linia umieszczona po tym jest czytana zbyt późno.

Moje hasło ma @ lub # w nim i połączenie nie powiedzie się. Dlaczego?

W formie mysql:// hasło jest częścią URL'a, więc znaki specjalne muszą być kodowane URL: @ staje się %40, # staje się %23, / staje się %2F. Forma user=...;password=... nie potrzebuje kodowania.

Czy ESX i QBCore używają innego ciągu połączenia?

Nie. ESX, QBCore i QBox wszystkie czytają ten sam convar mysql_connection_string poprzez oxmysql. Tylko baza danych którą importujesz się różni.

Skrypty bez tego problemu

Item Creator V2Twórz używalne przedmioty z animacjami, propami, efektami i nie tylko — bez pisania kodu.Zobacz skrypt →Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →

Czytaj dalej