oxmysql não consegue conectar: ECONNREFUSED, access denied, unknown database

oxmysql não se conecta ao seu banco de dados FiveM? Corrija ECONNREFUSED, ER_ACCESS_DENIED_ERROR e unknown database com a string mysql_connection_string correta.

Quando seu servidor começa, oxmysql imprime um desses e cada script que toca o banco de dados falha depois:

text
Error: connect ECONNREFUSED 127.0.0.1:3306
ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
Unknown database 'fivem'

Cada linha significa algo diferente. Este guia mostra como lê-las, como escrever a string de conexão e o que verificar no servidor de banco de dados.

A string de conexão

oxmysql recebe tudo de uma convar em server.cfg. A forma URL:

cfg
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"

A forma chave=valor faz o mesmo:

cfg
set mysql_connection_string "user=fivem;password=yourpassword;host=127.0.0.1;port=3306;database=fivem"

Coloque-a acima de ensure oxmysql, e acima de qualquer script que use o banco de dados:

cfg
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"

ensure oxmysql
ensure ox_lib
ensure es_extended

Dica: as receitas txAdmin criam essa linha para você. Se editar à mão, mantenha as aspas e mantenha em uma única linha.

ECONNREFUSED: nada está escutando

ECONNREFUSED significa que o servidor de banco de dados recusou a conexão ou não está rodando nesse endereço e porta. Trabalhe através destes em ordem:

  1. MariaDB ou MySQL está rodando? No Windows com XAMPP, inicie MySQL no painel de controle. Com uma instalação de serviço, verifique Serviços. No Linux:
bash
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb
  1. O host e porta estão certos? localhost e 127.0.0.1 são a mesma máquina, a porta padrão é 3306. Se seu banco de dados está em outra máquina ou host gerenciado, use seu endereço e porta, e verifique que seu firewall permite o IP do seu servidor de jogo.
  2. O banco de dados está vinculado ao endereço certo? Se ele só escuta na máquina local, um servidor de jogo remoto não pode alcançá-lo.

ER_ACCESS_DENIED_ERROR: login errado

Access denied for user significa que o servidor respondeu, mas rejeitou o usuário, a senha ou o host do qual esse usuário é permitido conectar.

  • Verifique o usuário e senha fazendo login você mesmo com os mesmos valores:
bash
mysql -u fivem -p -h 127.0.0.1
  • Crie um usuário dedicado em vez de usar root. No console MariaDB ou MySQL:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;
CREATE USER 'fivem'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON fivem.* TO 'fivem'@'localhost';
FLUSH PRIVILEGES;
  • Um usuário está vinculado a um host. 'fivem'@'localhost' não pode conectar de outra máquina. Para um servidor de jogo remoto, crie o usuário para esse host em vez disso.
  • root em uma instalação fresca do Linux frequentemente usa autenticação de socket, então um login de senha sobre a rede falha. Um usuário separado evita o problema.

Caracteres especiais na senha

Na forma mysql://, a senha fica dentro de uma URL. Caracteres com significado em URLs a quebram, e o erro que você recebe geralmente é access denied. Codifique-os:

Caractere Escreva como
@ %40
# %23
/ %2F
: %3A
% %25
? %3F

Então a senha p@ss#1 se torna:

cfg
set mysql_connection_string "mysql://fivem:p%40ss%231@localhost/fivem?charset=utf8mb4"

As alternativas mais simples são uma senha feita apenas de letras e dígitos, ou a forma user=...;password=..., onde apenas ; na senha é um problema.

Unknown database: o nome não existe

Unknown database 'fivem' significa que o login funcionou, mas nenhum banco de dados com esse nome existe. Duas causas:

  • O nome está escrito errado. O nome na string de conexão deve corresponder exatamente. No Linux, nomes de banco de dados são sensíveis a maiúsculas.
  • Você nunca criou. Crie-o, depois importe o arquivo SQL de seu framework nele:
sql
CREATE DATABASE fivem CHARACTER SET utf8mb4;

Depois disso, o próximo problema é geralmente tabelas faltando, coberto em Table 'db.x' doesn't exist.

Verifique que funcionou

Reinicie oxmysql do console do servidor e leia a saída:

text
restart oxmysql

Quando a conexão sucessão, oxmysql relata a versão do servidor de banco de dados e nenhum erro segue. Se um script ainda falha, o problema é a própria query daquele script, não a conexão.

Ordem em server.cfg

oxmysql tem que ser iniciado antes de qualquer coisa que consulte o banco de dados. Aqui está a ordem que funciona para um servidor ESX:

cfg
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_script

Em QBCore ou QBox, troque es_extended por qb-core ou qbx_core. Um core que começar antes de oxmysql pode falhar com erros que parecem problemas de framework, por exemplo os em ESX is nil.

Lista de verificação

Sintoma Solução
ECONNREFUSED Inicie MariaDB ou MySQL, depois verifique host e porta (127.0.0.1, 3306)
ER_ACCESS_DENIED_ERROR Usuário, senha ou host errado; crie um usuário dedicado e conceda a ele o banco de dados
Unknown database Crie o banco de dados e corresponda seu nome exatamente na string
Falha apenas com algumas senhas Codifique caracteres especiais em URL, ou use a forma user=...;password=...
String parece ignorada Coloque set mysql_connection_string acima de ensure oxmysql, em uma linha
Conecta, mas tabelas faltam Importe o arquivo .sql naquele banco de dados

Respostas rápidas

Onde vai a linha mysql_connection_string?

Em server.cfg, acima da linha ensure oxmysql. oxmysql lê o convar quando começar, então uma linha colocada após é lida muito tarde.

Minha senha tem @ ou # e a conexão falha. Por quê?

Na forma mysql:// a senha é parte de uma URL, então caracteres especiais devem ser codificados em URL: @ se torna %40, # se torna %23, / se torna %2F. A forma user=...;password=... não precisa de codificação.

ESX e QBCore usam uma string de conexão diferente?

Não. ESX, QBCore e QBox todos leem a mesma convar mysql_connection_string através de oxmysql. Apenas o banco de dados que você importa para difere.

Scripts sem esse problema

Item Creator V2Crie itens usáveis com animações, props, efeitos e muito mais — sem escrever código.Ver script →Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →

Continue lendo