Riepilogo rapido
Per installare MySQL su un VPS Windows Server in 5 passaggi:
1) scarica MySQL Installer 8.4 LTS da dev.mysql.com,
2) avvia l'installatore in modalità Server Only,
3) configura la password root e l'autenticazione caching_sha2_password,
4) verifica il servizio con Get-Service MySQL84 in PowerShell,
5) metti in sicurezza l'installazione con mysql_secure_installation. Prevedi 15 minuti. MySQL 8.4 LTS (versione attuale: 8.4.9) è la versione raccomandata per la produzione.
Requisiti
Prima di iniziare, verifica questi punti sulla tua macchina:
Windows Server 2019 o 2022 (2022 raccomandato)
Minimo 2 GB di RAM: 4 GB raccomandati per un uso reale
Accesso amministratore tramite RDP
Porta 3306 disponibile (verifica con
netstat -ano | findstr :3306).NET Framework 4.5.2+ (incluso in Windows Server 2019/2022)
Non hai ancora un VPS Windows? Scopri le offerte VPS Windows OuiHeberg: disponibili a partire da pochi euro al mese con Windows Server 2022 preinstallato.
Quale versione di MySQL scegliere?
Dal 2023, Oracle ha adottato un ciclo di versioni a due rami: LTS (Long-Term Support) e Innovation (aggiornamenti frequenti, meno stabili). Ecco come si presenta concretamente a maggio 2026:
Versione | Tipo | Ultima release | Supporto fino a | Raccomandato per |
|---|---|---|---|---|
MySQL 8.0 | Legacy | 8.0.46 | EOL aprile 2026 | Migrazione urgente richiesta |
MySQL 8.4 LTS | LTS ✅ | 8.4.9 | 2032 | Produzione: scelta raccomandata |
MySQL 9.7 LTS | LTS (nuovo) | 9.7.0 | 2032+ | Produzione (uscita aprile 2026) |
La nostra raccomandazione: MySQL 8.4.9 LTS per la produzione.
MySQL 8.0 è in fine vita da aprile 2026: non installarlo più. MySQL 9.7 LTS è appena uscito (21 aprile 2026): è solido ma il suo ecosistema di strumenti e driver non è ancora maturo come il 8.4. Il 8.4 LTS rimane la scelta più sicura per un server di produzione nel 2025-2026.
Metodo 1: Installazione tramite l'installatore grafico (GUI)
È il metodo più semplice. Si adatta alla maggior parte dei casi.
Scaricare MySQL Installer
Vai su dev.mysql.com/downloads/installer/ e scarica MySQL Installer for Windows (file mysql-installer-community-8.4.x.msi, ~450 MB per la versione completa).
Puoi anche utilizzare il web installer (~3 MB) che scarica i componenti al volo: comodo se hai una buona connessione.
Scegliere il tipo di installazione
All'avvio, l'installatore propone diversi profili:
Tipo | Cosa installa | Casi d'uso |
|---|---|---|
Server Only | Solo MySQL Server | VPS di produzione ✅ |
Developer Default | Server + Workbench + connettori | Posto di sviluppo |
Full | Tutto (>1 GB) | Raramente utile su un VPS |
Scegli "Server Only" su un VPS. Non è necessario installare MySQL Workbench su un server senza interfaccia grafica permanente.
Configurare il server MySQL
Il wizard ti pone diverse domande importanti:
Tipo di configurazione:
Development Computer: MySQL utilizza poche risorse (per un posto di sviluppo)
Server Computer: condivide le risorse con altri servizi
Dedicated Computer: MySQL utilizza la maggior parte della RAM ✅ (raccomandato su un VPS dedicato a MySQL)
Porta: lascia 3306 di default a meno di vincoli specifici.
Metodo di autenticazione: scegli caching_sha2_password (opzione raccomandata da MySQL 8.0). Non utilizzare mysql_native_password a meno che tu non abbia client obsoleti che non supportano SHA-2.
Password root: scegli una password forte (16+ caratteri, maiuscole, numeri, caratteri speciali). Annotala immediatamente in un gestore di password.
Servizio Windows: lascia il nome di default (MySQL84) e seleziona "Start the MySQL Server at System Startup".
Verificare l'installazione
Una volta completata l'installazione, apri PowerShell come amministratore:
# Verificare che il servizio sia in esecuzione
Get-Service MySQL84
# Risultato atteso :
# Status Name DisplayName
# ------ ---- -----------
# Running MySQL84 MySQL84
Collegati quindi al CLI MySQL per confermare:
cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
.\mysql.exe -u root -p
Inserisci la tua password root. Se ottieni il prompt mysql>, l'installazione è riuscita.
-- Verificare la versione installata
SELECT VERSION();
-- Risultato : 8.4.9
Metodo 2: Installazione silenziosa tramite PowerShell (avanzato)
Questo metodo è ideale per automatizzare i deployment o configurare più VPS senza interfaccia grafica. Tutto si fa in PowerShell.
# 1. Scaricare il MSI MySQL 8.4 LTS
$url = "https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.9-winx64.msi"
$dest = "C:\Temp\mysql-8.4.9-winx64.msi"
New-Item -ItemType Directory -Force -Path "C:\Temp" | Out-Null
Invoke-WebRequest -Uri $url -OutFile $dest -UseBasicParsing
# 2. Installazione silenziosa con parametri
$arguments = @(
"/i", $dest,
"/qn",
"/L*V", "C:\Temp\mysql_install.log",
"INSTALLDIR=`"C:\Program Files\MySQL\MySQL Server 8.4\`"",
"DATADIR=`"C:\ProgramData\MySQL\MySQL Server 8.4\Data\`"",
"PORT=3306",
"SERVICENAME=MySQL84",
"NTSERVICE=1",
"ADDLOCAL=MySQLServer"
)
Start-Process msiexec.exe -ArgumentList $arguments -Wait -NoNewWindow
# 3. Inizializzare il database
$mysqlBin = "C:\Program Files\MySQL\MySQL Server 8.4\bin"
& "$mysqlBin\mysqld.exe" --initialize-insecure --user=mysql
# 4. Avviare il servizio
Start-Service MySQL84
# 5. Impostare la password root (sostituisci VotreMotDePasse con una password forte)
& "$mysqlBin\mysql.exe" -u root --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'VotreMotDePasse!';"
Write-Host "MySQL 8.4 installato con successo." -ForegroundColor Green
Verifica post-installazione:
Get-Service MySQL84
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" -u root -p -e "SELECT VERSION();"
Nota: L'opzione
--initialize-insecurecrea un account root senza password. Lo script lo imposta immediatamente dopo. Non lasciare mai un MySQL senza password root, nemmeno temporaneamente.
Configurare l'accesso remoto a MySQL
Per impostazione predefinita, MySQL ascolta solo su 127.0.0.1. Per connetterti da un altro server o da uno strumento come MySQL Workbench, devi aprire l'accesso remoto.
Aprire la porta 3306 nel firewall di Windows
# Aggiungere una regola in entrata per MySQL
New-NetFirewallRule `
-DisplayName "MySQL 3306" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 3306 `
-Action Allow `
-Profile Any
# Verificare la regola
Get-NetFirewallRule -DisplayName "MySQL 3306"
Per approfondire la gestione del firewall, consulta la nostra guida per configurare il firewall di Windows Server.
Creare un utente con accesso remoto
Non dare mai accesso remoto all'account root. Crea un utente dedicato:
-- Connessione come root prima
mysql -u root -p
-- Creare un utente remoto (sostituisci l'IP con quello del tuo client)
CREATE USER 'monuser'@'192.168.1.100' IDENTIFIED BY 'MotDePasseFort!2025';
-- Oppure per autorizzare tutti gli IP (meno sicuro)
CREATE USER 'monuser'@'%' IDENTIFIED BY 'MotDePasseFort!2025';
-- Concedere i diritti su un database specifico
GRANT SELECT, INSERT, UPDATE, DELETE ON mabase.* TO 'monuser'@'192.168.1.100';
FLUSH PRIVILEGES;
Consiglio: limita sempre l'accesso a un IP specifico piuttosto che al wildcard %.
Attivare SSL/TLS per le connessioni remote
MySQL 8.4 genera automaticamente certificati SSL all'avvio. Verifica che siano attivi:
SHOW VARIABLES LIKE '%ssl%';
-- have_ssl deve mostrare: YES
Per forzare SSL su un utente remoto:
ALTER USER 'monuser'@'192.168.1.100' REQUIRE SSL;
FLUSH PRIVILEGES;
Dal lato client, la connessione avviene quindi con:
mysql -u monuser -p -h IP_DU_SERVEUR --ssl-mode=REQUIRED
Ottimizzare le prestazioni di MySQL (my.ini)
Il file di configurazione di MySQL su Windows si trova qui: C:\ProgramData\MySQL\MySQL Server 8.4\my.ini
Aprilo con Notepad++ o PowerShell e regola questi parametri in base alla tua RAM disponibile:
[mysqld]
# Dimensione del buffer InnoDB: parametro più importante
# Imposta al 70% della RAM disponibile per MySQL
innodb_buffer_pool_size = 2G
# Numero massimo di connessioni simultanee
max_connections = 150
# Dimensione dei file di log InnoDB
innodb_log_file_size = 256M
# Cache delle query (disattivata di default in 8.x, lascia a 0)
query_cache_size = 0
query_cache_type = 0
# Thread I/O InnoDB (= numero di core CPU)
innodb_read_io_threads = 4
innodb_write_io_threads = 4
Tabella di configurazione raccomandata in base alla RAM del VPS:
RAM del VPS |
|
|
|
|---|---|---|---|
2 GB | 1G | 75 | 128M |
4 GB | 2,5G | 150 | 256M |
8 GB | 5G | 300 | 512M |
16 GB | 11G | 500 | 1G |
Dopo la modifica, riavvia il servizio:
Restart-Service MySQL84
Mettere in sicurezza MySQL su Windows Server
Avviare mysql_secure_installation
È la prima cosa da fare dopo l'installazione:
cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
.\mysql_secure_installation.exe
Lo strumento ti guida per rimuovere gli utenti anonimi, disabilitare il login root remoto e rimuovere il database test. Rispondi Y a tutte le domande.
Gli 8 punti di sicurezza essenziali
1. Rimuovere gli utenti anonimi
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;
2. Disabilitare il login root remoto
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;
3. Rimuovere il database test
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
4. Utilizzare password forti: attivare la politica di validazione
INSTALL PLUGIN validate_password SONAME 'validate_password.dll';
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
5. Limitare i privilegi per utente
Non utilizzare mai GRANT ALL PRIVILEGES ON *.* TO .... Concedi solo i diritti necessari sui database interessati.
-- Buon esempio
GRANT SELECT, INSERT, UPDATE ON appdb.* TO 'appuser'@'localhost';
-- Da evitare assolutamente
-- GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%';
6. Attivare i log di audit
Aggiungi in my.ini:
[mysqld]
general_log = 1
general_log_file = "C:/ProgramData/MySQL/MySQL Server 8.4/Data/mysql_general.log"
log_error = "C:/ProgramData/MySQL/MySQL Server 8.4/Data/mysql_error.log"
7. Crittografare le connessioni (SSL/TLS)
Come visto nella sezione accesso remoto, forzare SSL su tutti gli utenti che si connettono dall'esterno con REQUIRE SSL.
8. Aggiornare regolarmente
Consulta dev.mysql.com/downloads/mysql/ per le nuove versioni. Gli aggiornamenti di sicurezza sono frequenti: iscriviti agli MySQL Security Advisories.
Automatizzare i backup di MySQL
Script PowerShell completo con rotazione
Copia questo script in C:\Scripts\mysql_backup.ps1:
# =============================================
# Script di backup MySQL con rotazione
# Da pianificare tramite il Pianificatore di attività
# =============================================
$mysqlBin = "C:\Program Files\MySQL\MySQL Server 8.4\bin"
$backupDir = "C:\Backups\MySQL"
$mysqlUser = "root"
$mysqlPass = "VotreMotDePasse!" # O utilizza un file .cnf
$retention = 7 # Giorni di retention
# Creare la cartella di backup se necessario
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
# Nome del file con timestamp
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
$backupFile = "$backupDir\mysql_backup_$timestamp.sql"
$compressedFile = "$backupFile.gz"
# Elencare tutti i database (escludendo i database di sistema)
$databases = & "$mysqlBin\mysql.exe" -u $mysqlUser -p"$mysqlPass" `
-e "SHOW DATABASES;" --batch --skip-column-names 2>$null |
Where-Object { $_ -notin @('information_schema','performance_schema','sys','mysql') }
# Dump di ogni database
foreach ($db in $databases) {
$dbFile = "$backupDir\${db}_$timestamp.sql"
& "$mysqlBin\mysqldump.exe" `
-u $mysqlUser -p"$mysqlPass" `
--single-transaction `
--routines `
--triggers `
--databases $db `
--result-file=$dbFile 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ Backup riuscito: $db" -ForegroundColor Green
} else {
Write-Host "✗ Errore su: $db" -ForegroundColor Red
}
}
# Rotazione: rimuovere i file più vecchi di $retention giorni
Get-ChildItem -Path $backupDir -Filter "*.sql" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$retention) } |
Remove-Item -Force
Write-Host "Rotazione effettuata. File conservati: $retention giorni." -ForegroundColor Cyan
Pianificare con il Pianificatore di attività di Windows
# Creare un'attività pianificata: backup quotidiano alle 2 del mattino
$action = New-ScheduledTaskAction `
-Execute "PowerShell.exe" `
-Argument "-NonInteractive -ExecutionPolicy Bypass -File C:\Scripts\mysql_backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Hours 1) `
-RestartCount 3 `
-RestartInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask `
-TaskName "MySQL Backup Daily" `
-Action $action `
-Trigger $trigger `
-Settings $settings `
-RunLevel Highest `
-Force
Write-Host "Attività pianificata creata con successo." -ForegroundColor Green
Per approfondire la strategia di backup completa del tuo server, consulta la nostra guida per fare il backup del tuo VPS Windows.
Risoluzione dei problemi: 6 errori frequenti
1. Il servizio MySQL non si avvia
Controlla prima i log di errore:
Get-Content "C:\ProgramData\MySQL\MySQL Server 8.4\Data\[nome-macchina].err" -Tail 50
Cause frequenti: porta 3306 già occupata, permessi insufficienti sulla cartella Data, file my.ini malformato.
2. Errore "Access denied for user root"
Se hai dimenticato la password root o se l'autenticazione fallisce:
# Fermare il servizio
Stop-Service MySQL84
# Avviare MySQL in modalità senza autenticazione
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqld.exe" --skip-grant-tables --skip-networking
# In un'altra finestra PowerShell, connettersi senza password
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" -u root
# Reimpostare la password
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NuovaPassword!';
EXIT;
# Riavviare normalmente
Stop-Process -Name mysqld -Force
Start-Service MySQL84
3. La porta 3306 è già in uso
# Identificare il processo che utilizza la porta 3306
netstat -ano | findstr :3306
# Trovare il nome del processo con il suo PID
Get-Process -Id [PID_TROVATO]
O fermate il processo concorrente, oppure cambiate la porta MySQL in my.ini (port=3307).
4. Impossibile connettersi da remoto
Checklist rapida:
La porta 3306 è aperta nel firewall di Windows? (
Get-NetFirewallRule -DisplayName "MySQL 3306")MySQL sta ascoltando su
0.0.0.0? (SHOW VARIABLES LIKE 'bind_address';deve restituire*o0.0.0.0)L'utente ha i diritti dall'IP remoto? (
SELECT User, Host FROM mysql.user;)Il firewall del vostro host/rete blocca la porta?
Per ascoltare su tutte le interfacce, aggiungete in my.ini:
[mysqld]
bind-address = 0.0.0.0
5. Password root dimenticata (procedura di reset)
Vedi il punto 2 sopra: la procedura --skip-grant-tables funziona per entrambi i casi.
6. Errore "Tabella piena" (InnoDB)
Questo errore si verifica quando innodb_buffer_pool_size è troppo basso o che il tablespace è saturo.
-- Controllare lo spazio disponibile
SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024,1) AS "Dimensione (Mo)"
FROM information_schema.tables
GROUP BY table_schema;
-- Controllare la dimensione del tablespace InnoDB
SHOW VARIABLES LIKE 'innodb_data_file_path';
Aumentate innodb_buffer_pool_size in my.ini secondo la tabella della sezione performance, poi riavviate il servizio.
FAQ
Quale versione di MySQL installare su Windows Server 2022?
Installate MySQL 8.4.9 LTS. È la versione Long-Term Support raccomandata per la produzione nel 2026-2028, con supporto garantito fino al 2032. MySQL 8.0 è in fine vita da aprile 2026.
MySQL è gratuito su Windows Server?
Sì. MySQL Community Edition è totalmente gratuito sotto licenza GPL. MySQL Enterprise Edition (a pagamento) aggiunge strumenti di monitoraggio, audit e backup avanzati: utile per le grandi aziende, ma non necessario per la maggior parte degli usi.
Come cambiare la porta MySQL predefinita?
Modificate my.ini (C:\ProgramData\MySQL\MySQL Server 8.4\my.ini) e cambiate la riga port=3306 con la porta desiderata (es. port=3307). Riavviate il servizio e aggiornate la regola del firewall corrispondente.
MySQL o MariaDB su Windows Server?
Entrambi sono ottime scelte. MySQL 8.4 LTS è più adatto se utilizzate strumenti Oracle o funzionalità specifiche (JSON, Group Replication). MariaDB è spesso più performante su carichi misti e rimane 100% comunitaria. Per un VPS Windows standard, MySQL 8.4 è la scelta più documentata e compatibile con le stack PHP/Python moderne.
Come sapere se MySQL è installato correttamente?
Due verifiche rapide in PowerShell: Get-Service MySQL84 (lo stato deve essere Running) e mysql -u root -p -e "SELECT VERSION();" (deve restituire 8.4.9).
È possibile installare MySQL su un VPS Windows con 2 Go di RAM?
Sì, ma è il minimo. Con 2 Go, impostate innodb_buffer_pool_size = 1G e max_connections = 75. Per carichi di produzione reali (diverse decine di richieste simultanee), 4 Go di RAM è il minimo confortevole.
Fonti utili
Download MySQL Community Server: dev.mysql.com
Documentazione ufficiale MySQL 8.4: dev.mysql.com
Note di rilascio MySQL 8.4: dev.mysql.com
Avvisi di sicurezza MySQL: mysql.com
Fine vita MySQL 8.0 (EOL): dev.mysql.com
