Verschiebe eine Ressource von mysql-async zu oxmysql, indem du die Treiberkonfiguration änderst und die Parameter, Rückgabewerte und Fehlerbehandlung jeder Abfrage überprüfst. Eine Treiber-Migration erfordert keine Neuschreibung deines Datenbankschemas und garantiert keine schnellere Spielleistung.
Bereite einen wiederherstellbaren Test vor
Sichere die Datenbank und die entsprechenden Ressourcen und arbeite dann an einer isolierten Kopie. Inventarisiere jede Ressource, die mysql-async verwendet, und prüfe, ob dein Framework bereits oxmysql benötigt. Notiere die installierte Treiberversion. Überprüfe die oxmysql-Quelle und Installationsanweisungen für diese Version, bevor du die Treiber wechselst.
Lade die Verbindung vor dem Treiber
Belasse in der aktiven server.cfg die vorhandene private Einstellung mysql_connection_string oberhalb von ensure oxmysql. Starte abhängige Ressourcen danach. Veröffentliche keine Verbindungsdaten in Support-Logs. Entferne den Start des alten Treibers erst, wenn alle davon abhängigen Ressourcen berücksichtigt wurden.
Lade in jeder Lua-Ressource, die das globale Objekt MySQL verwendet, die Bibliothek vor ihren Server-Skripten:
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/*.lua'
}
dependency 'oxmysql'
Wähle das Ergebnis, das du benötigst
Verwende MySQL.query.await für eine Reihe von Zeilen, MySQL.single.await für eine Zeile, MySQL.scalar.await für einen Wert, MySQL.insert.await für eine Einfüge-ID und MySQL.update.await für betroffene Zeilen. Überprüfe die dokumentierte Rückgabe für deine Abfrage; ein leeres Ergebnis unterscheidet sich von einem Fehler.
Dieses serverseitige Beispiel testet eine parametrisierte Roundtrip-Verbindung, ohne eine Gameplay-Tabelle zu berühren. Führe es von einer Ressource aus, nachdem oxmysql gestartet wurde:
CreateThread(function()
local ok, value = pcall(function()
return MySQL.scalar.await('SELECT ?', { 'connection-ok' })
end)
if ok and value == 'connection-ok' then
print('Database parameter check passed.')
else
print('Database parameter check failed; inspect the server log privately.')
end
end)
Überprüfe jeden konvertierten Aufruf
Ersetze interpolierte Benutzerwerte durch positionale ? -Platzhalter und eine geordnete Parametertabelle. Tabellen- und Spaltenbezeichner erfordern eine feste Zulassungsliste; Wertplatzhalter können keine beliebigen SQL-Bezeichner auswählen.
Await ändert den Kontrollfluss: Verwende das Ergebnis, nachdem der Await zurückkehrt, behandle fehlende Zeilen und Ausnahmen und überprüfe, ob der Spieler noch verbunden ist, bevor du handelst. Ein erfolgreicher SQL-Schreibvorgang aktualisiert nicht automatisch den In-Memory-Spielerstatus eines Frameworks.
Transaktionen auf einer Verbindung halten
Verwende die dokumentierte Transaktions-API des Treibers für gruppierte SQL-Arbeiten. Separate START TRANSACTION, Abfrage und COMMIT Aufrufe über einen Verbindungspool garantieren nicht, dass alle Anweisungen dieselbe Verbindung verwenden.
Eine erfolgreiche Transaktion bedeutet, dass ihre SQL-Anweisungen nicht fehlgeschlagen sind. Ein UPDATE , das keine Zeile verändert, kann trotzdem gültiges SQL sein. Zahlungs- und Inventarlogik müssen die fachlichen Bedingungen ausdrücklich prüfen; kopiere kein allgemeines Beispiel für Guthabenübertragungen in eine Live-Spielwirtschaft.
Korrektheit vor Geschwindigkeit überprüfen
- Suche nach verbleibenden mysql-async-Importen, -Exporten und Callback-Mustern. Überprüfe, ob jeder Aufrufer die erwartete Form erhält.
- Teste Login, Charaktererstellung, Speichern, Wiederverbindung, Inventar, Garagen und relevante Job-Aktionen mit bekannten Datensätzen. Teste nicht verfügbare Datenbanken und abgelehnte Eingaben.
- Vergleiche erwartete Zeilenänderungen und persistierte Salden. Halte Schema-/Indexänderungen von dieser Treiber-Migration getrennt.
- Für die Leistung messe dieselbe Gameplay-Aktion und Arbeitslast vor und nach der Änderung. Untersuche langsame Abfragen mit ihren Ausführungsplänen; füge Indizes erst nach Überprüfung des tatsächlichen Schemas und der Abfrage hinzu.
Veröffentlichung und Rollback
Plane ein Wartungsfenster ein, stelle den passenden Treiber/Ressourcen-Satz bereit und führe dieselben Prüfungen durch. Halte den alten Satz für ein Rollback privat. Stelle ein Datenbank-Backup nur wieder her, wenn es für geänderte Daten oder Schemata erforderlich ist, und berücksichtige alle Schreibvorgänge seit diesem Backup. Das Zurückkonvertieren von Text in einen kleineren Zeichensatz ist kein sicheres generisches Rollback.