Migration von Plugins vom lokalen Speicher (SQLite/Flatfile) auf MySQL/MariaDB
Wenn Sie einen Minecraft-Server zum ersten Mal starten, scheinen die Standardeinstellungen der meisten Plugins ideal zu sein. Sie funktionieren sofort und speichern Daten в lokalen Konfigurationsdateien (.yml, .json) oder lokalen Datenbanken (.db über die SQLite-Engine). Sobald das Projekt jedoch wächst – insbesondere wenn die Online-Spielerzahl die Marke von 20–30 Spielern überschreitet – leidet der Server unter regelmäßigen Mikrorucklern (zu lange Tick-Dauer), und die Hosting-Konsole gibt Warnungen über E/A-Verzögerungen beim Lesen von Dateien aus.
In diesem Artikel analysieren wir, warum lokale Speicherformate bei steigenden Spielerzahlen unweigerlich zu Lags führen, wie Sie eine zentrale Datenbank auf Ihrem Hosting einrichten und wichtige Plugins wie LuckPerms, EssentialsX und CoreProtect richtig darauf umstellen.
Warum Flatfile (.yml) und SQLite (.db) bei höheren Spielerzahlen laggen
Das Problem liegt in der Architektur der Interaktion zwischen dem Betriebssystem, dem Minecraft-Server und dem Speicherlaufwerk des Hostings:
- Das Flatfile-Problem (.yml / .json): Jedes Mal, wenn einem Spieler ein Recht zugewiesen, sein Kontostand gespeichert oder seine Geldbörse aktualisiert werden muss, muss das Plugin die gesamte Textdatei neu schreiben. Wenn 20 Spieler gleichzeitig Transaktionen durchführen, liest und schreibt der Server immer wieder schwere Konfigurationsdateien. Da dies oft synchron auf dem Hauptspielthread (Main Thread) geschieht, friert der Server buchstäblich ein, während er auf den Abschluss der Festplatten-E/A-Operation wartet.
- Das SQLite-Problem (.db): SQLite ist eine großartige Datenbank, besteht jedoch aus einer einzigen Datei auf der Festplatte. Der größte Nachteil von SQLite ist die Dateisperre (File Locking) beim Schreiben. Wenn das Plugin CoreProtect versucht, eine Creeper-Explosion in die Datenbank einzutragen, kann kein anderes Plugin (und auch nicht dasselbe Plugin in einem anderen Thread) Daten in diese Datei schreiben, bis die erste Operation abgeschlossen ist. Es entsteht eine Warteschlange, die zu spürbaren Mikrorucklern für die Spieler führt.
Die Lösung — MySQL / MariaDB: Hierbei handelt es sich um vollwertige relationale Netzwerksysteme zur Datenbankverwaltung. Sie laufen im Multithreading-Modus, unterstützen Sperren auf Zeilenebene (statt der gesamten Datei), können Abfragen effektiv im Arbeitsspeicher zwischenspeichern und verarbeiten Daten asynchron, wodurch der Hauptprozessor des Spielservers vollständig entlastet wird.
Schritt 1: Datenbank im Hosting-Panel erstellen
Vor der Konfiguration der Plugins müssen Sie die MySQL-Zugangsdaten abrufen. Auf einem modernen Game-Hosting-Panel ist dies mit wenigen Klicks erledigt:
- Rufen Sie das Control Panel Ihres Servers auf und öffnen Sie den Bereich „Datenbanken“ (Databases).
- Klicken Sie auf die Schaltfläche „Datenbank erstellen“ (Create Database).
- Nach der Erstellung zeigt das Panel die Zugangsdaten an. Wir benötigen fünf Parameter:
Host(Die IP-Adresse oder Domain für die Verbindung, z. B.127.0.0.1odersql.mygamehost.net)Port(Standardwert für MySQL ist3306)Database Name(Name der Datenbank)User(Benutzername)Password(Passwort)
Schritt 2: Plugins auf MySQL umstellen
Wir betrachten die Umstellung der drei wichtigsten Plugins, die die Festplattenlaufwerke am stärksten belasten.
1. LuckPerms (Rechte und Gruppen)
LuckPerms ist perfekt für die Netzwerknutzung optimiert. Die Umstellung auf MySQL beseitigt nicht nur speicherbedingte Lags, sondern ermöglicht es Ihnen auch, mehrere Server (z. B. Survival und Hub) mit demselben Rechtesystem zu synchronisieren.
- Öffnen Sie die Datei
plugins/LuckPerms/config.yml. - Suchen Sie die Zeile
storage-method:und ändern Sie den Wert vonh2odersqliteaufmysql. - Scrollen Sie im Config weiter nach unten zum Block
data:und tragen Sie die vom Hoster bereitgestellten Daten ein:
storage-method: mysql
data:
address: localhost:3306 # Geben Sie Host und Port durch einen Doppelpunkt getrennt an
database: lperms_db
username: admin_user
password: 'super_secure_password'
table-prefix: 'lp_'
- Speichern Sie die Datei und geben Sie den Befehl
/lp syncin die Konsole ein. Das Plugin erstellt automatisch die erforderlichen Tabellen in Ihrem Datenbanksystem.
2. EssentialsX (Wirtschaft, Homes, Warps, Spielerdaten)
Standardmäßig erstellt EssentialsX für jeden neuen Spieler eine eigene .yml-Datei im Ordner userdata. Wenn sich Tausende von Spielern registrieren, wird dieser Ordner zu einer extremen Belastung für das Linux-Dateisystem.
- Damit EssentialsX mit einer externen Datenbank kommunizieren kann, benötigen Sie das offizielle Add-on EssentialsXStorage (laden Sie es von der offiziellen Entwicklerseite herunter und legen Sie es in den Ordner
plugins/). - Öffnen Sie die Datei
plugins/Essentials/config.ymlund suchen Sie den Speicherbereich (normalerweise ganz unten in der Datei). - Stellen Sie den Speichertyp auf MySQL um und füllen Sie die Verbindungsparameter aus:
essentials:
storage:
type: mysql
mysql:
host: localhost
port: 3306
database: essentials_db
username: admin_user
password: 'super_secure_password'
3. CoreProtect (Block-Protokollierung)
CoreProtect ist das schwerste Plugin auf dem Server, da es Millionen von Aktionen aufzeichnet. Die Auslagerung auf MySQL ist für stabile TPS-Werte absolut kritisch.
- Öffnen Sie die Datei
plugins/CoreProtect/config.yml. - Suchen Sie den Parameter
use-mysql: falseund ändern Sie ihn inuse-mysql: true. - Füllen Sie die darunter liegenden Verbindungszeilen aus:
use-mysql: true
mysql-host: localhost
mysql-port: 3306
mysql-database: coreprotect_db
mysql-username: admin_user
mysql-password: "super_secure_password"
table-prefix: "co_"
- Starten Sie den Server neu. Beim ersten Start beginnt CoreProtect mit der Indizierung der Datenbankstruktur, was 1–2 Minuten dauern kann.
Behebung potenzieller Probleme (Troubleshooting)
Problem 1: Der Server gibt beim Start des Plugins den Fehler „Communications link failure“ aus
Ursache: Der Spielserver kann den Datenbankserver nicht erreichen. Entweder haben Sie sich beim Ausfüllen von Host/Passwort vertippt oder die Datenbank auf dem Hosting wurde noch nicht gestartet.
Lösung: Überprüfen Sie sorgfältig, ob sich in den Feldern host und password überflüssige Leerzeichen oder Anführungszeichen befinden. Wenn sich die Datenbank auf einem externen Server befindet, stellen Sie sicher, dass das Hosting externe Verbindungen (Remote Connections) für diese Datenbank zulässt.
Problem 2: Alle Ränge, Warps und Regionen sind nach dem Aktivieren von MySQL verschwunden
Ursache: Das ist logisch – die Plugins haben sich mit einer neuen, völlig leeren Datenbank verbunden, während all Ihre alten Daten weiterhin in den lokalen Dateien .db und .yml liegen.
Lösung für LuckPerms: Das Plugin verfügt über ein integriertes Migrationssystem. Bevor Sie die Konfiguration auf MySQL umstellen, geben Sie folgenden Befehl ein: /lp export local_data. Stellen Sie das Plugin danach auf MySQL um, starten Sie den Server und geben Sie ein: /lp import local_data. Die Daten werden automatisch in das SQL-System übertragen.
Lösung für andere Plugins:
Die Übertragung von Daten aus SQLite (lokale .db-Dateien) in MySQL erfordert die Verwendung externer Skripte oder Konverter. Wenn auf dem Server bereits viele aktive Spieler aktiv sind, wird empfohlen, die Umstellung auf MySQL während eines geplanten Map-Wipes (Server-Resets) durchzuführen, um mit einer sauberen und schnellen Serverhistorie zu beginnen.