Usar cupom WELCOME para salvar 20%

$ USD
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • Franco suíço Franco suíço
  • ¥ ienes
Moeda
$ USD
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • Franco suíço Franco suíço
  • ¥ ienes
mysql assíncrono oxmysql

Migrar Recursos mysql-async para oxmysql com Segurança

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

  1. Procure por importações, exportações e padrões de callback mysql-async restantes. Verifique se cada chamador recebe o formato que espera.
  2. 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.
  3. Compare as alterações de linha esperadas e os saldos persistidos. Mantenha as alterações de esquema/índice separadas desta migração de driver.
  4. 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.

Documentação de referência

Fonte: overextended/oxmysql