Bigdump: una utility per importare dump voluminosi in MySQL

screenshot di bigdumpHo trovato questa utility di Alexey Ozerov dopo un vano tentativo di fare l’upload di un voluminoso dump di dati su un server MySQL.
I problemi che si verificano in questi casi sono dovuti ad alcune impostazioni del PHP nel file di configurazione php.ini: upload_max_filesize, memory_limit, post_max_size, o alle impostazioni di timeout per gli script PHP: max_execution_time (default = 30s).
Inoltre, sui server di produzione, e su gran parte dei server in hosting gestiti con Plesk, non si hanno i diritti per cambiare le impostazioni dei file di configurazione per ovvie ragioni di sicurezza. Se ciò non bastasse, questi server solitamente sono impostati in modalità safe, quindi non si ha nemmeno la possibilità di modificare a runtime i valori dei parametri preimpostati. Per completare l’opera frequentemente non si ha nemmeno a disposizione una shell per i comandi MySQL.

Per fortuna quelli di phpMyAdmin lo sanno e quando ci si imbatte in un errore dovuto a queste limitazioni, l’applicazione stessa suggerisce l’utilizzo di Bigdump (ma non garantiscono l’utilizzo, perché lo script è di terze parti).
Questo piccolo ma prodigioso script PHP esegue piccole porzioni del dump, ripartendo in sessioni successive fino al termine della query. In questo modo lo script rimane sempre nei limiti di memoria imposti, anche quelli più restrittivi.

screenshot di bigdumpL’utilizzo è semplicissimo: per prima cosa bisogna aprirlo con un editor ed impostare i parametri di connessione al database, poi si può fare l’upload sul server web e modificargli i permessi (chmod 777 su Linux). Una volta lanciato, la prima schermata richiede di selezionare il file .sql che viene caricato sul server spezzato in chunk di 2Mb, per evitare i limiti di upload_max_filesize.
Si può anche usare FTP per trasferire il dump sul server, in questo caso bisogna metterlo nella stessa directory dove risiede Bigdump. A questo punto nella schermata compare il nome del file caricato ed accanto un link con “start import”, basta fare un click ed aspettare pazientemente!

Per darvi un’idea del tempo che serve, posso dirvi che per un dump di 10 tabelle InnoDB con 12000 records per un totale di circa 2Mb ci sono voluti circa 10′. Con tabelle MyISAM è molto più veloce, ad esempio con un file di 8Mb contenente una tabella con 33500 records ha impiegato pochi secondi.

Questo script utilizza AJAX e javascript per mostrare lo stato di avanzamento dell’operazione in modo asincrono e senza ricaricare la pagina nel browser, dunque javascript deve essere abilitato. Da sottolineare anche che il progetto è in fase beta, dunque non è dichiarato stabile, comunque nelle prove che ho fatto non ho avuto nessun problema. Infine una raccomandazione, è molto importante cancellare Bigdump dal server una volta terminata l’importazione perché si può facilmente intuire la pericolosità dello stesso in mani diverse dal gestore del db!

Download:

Bigdump.zip

Conclusioni:

Senza Bigdump avrei dovuto scrivermi uno script simile a Bigdump, ma perché perdere tempo? Secondo me è utilissimo!

Riferimenti ed approfondimenti: