Aller au contenu
RPScripts

Migrer les ressources mysql-async vers oxmysql en toute sécurité

Par Luke

mysql asynchrone oxmysql

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

In the active server.cfg, keep the existing private mysql_connection_string setting above ensure oxmysql. Démarrez les ressources dépendantes par la suite. Ne publiez pas les identifiants de connexion dans les journaux de support. Supprimez l'ancien démarrage du pilote seulement après que toutes les ressources dépendantes aient été prises en compte.

Dans chaque ressource Lua qui utilise le MySQL global, 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

Remplacer les valeurs utilisateur interpolées par des valeurs positionnelles ? des espaces réservés et un tableau de paramètres ordonnés. Les identifiants de table et de colonne nécessitent une liste autorisée fixe ; les espaces réservés de valeur ne peuvent pas sélectionner 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 la transaction documentée du pilote API pour le travail groupé SQL. Séparer START TRANSACTION, requête et COMMIT les appels via un pool de connexions ne garantissent pas que toutes les instructions utilisent la même connexion.

Une transaction réussie signifie que ses SQL instructions n'ont pas échoué. UPDATE affecter zéro ligne peut toujours être valide SQL. La logique de paiement et d'inventaire doit appliquer explicitement les conditions commerciales ; ne copiez pas un extrait générique de transfert de solde dans une économie réelle.

Vérifiez l'exactitude avant la vitesse

  1. Recherchez les importations, exportations et modèles de rappel mysql-async restants. Vérifiez que chaque appelant reçoit la forme qu'il attend.
  2. 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.
  3. Comparez les modifications de lignes attendues et les soldes persistants. Séparez les modifications de schéma/index de cette migration de pilote.
  4. 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.

Documentation de référence

Source: overextended/oxmysql

Sélection premium pour ton serveur

  • élévateur de voiture
    • ESX
    • QBCore
    • vRP
    4,99 $US4,99 €3,99 £GB7,99 $AU25,99 R$4,99 CHF790 JPY
  • Aperçu de la ressource FiveM de l'écran de chargement KS
      13,99 $US12,99 €10,99 £GB20,99 $AU71,99 R$11,99 CHF2 220 JPY
    • Police d'origine
      • QBCore
      23,00 $US20,99 €17,99 £GB33,99 $AU116,99 R$18,99 CHF3 640 JPY
    • Mirror Park Hood
        8,00 $US7,99 €6,99 £GB11,99 $AU40,99 R$6,99 CHF1 270 JPY
      • Police d'origine
        • ESX
        23,00 $US20,99 €17,99 £GB33,99 $AU116,99 R$18,99 CHF3 640 JPY
      Voir la boutique