Servidores de Jogos

Conectando o MTA a um banco MySQL com dbConnect

Conectando o MTA a um banco MySQL com dbConnect

Com o MySQL, seu servidor ganha um banco robusto para contas, economia e propriedades. Veja como conectar do jeito certo.

1. Dados de acesso

Você vai precisar de:

  • Host e porta do banco;
  • Nome do banco;
  • Usuário e senha.

Na hospedagem, essas informações ficam no painel.

2. Um resource só para a conexão

Em vez de cada resource abrir sua própria conexão, crie um resource central (ex.: rp_db) que conecta uma vez e compartilha a conexão.

rp_db/meta.xml:

<meta>
    <info author="Voce" name="Banco de dados" version="1.0" type="script" />
    <script src="server.lua" type="server" />
    <export function="getConnection" type="server" />
</meta>

rp_db/server.lua:

local CONFIG = {
    host = "HOST",
    porta = 3306,
    banco = "NOME_DO_BANCO",
    usuario = "USUARIO",
    senha = "SENHA",
}

local conexao

addEventHandler("onResourceStart", resourceRoot, function()
    local dsn = ("dbname=%s;host=%s;port=%d;charset=utf8mb4"):format(CONFIG.banco, CONFIG.host, CONFIG.porta)
    conexao = dbConnect("mysql", dsn, CONFIG.usuario, CONFIG.senha, "share=1")
    if conexao then
        outputServerLog("[rp_db] Conectado ao MySQL.")
    else
        outputServerLog("[rp_db] ERRO: não foi possível conectar ao MySQL.")
        cancelEvent()
    end
end)

function getConnection()
    return conexao
end

Mantenha as credenciais fora de scripts de cliente e fora de repositórios públicos. Uma opção é ler de um arquivo de configuração que só existe no servidor.

3. Usando em outros resources

local db = exports.rp_db:getConnection()

dbQuery(function(qh)
    local resultado = dbPoll(qh, 0)
    -- tratar resultado
end, db, "SELECT id, dinheiro FROM contas WHERE usuario = ?", nomeUsuario)

E no meta.xml do resource que usa:

<include resource="rp_db" />

4. Permissões na ACL

Resources que usam dbConnect podem precisar de permissão na ACL, dependendo da configuração do servidor. Se aparecer "Access denied" no console, conceda o direito necessário apenas ao resource de banco.

5. Charset

Use charset=utf8mb4 (e tabelas utf8mb4) para acentos, emojis e nomes com caracteres especiais funcionarem corretamente.

6. Tratando erros

  • Verifique se a conexão foi criada antes de usar;
  • Em consultas, trate retorno false do dbPoll (erro na query) e registre a mensagem no log.

Hospede seu servidor com a VittHost

Todos os planos MTASA-BR da VittHost incluem 1 banco MySQL, com os dados de acesso no painel Pterodactyl. Servidores no Brasil, proteção DDoS, downloads acelerados por nginx dedicado e teste grátis de 3 dias.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS