Per importare database grandi con phpMyAdmin bisogna considerare i limiti di caricamento PHP, il tempo massimo di esecuzione e la memoria disponibile. Quando il dump supera tali limiti, ripetere l’upload non risolve il problema: conviene usare un file compresso, una directory di importazione configurata dal provider oppure la riga di comando.
Prima di qualsiasi importazione crea un backup del database di destinazione. Un file SQL può contenere comandi DROP, TRUNCATE o DELETE e sovrascrivere dati esistenti.
Controlli preliminari sul file SQL
Verifica che il dump provenga da una fonte affidabile, che il download sia completo e che la sua dimensione sia plausibile. Se il fornitore pubblica un checksum, confrontalo. Non aprire e salvare un dump molto grande con un editor che potrebbe troncarlo o modificarne la codifica.
Compatibilità di versione e motore
Controlla versione di MySQL o MariaDB, motori delle tabelle, charset e collation. Un dump generato su una versione più recente può contenere sintassi o collazioni non disponibili sul server di destinazione. Gli errori vanno corretti in base al messaggio preciso, non con sostituzioni globali casuali.
Database vuoto o database esistente
Decidi se l’importazione deve creare una copia nuova o sostituire dati. Per una migrazione completa è più sicuro importare in un database vuoto e testare l’applicazione. Se devi lavorare su un database esistente, conserva un export immediatamente ripristinabile.
1. Verificare il limite mostrato da phpMyAdmin
Apri il database corretto e seleziona la scheda Importa. L’interfaccia mostra normalmente la dimensione massima consentita. Il valore dipende almeno da upload_max_filesize, post_max_size, memory_limit e max_execution_time; post_max_size deve essere superiore a upload_max_filesize.
Su hosting condiviso questi parametri possono essere gestiti dal provider. Non tutti sono modificabili tramite .htaccess o file locali e una direttiva non supportata può causare un errore del sito.
La documentazione ufficiale elenca le alternative nella FAQ di phpMyAdmin sui dump grandi.
2. Comprimere il dump SQL
phpMyAdmin può importare formati compressi supportati dal server, come .sql.gz. La compressione riduce i dati trasferiti via browser, ma non elimina i limiti di esecuzione e memoria durante la decompressione e l’esecuzione delle query.
gzip -9 backup.sql
Conserva anche una copia originale o verifica l’archivio prima di cancellarla. Se il file compresso rientra nel limite, selezionalo dalla scheda Importa lasciando il formato SQL.
3. Importare correttamente da phpMyAdmin
- seleziona il database di destinazione;
- apri Importa;
- scegli il file
.sql o compresso; - mantieni il set di caratteri coerente con il dump;
- abilita l’importazione parziale solo se necessario e se sai come riprendere;
- avvia il processo senza chiudere la scheda;
- leggi il messaggio finale e non presumere che un upload concluso equivalga a un’importazione completa.
La procedura base è descritta nella guida ufficiale a importazione ed esportazione di phpMyAdmin.
4. Usare la directory UploadDir del server
Un amministratore può configurare in phpMyAdmin una directory server-side dedicata alle importazioni. Il file viene caricato con SFTP o File Manager in una posizione non pubblica e poi selezionato dall’interfaccia, evitando il trasferimento HTTP del browser.
Questa funzione deve essere predisposta e protetta dal provider. Non creare autonomamente una cartella con dump SQL dentro public_html: il database potrebbe essere scaricato da terzi e contenere password hash, dati personali, chiavi o configurazioni.
5. Importare con WP-CLI su un sito WordPress
Se hai accesso SSH e il database appartiene a WordPress, WP-CLI legge le credenziali da wp-config.php:
cd /percorso/del/sito
wp db export backup-prima-import.sql
wp db import nuovo-database.sql
Il comando non crea il database e applica esattamente le istruzioni presenti nel file. Verifica percorso, database configurato e backup prima di confermare. La sintassi aggiornata è disponibile nella documentazione di wp db import.
Importare un dump compresso con WP-CLI
Decomprimi il file in una directory privata con spazio sufficiente e poi importalo. Evita di lasciare la copia SQL nella document root:
gunzip -k backup.sql.gz
wp db import backup.sql
Al termine elimina in modo sicuro i file temporanei soltanto dopo aver verificato il sito e conservato il backup necessario.
6. Usare il client MySQL dalla shell
Per database non WordPress o ambienti amministrati puoi usare il client MySQL:
mysql --default-character-set=utf8mb4 -u NOME_UTENTE -p NOME_DATABASE < backup.sql
La password viene richiesta in modo interattivo. Evita di inserirla direttamente nella riga di comando, perché può rimanere nella cronologia o comparire nell’elenco dei processi. Per un file compresso:
gunzip -c backup.sql.gz | mysql --default-character-set=utf8mb4 -u NOME_UTENTE -p NOME_DATABASE
Su grandi importazioni è preferibile eseguire il comando in una sessione stabile e monitorare spazio disco, connessioni ed eventuali errori.
7. Dividere un dump: quando farlo
Spezzare un file SQL manualmente è rischioso: una divisione nel mezzo di una query, di una stringa o di un blocco può rendere le parti inutilizzabili. Se non hai shell, chiedi al provider un’importazione assistita o genera più file già in fase di esportazione, separando tabelle o gruppi coerenti.
Per WordPress, importa prima struttura e dati tenendo conto delle dipendenze. Tabelle molto grandi come log, sessioni o statistiche potrebbero non essere indispensabili, ma vanno escluse solo dopo aver verificato il plugin che le usa.
Perché evitare vecchi script di importazione PHP
Strumenti storici caricati nel sito promettono di eseguire il dump a blocchi, ma possono essere abbandonati, incompatibili o accessibili pubblicamente. Uno script che contiene credenziali del database e accetta file SQL costituisce un bersaglio critico se resta online.
Preferisci phpMyAdmin mantenuto dal provider, WP-CLI, il client MySQL o l’assistenza tecnica. Se usi eccezionalmente uno strumento temporaneo, verifica provenienza e compatibilità, limita l’accesso e rimuovi subito script, dump e credenziali al termine.
Errori frequenti e diagnosi
413 Request Entity Too Large
Il server web o un proxy rifiuta il corpo della richiesta prima che phpMyAdmin lo elabori. Riduci la dimensione con compressione oppure usa shell o UploadDir; modificare soltanto PHP potrebbe non bastare.
Maximum execution time exceeded
L’importazione ha superato il tempo consentito. Non dare per scontato che il database sia vuoto: alcune query possono essere state eseguite. Ripristina il backup o riparti da un database pulito con un metodo adatto ai processi lunghi.
Unknown collation
La destinazione non riconosce una collation presente nel dump. La soluzione migliore è usare versioni compatibili o esportare con una collation supportata. Una sostituzione testuale è possibile soltanto dopo aver capito l’impatto su confronti e ordinamento.
Packet too large
Una singola istruzione supera max_allowed_packet. La compressione del file non riduce la dimensione della query una volta decompressa. Occorre adeguare il parametro server o generare un dump con istruzioni più piccole.
Access denied
Controlla utente, password, host e privilegi sul database. Un utente può collegarsi correttamente ma non avere permessi per creare, modificare o eliminare tabelle.
Verifiche dopo l’importazione
- controlla che tutte le tabelle previste siano presenti;
- confronta numero indicativo di righe e dimensioni con l’origine;
- verifica errori applicativi e connessione al database;
- prova login, salvataggi, ricerche e funzioni critiche;
- controlla charset, caratteri accentati ed emoji;
- rimuovi dump e file temporanei dalle directory accessibili;
- crea un nuovo backup verificato dello stato funzionante.
Conclusione
Per importare database grandi con phpMyAdmin conviene prima verificare limiti, compressione e compatibilità. Quando browser e PHP non sono adatti alla dimensione del dump, WP-CLI o il client MySQL offrono un processo più stabile. Qualunque metodo scegli, proteggi il file SQL, conserva un backup e verifica l’esito prima di rimuovere la copia precedente.