Saltar al contenido
RPScripts

Migra recursos mysql-async a oxmysql de forma segura

Por Luke

MySQL asíncrono y oxmysql

Mueve un recurso de mysql-async a oxmysql cambiando la configuración de su controlador y revisando los parámetros de cada consulta, el valor de retorno y el manejo de errores. Una migración de controlador no requiere reescribir tu esquema de base de datos, y no garantiza un juego más rápido.

Prepara una prueba recuperable

Haz una copia de seguridad de la base de datos y los recursos coincidentes, luego trabaja en una copia aislada. Inventaría cada recurso usando mysql-async y verifica si tu framework ya requiere oxmysql. Registra la versión del controlador instalado. Revisa el código fuente de oxmysql y las instrucciones de instalación para esa versión antes de cambiar de controlador.

Carga la conexión antes que el controlador

In the active server.cfg, keep the existing private mysql_connection_string setting above ensure oxmysql. Inicia los recursos dependientes después. No publiques las credenciales de conexión en los registros de soporte. Elimina el inicio del controlador antiguo solo después de que se hayan contabilizado todos los recursos dependientes.

En cada recurso Lua que use el MySQL global, carga la biblioteca antes de sus scripts de servidor:

server_scripts {
    '@oxmysql/lib/MySQL.lua',
    'server/*.lua'
}
dependency 'oxmysql'

Elige el resultado que necesitas

Usa MySQL.query.await para un conjunto de filas, MySQL.single.await para una fila, MySQL.scalar.await para un valor, MySQL.insert.await para un ID de inserción y MySQL.update.await para las filas afectadas. Verifica el retorno documentado para tu consulta; un resultado vacío es diferente de un error.

Este ejemplo del lado del servidor prueba un viaje de ida y vuelta parametrizado sin tocar una tabla de juego. Ejecútalo desde un recurso después de que oxmysql se haya iniciado:

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)

Revisa cada llamada convertida

Reemplaza los valores de usuario interpolados con posicionales ? marcadores de posición y una tabla de parámetros ordenada. Los identificadores de tabla y columna requieren una lista de permitidos fija; los marcadores de posición de valor no pueden seleccionar identificadores arbitrarios SQL.

Await cambia el flujo de control: usa el resultado después de que await retorne, maneja las filas faltantes y las excepciones, y verifica si el jugador sigue conectado antes de actuar. Una escritura SQL exitosa no actualiza automáticamente el estado del jugador en memoria de un framework.

Mantén las transacciones en una conexión

Usa la transacción documentada del conductor API para el trabajo agrupado SQL. Separar START TRANSACTION, consulta y COMMIT las llamadas a través de un pool de conexiones no garantizan que todas las sentencias utilicen la misma conexión.

Que una transacción tenga éxito significa que sus sentencias SQL no fallaron. Un UPDATE que afecta a cero filas aún puede ser SQL válido. La lógica de pago e inventario debe aplicar las condiciones comerciales explícitamente; no copies un fragmento genérico de transferencia de saldo en una economía en vivo.

Verifica la corrección antes que la velocidad

  1. Busca las importaciones, exportaciones y patrones de devolución de llamada restantes de mysql-async. Verifica que cada llamador reciba la forma que espera.
  2. Prueba el inicio de sesión, la creación de personajes, el guardado, la reconexión, el inventario, los garajes y las acciones de trabajo relevantes utilizando registros conocidos. Prueba la base de datos no disponible y la entrada rechazada.
  3. Compara los cambios de fila esperados y los saldos persistidos. Mantén los cambios de esquema/índice separados de esta migración de controlador.
  4. Para el rendimiento, mide la misma acción de juego y carga de trabajo antes y después. Investiga las consultas lentas con sus planes de ejecución; agrega índices solo después de inspeccionar el esquema y la consulta reales.

Lanza y revierte

Programa una ventana de mantenimiento, despliega el conjunto de controlador/recurso coincidente y ejecuta las mismas comprobaciones. Mantén el conjunto antiguo en privado para la reversión. Restaura una copia de seguridad de la base de datos solo si es necesario para datos o esquemas modificados, y contabiliza todas las escrituras desde esa copia de seguridad. Convertir texto de nuevo a un conjunto de caracteres más pequeño no es una reversión genérica segura.

Documentación de referencia

Fuente: overextended/oxmysql

Selección premium para tu servidor

  • elevador de coches
    • ESX
    • QBCore
    • vRP
    4,99 US$4,99 €3,99 GBP7,99 AUD25,99 BRL4,99 CHF790 JPY
  • Vista previa del recurso FiveM de la pantalla de carga KS
      13,99 US$12,99 €10,99 GBP20,99 AUD71,99 BRL11,99 CHF2220 JPY
    • Policía de Origen
      • QBCore
      23,00 US$20,99 €17,99 GBP33,99 AUD116,99 BRL18,99 CHF3640 JPY
    • Capó Mirror Park
        8,00 US$7,99 €6,99 GBP11,99 AUD40,99 BRL6,99 CHF1270 JPY
      • Policía de Origen
        • ESX
        23,00 US$20,99 €17,99 GBP33,99 AUD116,99 BRL18,99 CHF3640 JPY
      Ver la tienda