oxmysql ne peut pas se connecter : ECONNREFUSED, accès refusé, base de données inconnue
oxmysql ne veut pas se connecter à votre base de données FiveM ? Corriger ECONNREFUSED, ER_ACCESS_DENIED_ERROR et base de données inconnue avec la bonne mysql_connection_string.
Quand votre serveur démarre, oxmysql imprime l'une de celles-ci et chaque script qui touche la base de données échoue aprè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'Chaque ligne signifie quelque chose de différent. Ce guide montre comment les lire, comment écrire la chaîne de connexion, et quoi vérifier sur le serveur de base de données.
La chaîne de connexion
oxmysql obtient tout d'une seule convar dans server.cfg. La forme URL :
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"La forme key=value fait la même chose :
set mysql_connection_string "user=fivem;password=yourpassword;host=127.0.0.1;port=3306;database=fivem"Mettez-le au-dessus de ensure oxmysql, et au-dessus de tout script qui utilise la base de données :
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extendedAstuce : les recettes txAdmin créent cette ligne pour vous. Si vous l'éditez à la main, gardez les guillemets, et gardez-la sur une seule ligne.
ECONNREFUSED : rien n'écoute
ECONNREFUSED signifie que le serveur de base de données a refusé la connexion ou ne s'exécute pas à cette adresse et ce port. Vérifiez-les dans l'ordre :
- MariaDB ou MySQL s'exécute-t-il ? Sous Windows avec XAMPP, démarrez MySQL dans le panneau de contrôle. Avec une installation de service, vérifiez Services. Sous Linux :
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb- L'hôte et le port sont-ils correct ?
localhostet127.0.0.1sont la même machine, le port par défaut est3306. Si votre base de données est sur une autre machine ou un hôte géré, utilisez son adresse et son port, et vérifiez que son pare-feu autorise l'IP de votre serveur de jeu. - La base de données est-elle liée à la bonne adresse ? Si elle n'écoute que sur la machine locale, un serveur de jeu distant ne peut pas la atteindre.
ER_ACCESS_DENIED_ERROR : connexion incorrecte
Access denied for user signifie que le serveur a répondu, mais a rejeté l'utilisateur, le mot de passe, ou l'hôte à partir duquel cet utilisateur est autorisé à se connecter.
- Vérifiez l'utilisateur et le mot de passe en vous connectant vous-même avec les mêmes valeurs :
mysql -u fivem -p -h 127.0.0.1- Créez un utilisateur dédié au lieu d'utiliser
root. Dans la console MariaDB ou 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 utilisateur est lié à un hôte.
'fivem'@'localhost'ne peut pas se connecter à partir d'une autre machine. Pour un serveur de jeu distant, créez l'utilisateur pour cet hôte. rootsur une installation Linux fraîche utilise souvent l'authentification par socket, donc une connexion par mot de passe sur le réseau échoue. Un utilisateur séparé évite le problème.
Caractères spéciaux dans le mot de passe
Dans la forme mysql://, le mot de passe se trouve dans une URL. Les caractères ayant un sens dans les URL le cassent, et l'erreur que vous obtenez est généralement accès refusé. Encodez-les :
| Caractère | Écrivez-le comme |
|---|---|
@ |
%40 |
# |
%23 |
/ |
%2F |
: |
%3A |
% |
%25 |
? |
%3F |
Donc le mot de passe p@ss#1 devient :
set mysql_connection_string "mysql://fivem:p%40ss%231@localhost/fivem?charset=utf8mb4"Les alternatives les plus simples sont un mot de passe composé uniquement de lettres et de chiffres, ou la forme user=...;password=..., où seul le ; dans le mot de passe est un problème.
Base de données inconnue : le nom n'existe pas
Unknown database 'fivem' signifie que la connexion a fonctionné, mais aucune base de données avec ce nom n'existe. Deux causes :
- Le nom est mal orthographié. Le nom dans la chaîne de connexion doit correspondre exactement. Sous Linux, les noms de bases de données sont sensibles à la casse.
- Vous ne l'avez jamais créée. Créez-la, puis importez le fichier SQL de votre framework dans :
CREATE DATABASE fivem CHARACTER SET utf8mb4;Après cela, le problème suivant est généralement les tables manquantes, couvert dans Table 'db.x' doesn't exist.
Vérifier que cela a fonctionné
Redémarrez oxmysql à partir de la console du serveur et lisez la sortie :
restart oxmysqlQuand la connexion réussit, oxmysql signale la version du serveur de base de données et aucune erreur ne suit. Si un script échoue toujours, le problème est la propre requête de ce script, pas la connexion.
Ordre dans server.cfg
oxmysql doit être démarré avant tout ce qui interroge la base de données. Voici l'ordre qui fonctionne pour un serveur ESX :
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_scriptSur QBCore ou QBox, remplacez es_extended par qb-core ou qbx_core. Un core qui démarre avant oxmysql peut échouer avec des erreurs qui semblent être des problèmes de framework, par exemple ceux dans ESX is nil.
Liste de contrôle
| Symptôme | Correction |
|---|---|
ECONNREFUSED |
Démarrer MariaDB ou MySQL, puis vérifier l'hôte et le port (127.0.0.1, 3306) |
ER_ACCESS_DENIED_ERROR |
Utilisateur, mot de passe ou hôte incorrect ; créer un utilisateur dédié et lui accorder la base de données |
Unknown database |
Créer la base de données, et correspondre exactement à son nom dans la chaîne |
| Échoue seulement avec certains mots de passe | Encoder les caractères spéciaux en URL, ou utiliser la forme user=...;password=... |
| La chaîne semble ignorée | Mettez set mysql_connection_string au-dessus de ensure oxmysql, sur une seule ligne |
| Se connecte, mais les tables manquent | Importer le fichier .sql dans cette base de données |
Réponses rapides
Où va la ligne mysql_connection_string ?
Dans server.cfg, au-dessus de la ligne ensure oxmysql. oxmysql lit la convar au démarrage, donc une ligne placée après est lue trop tard.
Mon mot de passe a un @ ou # dedans et la connexion échoue. Pourquoi ?
Dans la forme mysql:// le mot de passe est une partie d'une URL, donc les caractères spéciaux doivent être codés en URL : @ devient %40, # devient %23, / devient %2F. La forme user=...;password=... n'a pas besoin de codage.
ESX et QBCore utilisent-ils une chaîne de connexion différente ?
Non. ESX, QBCore et QBox lisent tous la même convar mysql_connection_string via oxmysql. Seule la base de données dans laquelle vous importez diffère.

