oxmysql kann keine Verbindung herstellen: ECONNREFUSED, Zugriff verweigert, Datenbank unbekannt

oxmysql verbindet sich nicht mit deiner FiveM-Datenbank? Behebe ECONNREFUSED, ER_ACCESS_DENIED_ERROR und unbekannte Datenbank mit der richtigen mysql_connection_string.

Wenn dein Server startet, druckt oxmysql eines davon und jedes Skript, das die Datenbank berührt, schlägt danach fehl:

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'

Jede Zeile bedeutet etwas anderes. Dieser Leitfaden zeigt, wie man sie liest, wie man die Verbindungs-String schreibt, und was auf dem Datenbank-Server zu prüfen ist.

Die Verbindungs-String

oxmysql bekommt alles von einer Convar in server.cfg. Die URL-Form:

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

Die Schlüssel=Wert-Form macht das Gleiche:

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

Lege sie über ensure oxmysql und über jedes Skript, das die Datenbank verwendet:

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

ensure oxmysql
ensure ox_lib
ensure es_extended

Tipp: txAdmin Rezepte erstellen diese Zeile für dich. Wenn du sie von Hand bearbeitest, behalte die Anführungszeichen und halte sie auf einer Zeile.

ECONNREFUSED: Nichts höre zu

ECONNREFUSED bedeutet, der Datenbank-Server lehnte die Verbindung ab oder läuft nicht unter dieser Adresse und diesem Port. Arbeite diese in der Reihenfolge durch:

  1. Läuft MariaDB oder MySQL? Unter Windows mit XAMPP, starte MySQL in der Kontrollleiste. Mit einer Service-Installation, prüfe Services. Unter Linux:
bash
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb
  1. Ist der Host und Port richtig? localhost und 127.0.0.1 sind die gleiche Maschine, der Standard-Port ist 3306. Wenn deine Datenbank auf einer anderen Maschine oder einem verwalteten Host ist, verwende ihre Adresse und Port und prüfe, dass ihre Firewall deine Game-Server-IP zulässt.
  2. Wird die Datenbank an die richtige Adresse gebunden? Wenn sie nur auf der lokalen Maschine zuhört, kann ein Remote-Game-Server sie nicht erreichen.

ER_ACCESS_DENIED_ERROR: falscher Login

Access denied for user bedeutet, der Server antwortete, aber lehnte den Benutzer, das Passwort oder den Host ab, von dem dieser Benutzer sich verbinden darf.

  • Prüfe den Benutzer und das Passwort indem du dich selbst mit den gleichen Werten anmeldest:
bash
mysql -u fivem -p -h 127.0.0.1
  • Erstelle einen dedizierten Benutzer anstatt root zu verwenden. In der MariaDB oder MySQL Konsole:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;
CREATE USER 'fivem'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON fivem.* TO 'fivem'@'localhost';
FLUSH PRIVILEGES;
  • Ein Benutzer ist an einen Host gebunden. 'fivem'@'localhost' kann sich nicht von einer anderen Maschine verbinden. Für einen Remote-Game-Server erstelle den Benutzer stattdessen für diesen Host.
  • root bei einer frischen Linux-Installation verwendet oft Socket-Authentifizierung, also schlägt ein Passwort-Login über das Netzwerk fehl. Ein separater Benutzer vermeidet das Problem.

Spezielle Zeichen im Passwort

Im mysql:// Form sitzt das Passwort in einer URL. Zeichen mit einer Bedeutung in URLs brechen es ab, und der Fehler, den du bekommst, ist normalerweise Zugriff verweigert. Kodiere sie:

Zeichen Schreibe es als
@ %40
# %23
/ %2F
: %3A
% %25
? %3F

Also das Passwort p@ss#1 wird zu:

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

Die einfachsten Alternativen sind ein Passwort aus nur Buchstaben und Zahlen oder die user=...;password=... Form, wo nur ; im Passwort ein Problem ist.

Unknown database: Der Name existiert nicht

Unknown database 'fivem' bedeutet, der Login funktionierte, aber keine Datenbank mit diesem Namen existiert. Zwei Ursachen:

  • Der Name ist falsch geschrieben. Der Name in der Verbindungs-String muss genau übereinstimmen. Unter Linux sind Datenbank-Namen Groß-/Kleinschreibung-empfindlich.
  • Du hast sie nie erstellt. Erstelle sie und importiere dann die SQL-Datei deines Frameworks hinein:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;

Danach ist das nächste Problem normalerweise fehlende Tabellen, behandelt in Table 'db.x' doesn't exist.

Prüfe, dass es funktioniert

Starte oxmysql neu aus der Server-Konsole und lese die Ausgabe:

text
restart oxmysql

Wenn die Verbindung erfolgreich ist, meldet oxmysql die Datenbank-Server-Version und kein Fehler folgt. Wenn ein Skript immer noch fehlschlägt, ist das Problem die eigene Abfrage des Skripts, nicht die Verbindung.

Reihenfolge in server.cfg

oxmysql muss vor allem gestartet werden, das die Datenbank abfragt. Hier ist die Reihenfolge, die für einen ESX-Server funktioniert:

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

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_script

Auf QBCore oder QBox, tausche es_extended mit qb-core oder qbx_core. Ein Core, der vor oxmysql startet, kann mit Fehlern fehlschlagen, die wie Framework-Probleme aussehen, beispielsweise die in ESX is nil.

Checkliste

Symptom Behebung
ECONNREFUSED Starte MariaDB oder MySQL, dann prüfe Host und Port (127.0.0.1, 3306)
ER_ACCESS_DENIED_ERROR Falscher Benutzer, Passwort oder Host; erstelle einen dedizierten Benutzer und gewähre ihm die Datenbank
Unknown database Erstelle die Datenbank und passe ihren Namen genau in der String an
Schlägt nur mit einigen Passwörtern fehl URL kodiere spezielle Zeichen oder verwende die user=...;password=... Form
String scheint ignoriert Lege set mysql_connection_string über ensure oxmysql, auf einer Zeile
Verbindet, aber Tabellen fehlen Importiere die .sql-Datei in diese Datenbank

Kurze Antworten

Wo geht die mysql_connection_string Zeile hin?

In server.cfg, über der ensure oxmysql Zeile. oxmysql liest die Convar, wenn sie startet, also eine Zeile, die danach gelesen wird, ist zu spät.

Mein Passwort hat ein @ oder # darin und die Verbindung schlägt fehl. Warum?

Im mysql:// Form ist das Passwort Teil einer URL, also spezielle Zeichen müssen URL-kodiert werden: @ wird zu %40, # wird zu %23, / wird zu %2F. Die user=...;password=... Form braucht keine Kodierung.

Verwenden ESX und QBCore eine andere Verbindungs-String?

Nein. ESX, QBCore und QBox lesen alle den gleichen mysql_connection_string Convar durch oxmysql. Nur die Datenbank, die du importierst, unterscheidet sich.

Scripts ohne dieses Problem

Item Creator V2Erstelle nutzbare Items mit Animationen, Props, Effekten und mehr — ganz ohne Code.Script ansehen →Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →

Weiterlesen