FiveM Datenbank Guide: MySQL & oxmysql einrichten (2026)
Vollständiger Guide zur Einrichtung einer MySQL/MariaDB-Datenbank für deinen FiveM Server mit oxmysql. Installation, Konfiguration, Framework-SQL-Imports, Performance-Tuning, Backups und häufige Fehler.

Ohne eine korrekt konfigurierte Datenbank läuft kein FiveM Roleplay-Server auf Dauer stabil. Spielerdaten — Geld, Fahrzeuge, Häuser, Jobs, Inventar — alles liegt in MySQL. Ist die Datenbank falsch eingerichtet, verlieren Spieler ihren Fortschritt, der Server bricht unter Last zusammen, oder Skripte werfen bei jeder Aktion Fehler.
Dieser Guide deckt alles ab: welches Datenbanksystem du verwenden solltest, wie du es installierst und konfigurierst, wie du es über oxmysql mit deinem Server verbindest, und wie du es unter echten Spielerlasten zuverlässig betreibst.
MySQL vs. MariaDB für FiveM
Die kurze Antwort: Nimm MariaDB. Hier ist der Grund.
MariaDB ist ein Community-Fork von MySQL, ursprünglich von den originalen MySQL-Entwicklern erstellt, nachdem Oracle MySQL 2010 übernommen hat. Es ist ein Drop-in-Ersatz — jeder MySQL-Befehl, jeder Connection-String und jedes Client-Tool funktioniert identisch. Praktische Vorteile für FiveM-Server gibt es trotzdem:
| Eigenschaft | MySQL 8.0 | MariaDB 10.11+ | |---|---|---| | Performance (OLTP) | Gut | Besser — besonders bei gleichzeitigen Schreibvorgängen | | Reservierte Keywords | Erweiterte Liste (verursacht Skript-Konflikte) | Weniger reservierte Wörter | | Standard-Storage-Engine | InnoDB | InnoDB (gleich) | | JSON-Unterstützung | Nativ | Nativ | | FiveM Community-Empfehlung | Verbreitet | Mehrheitliche Empfehlung | | Lizenz | GPL + Oracle kommerziell | Nur GPL |
Das Problem mit MySQL-8-Keywords trifft viele FiveM-Server direkt. Zahlreiche ESX-Skripte verwenden Spaltennamen wie rank, groups, type oder status — alles reservierte Keywords in MySQL 8.0. MariaDB reserviert diese Wörter nicht auf dieselbe Weise, was dir einen Schwarm von Fehlermeldungen beim Serverstart erspart.
Die meisten FiveM-Hosting-Anbieter nutzen standardmäßig MariaDB. Wenn du deinen eigenen VPS oder Dedicated Server betreibst, wähle MariaDB.
Schritt-für-Schritt-Installation
Windows: XAMPP oder eigenständiges MariaDB
Option 1: XAMPP (am einfachsten für lokale Entwicklung)
- XAMPP von apachefriends.org herunterladen
- Installieren und das XAMPP Control Panel öffnen
- Den MySQL-Dienst starten (aktuelle XAMPP-Versionen nutzen intern MariaDB)
- phpMyAdmin unter
http://localhost/phpmyadminöffnen - Standard-Zugangsdaten: Benutzer
root, kein Passwort — vor jeder Netzwerkexposition unbedingt ändern
Option 2: Eigenständiges MariaDB (Produktion unter Windows)
- Den MariaDB MSI-Installer von mariadb.org/download herunterladen
- Installer starten — "Use UTF8 as default server character set" ankreuzen
- Während der Installation ein starkes Root-Passwort setzen
- MariaDB installiert sich als Windows-Dienst und startet automatisch
C:\Program Files\MariaDB 10.11\binzur PATH-Umgebungsvariable hinzufügen- Installation prüfen:
mysql -u root -p
# Root-Passwort eingeben — du siehst den MariaDB-Prompt
Linux: Ubuntu/Debian
# Paketlisten aktualisieren
sudo apt update
# MariaDB Server installieren
sudo apt install mariadb-server mariadb-client -y
# Sicherheits-Assistent ausführen
sudo mysql_secure_installation
# Empfehlungen: Root-Passwort setzen, anonyme Benutzer entfernen,
# Remote-Root-Login deaktivieren, Test-Datenbank entfernen
# Dienst aktivieren und starten
sudo systemctl enable mariadb
sudo systemctl start mariadb
# Status prüfen
sudo systemctl status mariadb
Linux: CentOS/RHEL/Rocky Linux
# MariaDB aus dem offiziellen Repository installieren
sudo dnf install mariadb-server mariadb -y
# Aktivieren und starten
sudo systemctl enable --now mariadb
# Sicherheits-Assistent
sudo mysql_secure_installation
Pterodactyl / Panel-gehostete Server
Wenn du Pterodactyl verwendest, bieten die meisten Panels einen integrierten Datenbankmanager. Im Pterodactyl-Admin-Panel:
- Im Server-Panel zu Databases navigieren
- Create Database klicken
- Das Panel erstellt Datenbank, Benutzer und Berechtigungen automatisch
- Host, Port, Benutzername, Passwort und Datenbankname kopieren — diese kommen in den Connection-String
Bei Docker-basierten Setups nutze den internen Container-Hostnamen (oft mariadb oder der Service-Name) statt 127.0.0.1.
Datenbank und Benutzer erstellen
Betreibe deinen FiveM Server niemals als root-Datenbankbenutzer. Erstelle eine eigene Datenbank und einen dedizierten Benutzer mit nur den notwendigen Berechtigungen.
Als Root mit MariaDB/MySQL verbinden:
mysql -u root -p
Dann diese SQL-Befehle ausführen:
-- Datenbank erstellen (utf8mb4 für vollständige Unicode-Unterstützung inkl. Emojis)
CREATE DATABASE fivem_server CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Dedizierten Benutzer erstellen ('fivemuser' und 'StarkesPasswort123!' anpassen)
CREATE USER 'fivemuser'@'localhost' IDENTIFIED BY 'StarkesPasswort123!';
-- Alle Berechtigungen auf der FiveM-Datenbank gewähren
GRANT ALL PRIVILEGES ON fivem_server.* TO 'fivemuser'@'localhost';
-- Wenn der FiveM-Server auf einem anderen Rechner läuft, IP statt localhost verwenden:
-- CREATE USER 'fivemuser'@'192.168.1.100' IDENTIFIED BY 'StarkesPasswort123!';
-- GRANT ALL PRIVILEGES ON fivem_server.* TO 'fivemuser'@'192.168.1.100';
-- Berechtigungsänderungen anwenden
FLUSH PRIVILEGES;
-- Benutzer prüfen
SELECT user, host FROM mysql.user WHERE user = 'fivemuser';
-- Verbindung beenden
EXIT;
Neue Benutzerverbindung testen:
mysql -u fivemuser -p fivem_server
# Passwort eingeben — du bist jetzt in der fivem_server-Datenbank
oxmysql: Installation und Konfiguration
oxmysql ist die moderne, aktiv gepflegte MySQL-Ressource für FiveM. Sie ersetzt die älteren mysql-async- und ghmattimysql-Ressourcen mit deutlich besserer Performance und einer async/promise-basierten API.
Download
- Zur oxmysql GitHub-Releases-Seite gehen
- Das neueste Release als ZIP herunterladen (
oxmysql.zip) - In das
resources-Verzeichnis des Servers entpacken:resources/[standalone]/oxmysql/
Die Ordnerstruktur sollte so aussehen:
resources/
[standalone]/
oxmysql/
fxmanifest.lua
build/
mysql.js
server.cfg Konfiguration
Folgendes in die server.cfg eintragen. oxmysql muss vor jeder abhängigen Ressource gestartet werden:
# oxmysql — muss als erstes stehen
ensure oxmysql
# Framework und andere Ressourcen danach
ensure es_extended
ensure [esx]
Den Connection-String als Convar setzen. Das Format ist eine Standard-MySQL-URI:
set mysql_connection_string "mysql://fivemuser:StarkesPasswort123!@localhost/fivem_server"
Connection-String Format
mysql://[benutzer]:[passwort]@[host]:[port]/[datenbank]?[optionen]
Beispiele:
# Lokale Standardverbindung
set mysql_connection_string "mysql://fivemuser:MeinPasswort@localhost/fivem_server"
# Mit explizitem Port (Standard-MySQL-Port ist 3306)
set mysql_connection_string "mysql://fivemuser:MeinPasswort@localhost:3306/fivem_server"
# Entfernte Datenbank
set mysql_connection_string "mysql://fivemuser:[email protected]/fivem_server"
# Mit SSL deaktiviert (für lokale Verbindungen empfohlen)
set mysql_connection_string "mysql://fivemuser:MeinPasswort@localhost/fivem_server?ssl=false"
# Mit Zeichensatz-Erzwingung (empfohlen)
set mysql_connection_string "mysql://fivemuser:MeinPasswort@localhost/fivem_server?charset=utf8mb4"
Wenn das Passwort Sonderzeichen enthält (@, /, ! usw.), müssen diese URL-kodiert werden. Zum Beispiel wird P@ss!wort zu P%40ss%21wort.
Verbindung prüfen
FiveM-Server starten und die Konsolenausgabe prüfen. Folgendes sollte erscheinen:
[ oxmysql ] Database server connection established.
Erscheint stattdessen ein Fehler, siehe den Abschnitt zu häufigen Fehlern weiter unten.
oxmysql vs. mysql-async vs. ghmattimysql
Wer einen älteren Server übernimmt, findet möglicherweise eine der Legacy-MySQL-Ressourcen bereits installiert. Ein direkter Vergleich:
| Eigenschaft | oxmysql | mysql-async | ghmattimysql | |---|---|---|---| | Aktiv gepflegt | Ja | Nein (archiviert) | Nein | | Performance | Am höchsten | Mittel | Mittel | | Promise/async-API | Nativ | Teilweise | Teilweise | | Callback-API | Unterstützt (Rückwärtskompatibilität) | Ja | Ja | | Connection-Pooling | Ja, konfigurierbar | Einfach | Einfach | | ESX-Kompatibilität | Vollständig | Vollständig | Vollständig | | QBCore-Kompatibilität | Vollständig | Vollständig | Vollständig | | QBox/ox_core | Nativ (gleiches Team) | Nein | Nein | | Fehlermeldungen | Detailliert | Einfach | Einfach | | TypeScript-Typen | Ja | Nein | Nein |
Die Migration von mysql-async oder ghmattimysql zu oxmysql ist in den meisten Fällen unkompliziert, da oxmysql rückwärtskompatible Exports für die gängigen Funktionssignaturen bereitstellt (MySQL.Sync.execute, MySQL.Async.execute usw.).
Verwende oxmysql. Es gibt keinen Grund, für neue oder bestehende Server die Alternativen zu nutzen.
Framework-Datenbank einrichten
Jedes große Framework erfordert den Import seines SQL-Schemas, bevor der Server gestartet wird. Das geschieht einmalig, nach dem Erstellen der Datenbank.
ESX (es_extended)
# SQL-Datei befindet sich unter: es_extended/sql/es_extended.sql
# Import via Kommandozeile
mysql -u fivemuser -p fivem_server < /pfad/zu/resources/[framework]/es_extended/sql/es_extended.sql
# Oder via phpMyAdmin:
# 1. Datenbank in der linken Leiste auswählen
# 2. Reiter "Importieren" klicken
# 3. SQL-Datei auswählen und "OK" klicken
Wichtige ESX-Tabellen: users, user_accounts, user_inventory, user_licenses, user_vehicles, jobs, job_grades, society_money, addon_account, datastore
Nach dem Import prüfen:
USE fivem_server;
SHOW TABLES;
-- Alle ESX-Tabellen sollten aufgelistet sein
QBCore
# QBCore SQL-Datei: qb-core/sql/qbcore.sql
mysql -u fivemuser -p fivem_server < /pfad/zu/resources/[framework]/qb-core/sql/qbcore.sql
Wichtige QBCore-Tabellen: players, player_vehicles, player_houses, player_outfits, bank_accounts, job_grades, gangs, gang_grades
QBox (ox_core)
QBox nutzt ox_core mit einem eigenen SQL-Schema sowie ox_inventory, falls verwendet:
# ox_core Schema
mysql -u fivemuser -p fivem_server < /pfad/zu/resources/[ox]/ox_core/sql/ox_core.sql
# ox_inventory Schema (falls verwendet)
mysql -u fivemuser -p fivem_server < /pfad/zu/resources/[ox]/ox_inventory/sql/ox_inventory.sql
Wichtige ox_core-Tabellen: characters, character_groups, character_vehicles, ox_storage
Nach dem Import eines Framework-Schemas den Server starten. Falls weitere Ressourcen SQL-Dateien mitliefern (Telefone, Garagen, Banken), diese ebenfalls importieren — die jeweilige README-Datei gibt Auskunft.
Performance-Tuning
Die Standard-Einstellungen von MariaDB/MySQL sind konservativ und für minimale Hardware ausgelegt. Ein FiveM-Server unter echter Last braucht andere Werte.
my.cnf / my.ini Konfiguration
MariaDB-Konfigurationsdatei bearbeiten:
- Linux:
/etc/mysql/my.cnfoder/etc/my.cnf.d/server.cnf - Windows:
C:\Program Files\MariaDB 10.11\data\my.ini
[mysqld]
# InnoDB Buffer Pool — die wichtigste Einstellung überhaupt
# Auf 50-70 % des für die Datenbank verfügbaren RAMs setzen
# Kleiner VPS (2 GB RAM): 512M
# Mittlerer VPS (4 GB RAM): 1G
# Dedizierter DB-Server (16 GB RAM): 8G
innodb_buffer_pool_size = 1G
# Mehrere Buffer-Pool-Instanzen für bessere Parallelität
# Auf Anzahl CPU-Kerne setzen, maximal 8
innodb_buffer_pool_instances = 4
# Log-Dateigröße — größer = schnellere Schreibvorgänge, längere Recovery
innodb_log_file_size = 256M
# Flush-Häufigkeit der Logs (2 = einmal pro Sekunde, nicht pro Transaktion)
# Wert 2 riskiert bis zu 1 Sekunde Datenverlust bei Absturz — für FiveM akzeptabel
innodb_flush_log_at_trx_commit = 2
# Maximale gleichzeitige Verbindungen
# Basierend auf Spieleranzahl — siehe Tabelle unten
max_connections = 100
# Verbindungs-Timeout
wait_timeout = 600
interactive_timeout = 600
# Zeichensatz (muss zur Datenbank passen)
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
Nach Änderungen MariaDB neu starten:
sudo systemctl restart mariadb
Connection-Pool-Größe nach Spieleranzahl
oxmysql verwaltet einen Pool von Datenbankverbindungen. Zu wenige Verbindungen führen zu langen Query-Warteschlangen; zu viele verschwenden Speicher und treffen das max_connections-Limit.
In der server.cfg einstellen:
# Pool-Größe über den Connection-String festlegen
set mysql_connection_string "mysql://benutzer:passwort@localhost/fivem_server?connectionLimit=10"
| Servergröße | Max. Spieler | Empfohlener Pool | max_connections | |---|---|---|---| | Klein | 16 | 5–8 | 50 | | Mittel | 32 | 10–15 | 75 | | Groß | 64 | 15–25 | 100 | | Sehr groß | 128+ | 25–40 | 150 |
Der connectionLimit-Wert im Connection-String steuert, wie viele gleichzeitige Verbindungen oxmysql halten kann. max_connections in MariaDB sollte mindestens 20 höher liegen als die Pool-Größe, um Platz für Admin-Verbindungen und Monitoring zu lassen.
Index-Tipps
Langsame Queries haben meistens fehlende Indizes. Den Slow-Query-Log aktivieren, um sie zu finden:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
Häufig genutzte FiveM-Tabellen, die von Indizes profitieren:
-- Beispiel: Spielerdaten nach Identifier suchen
CREATE INDEX idx_identifier ON players(identifier);
-- ESX users-Tabelle — meist bereits indiziert, aber zur Sicherheit prüfen
SHOW INDEX FROM users;
Backup-Strategie
Backups sind unverzichtbar. Datenverluste bei Spielern gehören zu den schnellsten Wegen, eine Server-Community zu zerstören.
Manuelles Backup mit mysqldump
# Gesamte Datenbank in Datei exportieren
mysqldump -u fivemuser -p fivem_server > /backups/fivem_server_$(date +%Y%m%d_%H%M%S).sql
# Mit Komprimierung (deutlich kleinere Dateien)
mysqldump -u fivemuser -p fivem_server | gzip > /backups/fivem_server_$(date +%Y%m%d).sql.gz
# Aus Backup wiederherstellen
mysql -u fivemuser -p fivem_server < /backups/fivem_server_20260304.sql
# Aus komprimiertem Backup wiederherstellen
gunzip < /backups/fivem_server_20260304.sql.gz | mysql -u fivemuser -p fivem_server
Automatische tägliche Backups (Linux-Cron)
Backup-Skript unter /usr/local/bin/fivem-db-backup.sh erstellen:
#!/bin/bash
# Konfiguration
DB_USER="fivemuser"
DB_PASS="StarkesPasswort123!"
DB_NAME="fivem_server"
BACKUP_DIR="/backups/fivem"
AUFBEWAHRUNG_TAGE=14
# Backup-Verzeichnis erstellen, falls nicht vorhanden
mkdir -p "$BACKUP_DIR"
# Dateiname mit Zeitstempel
DATEINAME="$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d_%H%M%S).sql.gz"
# Backup ausführen
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$DATEINAME"
# Backups älter als Aufbewahrungsfrist löschen
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +$AUFBEWAHRUNG_TAGE -delete
echo "Backup abgeschlossen: $DATEINAME"
Ausführbar machen und planen:
chmod +x /usr/local/bin/fivem-db-backup.sh
# Zur Crontab hinzufügen — täglich um 04:00 Uhr
crontab -e
# Diese Zeile einfügen:
0 4 * * * /usr/local/bin/fivem-db-backup.sh >> /var/log/fivem-backup.log 2>&1
Zugangsdaten nicht im Skript speichern
Passwörter direkt in Shell-Skripten sind ein Sicherheitsrisiko. Stattdessen eine MySQL-Optionsdatei verwenden:
# /etc/mysql/backup.cnf erstellen
[client]
user=fivemuser
password=StarkesPasswort123!
host=localhost
# Berechtigungen einschränken
chmod 600 /etc/mysql/backup.cnf
# Im Backup-Skript mit --defaults-file verwenden
mysqldump --defaults-file=/etc/mysql/backup.cnf fivem_server | gzip > "$DATEINAME"
Häufige Fehler und Lösungen
| Fehler | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Access denied for user 'fivemuser'@'localhost' | Falsches Passwort oder fehlende Host-Berechtigung | GRANT ALL PRIVILEGES ON fivem_server.* TO 'fivemuser'@'localhost'; FLUSH PRIVILEGES; erneut ausführen |
| Connection refused / Can't connect to MySQL server | MariaDB läuft nicht oder Firewall blockiert Port 3306 | sudo systemctl start mariadb ausführen und sudo ufw status prüfen |
| Table 'fivem_server.users' doesn't exist | SQL-Schema nicht importiert | SQL-Datei des Frameworks importieren wie im Framework-Abschnitt beschrieben |
| Too many connections | Pool-Größe überschreitet max_connections | max_connections in my.cnf erhöhen oder connectionLimit im Connection-String senken |
| You have an error in your SQL syntax near 'rank' | MySQL-8-Keyword-Konflikt | Zu MariaDB wechseln oder Spaltenname in Backticks setzen: `rank` |
| Unknown column 'groups' in 'field list' | MySQL-8-Keyword-Konflikt | Gleiche Lösung — zu MariaDB wechseln oder Backtick-Schreibweise verwenden |
| Lost connection to MySQL server during query | wait_timeout zu niedrig oder Netzwerkinstabilität | wait_timeout = 600 in my.cnf erhöhen |
| Incorrect string value bei einer Spalte | Datenbank-Zeichensatz ist nicht utf8mb4 | Datenbank mit CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci neu anlegen |
| [oxmysql] Slow query (>100ms) in der Konsole | Fehlender Index oder ineffiziente Query | Slow-Query-Log aktivieren, Query identifizieren, passenden Index anlegen |
| ECONNRESET-Fehler in oxmysql | Connection-Pool erschöpft oder MariaDB neu gestartet | Pool-Größe erhöhen, MariaDB-Stabilität prüfen, Ressource neu starten |
Häufige Fragen
Brauche ich einen separaten Server für die Datenbank?
Nein. Für Server unter 64 Spielern ist es völlig in Ordnung, MariaDB auf demselben Rechner wie FiveM zu betreiben. Ab 128+ Spielern und vielen aktiven Skripten reduziert ein dedizierter Datenbankserver Latenzen und Ressourcenkonflikte — aber es ist optional, keine Pflicht.
Kann ich einen Cloud-Datenbankanbieter wie PlanetScale oder AWS RDS verwenden?
Ja. Den Connection-String des Anbieters in oxmysql eintragen. Beachte, dass Netzwerklatenzen (selbst wenige Millisekunden) sich summieren, wenn Skripte viele Queries pro Tick ausführen. Lokale oder datacenter-nahe Datenbanken performen immer besser.
Wie migriere ich von mysql-async zu oxmysql?
- oxmysql herunterladen und in die Ressourcen einfügen
- In der
server.cfgensure mysql-asyncdurchensure oxmysqlersetzen - Die meisten Skripte nutzen rückwärtskompatible Exports und funktionieren ohne Code-Änderungen
- Zuerst auf einem Entwicklungsserver testen, bevor die Produktion angefasst wird
Was ist der Unterschied zwischen oxmysql execute und query?
execute ist für Statements, die Daten ändern (INSERT, UPDATE, DELETE). query ist für SELECT-Statements, die Zeilen zurückgeben. In der Praxis verarbeitet oxmysql beides, aber die semantisch korrekte Funktion zu verwenden macht den Code verständlicher.
Wie finde ich die langsamsten Queries auf meinem Server?
Den Slow-Query-Log in my.cnf mit long_query_time = 0.5 aktivieren. Nach einer Spielsession /var/log/mysql/slow.log prüfen. Mit mysqldumpslow lässt sich das Log zusammenfassen.
Kann ich SQLite statt MySQL verwenden?
Manche kleinen Skripte unterstützen SQLite über die Kompatibilitätsebene von oxmysql, aber kein großes FiveM-Framework (ESX, QBCore, QBox) unterstützt SQLite für seine Kerntabellen. Bei MariaDB bleiben.
Mein Server stürzt ab, wenn viele Spieler gleichzeitig einloggen — liegt das an der Datenbank?
Möglicherweise. Die FiveM-Server-Konsole auf [oxmysql]-Fehler während des Absturzes prüfen. Wenn beim Login Too many connections-Warnungen oder starke Slow-Query-Spikes auftreten, die Connection-Pool-Größe erhöhen und innodb_buffer_pool_size anpassen. Außerdem prüfen, ob das Framework eine Login-Queue hat, um Verbindungen zu staffeln.
Reichen die Backups des Hosting-Panels?
Nein — zumindest nicht alleine. Panel-Backups laufen nicht garantiert nach Plan und überleben Panel-Migrationen nicht immer. Immer eigene mysqldump-Backups an einen separaten Ort exportieren, den du selbst kontrollierst.
Fazit
Eine korrekt konfigurierte Datenbank ist unsichtbar — sie funktioniert einfach. Eine falsch eingerichtete verursacht zufällige Fehler, Spieler-Datenverluste und Abstürze unter Last. Die hier beschriebenen Schritte decken alles ab: von der ersten Installation bis zum produktionsreifen Betrieb.
Für die Framework-Skripte, die auf dieser Datenbankgrundlage aufbauen, findest du im VertexMods Shop Premium-Ressourcen für ESX, QBCore und QBox. Einen umfassenderen Überblick über alle wichtigen Server-Skripte bietet der FiveM Scripts Complete Guide.
Die wichtigsten Punkte zum Mitnehmen: MariaDB statt MySQL 8 verwenden, oxmysql einsetzen, einen dedizierten Datenbankbenutzer anlegen, den Buffer Pool tunen und Backups automatisieren. Alles andere ist Detail.

