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:
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:
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"Forma key=value robi to samo:
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:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extendedPorada: 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:
- Czy MariaDB lub MySQL jest uruchomiony? Na Windows z XAMPP, uruchom MySQL w panelu kontrolnym. Z instalacją usługi, sprawdzaj Usługi. Na Linux:
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb- Czy host i port są prawidłowe?
localhosti127.0.0.1to ta sama maszyna, domyślny port to3306. 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. - 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:
mysql -u fivem -p -h 127.0.0.1- Stwórz dedykowanego użytkownika zamiast używania
root. W konsoli MariaDB lub MySQL:
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. rootna ś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ę:
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:
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:
restart oxmysqlGdy 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:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_scriptNa 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.

