Mova um recurso de mysql-async para oxmysql alterando sua configuração de driver e revisando os parâmetros de cada consulta, valor de retorno e tratamento de erros. Uma migração de driver não exige a reescrita do seu esquema de banco de dados e não garante uma jogabilidade mais rápida.
Prepare um teste recuperável
Faça backup do banco de dados e dos recursos correspondentes, depois trabalhe em uma cópia isolada. Inventarie cada recurso usando mysql-async e verifique se seu framework já exige oxmysql. Registre a versão do driver instalado. Revise a fonte e instruções de instalação do oxmysql para essa versão antes de trocar os drivers.
Carregue a conexão antes do driver
No server.cfg ativo, mantenha a configuração privada existente de mysql_connection_string acima de ensure oxmysql. Inicie os recursos dependentes depois. Não publique credenciais de conexão em logs enviados ao suporte. Remova a inicialização do driver antigo somente depois de identificar e considerar todos os recursos que dependem dele.
Em cada recurso Lua que usa a variável global MySQL, carregue a biblioteca antes dos scripts de servidor:
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/*.lua'
}
dependency 'oxmysql'
Escolha o resultado que você precisa
Use MySQL.query.await para um conjunto de linhas, MySQL.single.await para uma linha, MySQL.scalar.await para um valor, MySQL.insert.await para um ID de inserção e MySQL.update.await para linhas afetadas. Verifique o retorno documentado para sua consulta; um resultado vazio é diferente de um erro.
Este exemplo executado no servidor testa uma consulta parametrizada e seu retorno sem acessar uma tabela de jogabilidade. Execute-o em um recurso depois que o oxmysql tiver 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)
Revise cada chamada convertida
Substitua valores do usuário interpolados por marcadores posicionais ? e uma tabela ordenada de parâmetros. Identificadores de tabelas e colunas exigem uma lista fixa de permissões; marcadores de valores não podem selecionar identificadores SQL arbitrários.
Await altera o fluxo de controle: use o resultado após o retorno do await, trate linhas ausentes e exceções, e verifique se o jogador ainda está conectado antes de agir. Uma gravação SQL bem-sucedida não atualiza automaticamente o estado do jogador em memória de um framework.
Mantenha as transações em uma conexão
Use a API de transações documentada do driver para agrupar operações SQL. Chamadas separadas de START TRANSACTION, consulta e COMMIT por meio de um pool de conexões não garantem que todas as instruções usem a mesma conexão.
Uma transação bem-sucedida significa que suas instruções SQL não falharam. Um UPDATE afetando zero linhas ainda pode ser SQL válido. A lógica de pagamento e inventário deve impor explicitamente as condições de negócios; não copie um trecho genérico de transferência de saldo para uma economia real.
Verifique a correção antes da velocidade
- Procure por importações, exportações e padrões de callback mysql-async restantes. Verifique se cada chamador recebe o formato que espera.
- Teste login, criação de personagem, salvamento, reconexão, inventário, garagens e ações de trabalho relevantes usando registros conhecidos. Teste banco de dados indisponível e entrada rejeitada.
- Compare as alterações de linha esperadas e os saldos persistidos. Mantenha as alterações de esquema/índice separadas desta migração de driver.
- Para desempenho, meça a mesma ação de jogo e carga de trabalho antes e depois. Investigue consultas lentas com seus planos de execução; adicione índices somente após inspecionar o esquema e a consulta reais.
Lançar e reverter
Agende uma janela de manutenção, implante o conjunto de driver/recurso correspondente e execute as mesmas verificações. Mantenha o conjunto antigo privado para reversão. Restaure um backup de banco de dados somente se necessário para dados ou esquema alterados, e contabilize todas as gravações desde esse backup. Converter texto de volta para um conjunto de caracteres menor não é uma reversão genérica segura.