Pular para o conteúdo
RPScripts

Migrar Recursos mysql-async para oxmysql com Segurança

Por Luke

mysql assíncrono oxmysql

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

In the active server.cfg, keep the existing private mysql_connection_string setting above ensure oxmysql. Inicie os recursos dependentes depois. Não publique credenciais de conexão em logs de suporte. Remova a inicialização do driver antigo somente depois que todos os recursos dependentes tiverem sido contabilizados.

Em cada recurso Lua que usa a MySQL global, carregue a biblioteca antes de seus 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

Substituir valores de usuário interpolados por posicionais ? placeholders e uma tabela de parâmetros ordenada. Identificadores de tabela e coluna exigem uma lista fixa permitida; placeholders de valor não podem selecionar identificadores arbitrários SQL.

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 transação documentada do motorista API para trabalho SQL agrupado. Separe START TRANSACTION, consulta e COMMIT as chamadas através 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

Seleção premium para o seu servidor

  • elevador de carro
    • ESX
    • QBCore
    • vRP
    US$ 4,99€ 4,99£ 3,99AU$ 7,99R$ 25,99CHF 4,99JP¥ 790
  • Pré-visualização do recurso KS Loadingscreen FiveM
      US$ 13,99€ 12,99£ 10,99AU$ 20,99R$ 71,99CHF 11,99JP¥ 2.220
    • Polícia de Origen
      • QBCore
      US$ 23,00€ 20,99£ 17,99AU$ 33,99R$ 116,99CHF 18,99JP¥ 3.640
    • Mirror Park Hood
        US$ 8,00€ 7,99£ 6,99AU$ 11,99R$ 40,99CHF 6,99JP¥ 1.270
      • Polícia de Origen
        • ESX
        US$ 23,00€ 20,99£ 17,99AU$ 33,99R$ 116,99CHF 18,99JP¥ 3.640
      Ver a loja