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
En el server.cfg activo, conserva el ajuste privado existente de mysql_connection_string por encima de ensure oxmysql. Inicia después los recursos dependientes. No publiques credenciales de conexión en registros de soporte. Elimina el inicio del controlador antiguo solo después de haber identificado y tenido en cuenta todos los recursos que dependen de él.
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
Sustituye los valores interpolados del usuario por marcadores posicionales ? y una tabla ordenada de parámetros. Los identificadores de tablas y columnas requieren una lista fija de valores permitidos; los marcadores de valores no pueden seleccionar identificadores SQL arbitrarios.
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
Utiliza la API de transacciones documentada del controlador para agrupar operaciones SQL. Las llamadas separadas de START TRANSACTION, consulta y COMMIT a través de un pool de conexiones no garantizan que todas las instrucciones 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
- Busca las importaciones, exportaciones y patrones de devolución de llamada restantes de mysql-async. Verifica que cada llamador reciba la forma que espera.
- 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.
- Compara los cambios de fila esperados y los saldos persistidos. Mantén los cambios de esquema/índice separados de esta migración de controlador.
- 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.