oxmysql no puede conectarse: ECONNREFUSED, acceso denegado, base de datos desconocida
¿oxmysql no se conectará a tu base de datos de FiveM? Soluciona ECONNREFUSED, ER_ACCESS_DENIED_ERROR y base de datos desconocida con la cadena de conexión mysql correcta.
Cuando tu servidor se inicia, oxmysql imprime uno de estos y cada script que toca la base de datos falla después:
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 línea significa algo diferente. Esta guía muestra cómo leerlas, cómo escribir la cadena de conexión, y qué verificar en el servidor de base de datos.
La cadena de conexión
oxmysql obtiene todo de una convar en server.cfg. La forma de URL:
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"La forma clave=valor hace lo mismo:
set mysql_connection_string "user=fivem;password=yourpassword;host=127.0.0.1;port=3306;database=fivem"Ponla por encima de ensure oxmysql, y por encima de cualquier script que use la base de datos:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extendedConsejo: las recetas de txAdmin crean esta línea por ti. Si la editas a mano, mantén las comillas, y mantenla en una sola línea.
ECONNREFUSED: nada está escuchando
ECONNREFUSED significa que el servidor de base de datos rechazó la conexión o no se está ejecutando en esa dirección y puerto. Recorre estos en orden:
- ¿Se está ejecutando MariaDB o MySQL? En Windows con XAMPP, inicia MySQL en el panel de control. Con una instalación de servicio, verifica Servicios. En Linux:
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb- ¿El host y puerto son correctos?
localhosty127.0.0.1son la misma máquina, el puerto predeterminado es3306. Si tu base de datos está en otra máquina o un host administrado, usa su dirección y puerto, y verifica que su firewall permita la IP de tu servidor de juego. - ¿La base de datos está vinculada a la dirección correcta? Si solo escucha en la máquina local, un servidor de juego remoto no puede alcanzarla.
ER_ACCESS_DENIED_ERROR: inicio de sesión incorrecto
Access denied for user significa que el servidor respondió, pero rechazó al usuario, la contraseña, o el host desde el que se permite que ese usuario se conecte.
- Verifica el usuario y contraseña iniciando sesión tú mismo con los mismos valores:
mysql -u fivem -p -h 127.0.0.1- Crea un usuario dedicado en lugar de usar
root. En la consola de MariaDB o MySQL:
CREATE DATABASE fivem CHARACTER SET utf8mb4;
CREATE USER 'fivem'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON fivem.* TO 'fivem'@'localhost';
FLUSH PRIVILEGES;- Un usuario está vinculado a un host.
'fivem'@'localhost'no puede conectarse desde otra máquina. Para un servidor de juego remoto, crea el usuario para ese host en su lugar. rooten una instalación de Linux fresca a menudo usa autenticación de socket, así que una conexión de inicio de sesión con contraseña sobre la red falla. Un usuario separado evita el problema.
Caracteres especiales en la contraseña
En la forma mysql://, la contraseña se encuentra dentro de una URL. Los caracteres con significado en URLs la rompen, y el error que obtienes es generalmente acceso denegado. Codifícalos:
| Carácter | Escribe |
|---|---|
@ |
%40 |
# |
%23 |
/ |
%2F |
: |
%3A |
% |
%25 |
? |
%3F |
Así que la contraseña p@ss#1 se convierte en:
set mysql_connection_string "mysql://fivem:p%40ss%231@localhost/fivem?charset=utf8mb4"Las alternativas más simples son una contraseña compuesta solo de letras y dígitos, o la forma user=...;password=..., donde solo ; en la contraseña es un problema.
Unknown database: el nombre no existe
Unknown database 'fivem' significa que el inicio de sesión funcionó, pero no existe una base de datos con ese nombre. Dos causas:
- El nombre está mal escrito. El nombre en la cadena de conexión debe coincidir exactamente. En Linux, los nombres de base de datos distinguen mayúsculas de minúsculas.
- Nunca la creaste. Créala e importa el archivo SQL de tu framework en ella:
CREATE DATABASE fivem CHARACTER SET utf8mb4;Después de eso, el siguiente problema es generalmente tablas faltantes, cubierto en Table 'db.x' doesn't exist.
Verifica que funcionó
Reinicia oxmysql desde la consola del servidor y lee la salida:
restart oxmysqlCuando la conexión tiene éxito, oxmysql reporta la versión del servidor de base de datos y no sigue ningún error. Si un script aún falla, el problema es la propia consulta de ese script, no la conexión.
Orden en server.cfg
oxmysql tiene que ser iniciado antes que cualquier cosa que consulte la base de datos. Aquí está el orden que funciona para un servidor ESX:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_scriptEn QBCore o QBox, cambia es_extended por qb-core o qbx_core. Un core que se inicia antes que oxmysql puede fallar con errores que parecen problemas de framework, por ejemplo los en ESX is nil.
Lista de verificación
| Síntoma | Solución |
|---|---|
ECONNREFUSED |
Inicia MariaDB o MySQL, luego verifica host y puerto (127.0.0.1, 3306) |
ER_ACCESS_DENIED_ERROR |
Usuario incorrecto, contraseña o host; crea un usuario dedicado y otórgale la base de datos |
Unknown database |
Crea la base de datos, y coincide exactamente su nombre en la cadena |
| Falla solo con algunas contraseñas | Codifica en URL los caracteres especiales, o usa la forma user=...;password=... |
| La cadena parece ignorada | Pon set mysql_connection_string por encima de ensure oxmysql, en una sola línea |
| Se conecta, pero las tablas faltan | Importa el archivo .sql en esa base de datos |
Respuestas rápidas
¿Dónde va la línea mysql_connection_string?
En server.cfg, por encima de la línea ensure oxmysql. oxmysql lee el convar cuando se inicia, así que una línea colocada después se lee demasiado tarde.
Mi contraseña tiene un @ o # en ella y la conexión falla. ¿Por qué?
En el formulario mysql:// la contraseña es parte de una URL, así que los caracteres especiales deben estar codificados en URL: @ se convierte en %40, # se convierte en %23, / se convierte en %2F. El formulario user=...;password=... no necesita codificación.
¿ESX y QBCore usan una cadena de conexión diferente?
No. ESX, QBCore y QBox todos leen la misma convar mysql_connection_string a través de oxmysql. Solo la base de datos en la que importas difiere.

