Pagina 1 di 1
MySQL su VPS: installazione ok, ma da remoto non si collega (bind-address / firewall / utenti)
Inviato: sab feb 28, 2026 11:38 pm
da marco
Ciao a tutti,
sono alle prime armi con MySQL su Linux (VPS). Ho installato MySQL (o MariaDB) e in locale funziona:
se faccio mysql -u root -p dentro la VPS entro senza problemi.
Il problema è da remoto:
dal mio PC non riesco a collegarmi con Workbench o con un client.
Errore tipo: “Can’t connect to MySQL server” oppure timeout.
Cose che ho già provato:
- ho aperto la porta 3306 sul firewall della VPS (credo)
- ho creato un utente, ma non sono sicuro del GRANT
- non so se devo cambiare bind-address
Mi date una checklist semplice su cosa controllare per farlo raggiungere da fuori senza fare buchi di sicurezza?
Grazie!
Marco
Re: MySQL su VPS: installazione ok, ma da remoto non si collega (bind-address / firewall / utenti)
Inviato: dom mar 01, 2026 12:38 am
da fabio
Ciao Marco,
perfetto: se in locale entri, MySQL gira. Per il collegamento da remoto la checklist è questa (in ordine):
1) MySQL ascolta su IP pubblico?
Controlla:
- sudo ss -lntp | grep 3306
Se vedi 127.0.0.1:3306 allora è “solo localhost” e da fuori non entrerai mai.
Serve bind-address = 0.0.0.0 (o l’IP privato della VPS) nel file di config.
2) Firewall / Security group
- UFW/iptables sulla VPS
- regole del provider (es. firewall VPS esterno)
Devi permettere 3306 SOLO dal tuo IP (consigliato), non “da tutto il mondo”.
3) Utente MySQL abilitato da remoto
Non basta user@localhost, serve user@tuo_ip oppure user@%.
Esempio:
CREATE USER 'marco'@'TUO_IP' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON tuo_db.* TO 'marco'@'TUO_IP';
FLUSH PRIVILEGES;
4) Test da remoto “grezzo” prima di Workbench
Dal tuo PC:
- nc -vz IP_VPS 3306
Se fallisce qui, è rete/firewall/bind-address, non Workbench.
Dimmi distro (Ubuntu/Debian?) e se usi MySQL o MariaDB e ti scrivo i comandi esatti con i percorsi dei file di config.
Re: MySQL su VPS: installazione ok, ma da remoto non si collega (bind-address / firewall / utenti)
Inviato: dom mar 01, 2026 1:38 am
da marco
Grazie Fabio!
È Ubuntu 22.04.
Credo sia MySQL (apt install mysql-server).
Ho fatto:
ss -lntp | grep 3306
e mi esce:
127.0.0.1:3306
Quindi mi sa che è quello il problema.
Ho cercato my.cnf ma ne vedo più di uno e non so quale modificare.
Inoltre: io vorrei far collegare solo il mio IP di casa, non tutti.
Re: MySQL su VPS: installazione ok, ma da remoto non si collega (bind-address / firewall / utenti)
Inviato: dom mar 01, 2026 3:38 am
da fabio
Perfetto, allora ci siamo: MySQL sta ascoltando SOLO su localhost.
Su Ubuntu 22.04 di solito:
- /etc/mysql/mysql.conf.d/mysqld.cnf
Apri e cerca:
bind-address = 127.0.0.1
Modifica in:
bind-address = 0.0.0.0
(oppure l’IP privato della VPS, ma 0.0.0.0 va bene se poi limiti da firewall)
Poi:
sudo systemctl restart mysql
e ricontrolla:
sudo ss -lntp | grep 3306
Dovresti vedere 0.0.0.0:3306 oppure :::3306.
Firewall: apri SOLO dal tuo IP pubblico.
Se usi UFW:
sudo ufw allow from TUO_IP to any port 3306 proto tcp
E NON fare:
ufw allow 3306
perché lo aprirebbe a tutti.
Ultimo step: l’utente MySQL.
Crea user con host = TUO_IP (meglio che %):
CREATE USER 'marco'@'TUO_IP' IDENTIFIED BY 'passwordforte';
GRANT ALL PRIVILEGES ON tuo_db.* TO 'marco'@'TUO_IP';
FLUSH PRIVILEGES;
Nota: se l’IP di casa è dinamico, ogni tanto cambia e devi aggiornare la regola UFW o usare una VPN.
Re: MySQL su VPS: installazione ok, ma da remoto non si collega (bind-address / firewall / utenti)
Inviato: dom mar 01, 2026 5:38 am
da marco
Aggiornamento:
Ho cambiato bind-address e ora su ss vedo 0.0.0.0:3306.
Ho messo la regola UFW solo dal mio IP e nc -vz ora risponde OK.
Però MySQL Workbench ora mi dà:
Access denied for user 'marco'@'xxx.xxx.xxx.xxx'
Mi sa che ho sbagliato qualcosa nei permessi/utente.
Io avevo creato marci@localhost (oops).
Come faccio a vedere gli utenti/host che esistono e sistemare senza fare casino?
Re: MySQL su VPS: installazione ok, ma da remoto non si collega (bind-address / firewall / utenti)
Inviato: dom mar 01, 2026 7:38 am
da fabio
Perfetto: rete ok, ora è solo questione di account/host.
Per vedere utenti e host:
SELECT user, host FROM mysql.user;
Vedrai qualcosa tipo:
marco | localhost
root | localhost
ecc.
La soluzione “pulita”:
1) Crea l’utente per il tuo IP (o per una subnet)
CREATE USER 'marco'@'TUO_IP' IDENTIFIED BY 'passwordforte';
2) Dai i permessi SOLO sul DB che ti serve (non *.* se non necessario)
GRANT ALL PRIVILEGES ON tuo_db.* TO 'marco'@'TUO_IP';
FLUSH PRIVILEGES;
3) (Opzionale) Se vuoi eliminare quello sbagliato:
DROP USER 'marco'@'localhost';
Poi riprova con Workbench.
Tip: se vuoi mantenere “admin” e “utente applicativo”, crea due account:
- admin: più permessi, accesso solo dal tuo IP
- app_user: permessi minimi, accesso solo da dove gira l’app
Se incolli l’output di SELECT user, host FROM mysql.user; ti dico esattamente cosa creare/eliminare.