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:
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:
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"Die Schlüssel=Wert-Form macht das Gleiche:
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:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extendedTipp: 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:
- Läuft MariaDB oder MySQL? Unter Windows mit XAMPP, starte MySQL in der Kontrollleiste. Mit einer Service-Installation, prüfe Services. Unter Linux:
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb- Ist der Host und Port richtig?
localhostund127.0.0.1sind die gleiche Maschine, der Standard-Port ist3306. 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. - 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:
mysql -u fivem -p -h 127.0.0.1- Erstelle einen dedizierten Benutzer anstatt
rootzu verwenden. In der MariaDB oder MySQL Konsole:
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. rootbei 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:
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:
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:
restart oxmysqlWenn 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:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_scriptAuf 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.

