Déplacez une ressource de mysql-async vers oxmysql en modifiant sa configuration de pilote et en examinant les paramètres, la valeur de retour et la gestion des erreurs de chaque requête. Une migration de pilote ne nécessite pas de réécrire votre schéma de base de données et ne garantit pas un gameplay plus rapide.
Préparer un test récupérable
Sauvegardez la base de données et les ressources correspondantes, puis travaillez sur une copie isolée. Inventoriez chaque ressource utilisant mysql-async et vérifiez si votre framework nécessite déjà oxmysql. Enregistrez la version du pilote installé. Examinez la source oxmysql et les instructions d'installation pour cette version avant de changer de pilote.
Chargez la connexion avant le pilote
Dans le fichier server.cfg actif, conservez le réglage privé existant mysql_connection_string au-dessus de ensure oxmysql. Démarrez ensuite les ressources qui en dépendent. Ne publiez pas les identifiants de connexion dans les journaux transmis au support. Ne supprimez le démarrage de l’ancien pilote qu’après avoir pris en compte toutes les ressources qui en dépendent.
Dans chaque ressource Lua utilisant la variable globale MySQL, chargez la bibliothèque avant ses scripts serveur :
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/*.lua'
}
dependency 'oxmysql'
Choisissez le résultat dont vous avez besoin
Utilisez MySQL.query.await pour un ensemble de lignes, MySQL.single.await pour une ligne, MySQL.scalar.await pour une valeur, MySQL.insert.await pour un ID d'insertion et MySQL.update.await pour les lignes affectées. Vérifiez le retour documenté pour votre requête ; un résultat vide est différent d'une erreur.
Cet exemple côté serveur teste un aller-retour paramétré sans toucher à une table de jeu. Exécutez-le à partir d'une ressource après le démarrage d'oxmysql :
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)
Vérifiez chaque appel converti
Remplacez les valeurs utilisateur interpolées par des paramètres positionnels ? et une table de paramètres ordonnée. Les noms de tables et de colonnes nécessitent une liste d’autorisation fixe ; les paramètres de valeurs ne permettent pas de choisir des identifiants SQL arbitraires.
Await modifie le flux de contrôle : utilisez le résultat après le retour de await, gérez les lignes manquantes et les exceptions, et vérifiez si le joueur est toujours connecté avant d'agir. Une écriture SQL réussie ne met pas automatiquement à jour l'état du joueur en mémoire d'un framework.
Maintenez les transactions sur une seule connexion
Utilisez l’API de transaction documentée du pilote pour regrouper les opérations SQL. Des appels séparés à START TRANSACTION, à une requête et à COMMIT via un pool de connexions ne garantissent pas que toutes les instructions utilisent la même connexion.
La réussite d’une transaction signifie que ses instructions SQL n’ont pas échoué. Une instruction UPDATE qui ne modifie aucune ligne peut malgré tout être du SQL valide. La logique des paiements et de l’inventaire doit appliquer explicitement les règles métier ; ne copiez pas un exemple générique de transfert de solde dans une économie en production.
Vérifiez l'exactitude avant la vitesse
- Recherchez les importations, exportations et modèles de rappel mysql-async restants. Vérifiez que chaque appelant reçoit la forme qu'il attend.
- Testez la connexion, la création de personnage, la sauvegarde, la reconnexion, l'inventaire, les garages et les actions de métier pertinentes à l'aide d'enregistrements connus. Testez la base de données indisponible et les entrées rejetées.
- Comparez les modifications de lignes attendues et les soldes persistants. Séparez les modifications de schéma/index de cette migration de pilote.
- Pour les performances, mesurez la même action de jeu et la même charge de travail avant et après. Examinez les requêtes lentes avec leurs plans d'exécution ; ajoutez des index seulement après avoir inspecté le schéma et la requête réels.
Publication et restauration
Planifiez une fenêtre de maintenance, déployez l'ensemble pilote/ressource correspondant et exécutez les mêmes vérifications. Gardez l'ancien ensemble privé pour la restauration. Restaurez une sauvegarde de base de données uniquement si nécessaire pour les données ou le schéma modifiés, et tenez compte de toutes les écritures depuis cette sauvegarde. La conversion de texte vers un jeu de caractères plus petit n'est pas une restauration générique sûre.