oxmysql non riesce a connettersi: ECONNREFUSED, accesso negato, database sconosciuto
oxmysql non si connette al tuo database FiveM? Risolvi ECONNREFUSED, ER_ACCESS_DENIED_ERROR e database sconosciuto con la giusta mysql_connection_string.
Quando il tuo server si avvia, oxmysql stampa uno di questi e ogni script che tocca il database fallisce dopo:
Error: connect ECONNREFUSED 127.0.0.1:3306
ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
Unknown database 'fivem'Ogni riga significa qualcosa di diverso. Questa guida mostra come leggerle, come scrivere la stringa di connessione, e cosa controllare sul server del database.
La stringa di connessione
oxmysql ottiene tutto da un convar in server.cfg. La forma URL:
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"La forma key=value fa lo stesso:
set mysql_connection_string "user=fivem;password=yourpassword;host=127.0.0.1;port=3306;database=fivem"Mettila sopra ensure oxmysql, e sopra qualsiasi script che usa il database:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extendedConsiglio: le ricette di txAdmin creano questa riga per te. Se la modifichi a mano, mantieni le virgolette, e mantienila su una singola riga.
ECONNREFUSED: nulla è in ascolto
ECONNREFUSED significa che il server del database ha rifiutato la connessione o non è in esecuzione a quell'indirizzo e porta. Lavora attraverso questi in ordine:
- MariaDB o MySQL è in esecuzione? Su Windows con XAMPP, avvia MySQL nel pannello di controllo. Con un'installazione del servizio, controlla i Servizi. Su Linux:
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb- L'host e la porta sono giusti?
localhoste127.0.0.1sono la stessa macchina, la porta predefinita è3306. Se il tuo database è su un'altra macchina o un host gestito, usa il suo indirizzo e porta, e controlla che il suo firewall consenta l'IP del tuo server di gioco. - Il database è associato all'indirizzo giusto? Se ascolta solo la macchina locale, un server di gioco remoto non può raggiungerlo.
ER_ACCESS_DENIED_ERROR: login sbagliato
Access denied for user significa che il server ha risposto, ma ha rifiutato l'utente, la password, o l'host da cui quell'utente può connettersi.
- Controlla l'utente e la password accedendo tu stesso con gli stessi valori:
mysql -u fivem -p -h 127.0.0.1- Crea un utente dedicato invece di usare
root. Nella console di 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 utente è legato a un host.
'fivem'@'localhost'non può connettersi da un'altra macchina. Per un server di gioco remoto, crea l'utente per quell'host. rootsu un'installazione Linux fresca spesso usa l'autenticazione socket, quindi un login per password sulla rete fallisce. Un utente separato evita il problema.
Caratteri speciali nella password
Nella forma mysql://, la password si trova dentro un URL. I caratteri con un significato negli URL lo rompono, e l'errore che ottieni è solitamente accesso negato. Codificali:
| Carattere | Scrivilo come |
|---|---|
@ |
%40 |
# |
%23 |
/ |
%2F |
: |
%3A |
% |
%25 |
? |
%3F |
Quindi la password p@ss#1 diventa:
set mysql_connection_string "mysql://fivem:p%40ss%231@localhost/fivem?charset=utf8mb4"Le alternative più semplici sono una password fatta solo di lettere e cifre, o la forma user=...;password=..., dove solo ; nella password è un problema.
Unknown database: il nome non esiste
Unknown database 'fivem' significa che il login ha funzionato, ma nessun database con quel nome esiste. Due cause:
- Il nome è scritto male. Il nome nella stringa di connessione deve corrispondere esattamente. Su Linux, i nomi del database sono sensibili alle maiuscole.
- Non l'hai mai creato. Crealo, poi importa il file SQL del tuo framework:
CREATE DATABASE fivem CHARACTER SET utf8mb4;Dopo di che, il prossimo problema è di solito tabelle mancanti, coperto in Table 'db.x' doesn't exist.
Controlla che sia funzionato
Riavvia oxmysql dalla console del server e leggi l'output:
restart oxmysqlQuando la connessione ha successo, oxmysql riporta la versione del server del database e nessun errore segue. Se uno script fallisce ancora, il problema è la query propria di quello script, non la connessione.
Ordine in server.cfg
oxmysql deve essere avviato prima di qualsiasi cosa che interroghi il database. Ecco l'ordine che funziona per un server ESX:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_scriptSu QBCore o QBox, scambia es_extended con qb-core o qbx_core. Un core che si avvia prima di oxmysql può fallire con errori che sembrano problemi del framework, ad esempio quelli in ESX is nil.
Checklist
| Sintomo | Soluzione |
|---|---|
ECONNREFUSED |
Avvia MariaDB o MySQL, poi controlla host e porta (127.0.0.1, 3306) |
ER_ACCESS_DENIED_ERROR |
Utente, password o host sbagliato; crea un utente dedicato e concedigli il database |
Unknown database |
Crea il database, e corrisponde il suo nome esattamente nella stringa |
| Fallisce solo con alcune password | Codifica i caratteri speciali dell'URL, o usa la forma user=...;password=... |
| La stringa sembra ignorata | Metti set mysql_connection_string sopra ensure oxmysql, su una riga |
| Si connette, ma le tabelle mancano | Importa il file .sql in quel database |
Risposte rapide
Dove va la riga mysql_connection_string?
In server.cfg, sopra la riga ensure oxmysql. oxmysql legge il convar quando si avvia, quindi una riga posizionata dopo viene letta troppo tardi.
La mia password ha un @ o # in essa e la connessione fallisce. Perché?
Nella forma mysql:// la password è parte di un URL, quindi i caratteri speciali devono essere codificati come URL: @ diventa %40, # diventa %23, / diventa %2F. La forma user=...;password=... non ha bisogno di codifica.
ESX e QBCore usano una stringa di connessione diversa?
No. ESX, QBCore e QBox leggono tutti la stessa variabile mysql_connection_string attraverso oxmysql. Solo il database che importi differisce.

