WordPress: aggiornare il database da riga di comando

L’aggiornamento automatico di WordPress funziona alla grande nel 90% dei casi (ok, forse nell’80%…), ma una volta aggiornati i file (tutto sommato la parte più semplice della procedura di upgrade a una nuova versione) può venir richiesto un upgrade del database la prima volta che ci si collega alla schermata di login alla dashboard.

Accedendo a wp-login.php o wp-admin si viene reindirizzati alla URL “http://nomedominio/wp-admin/upgrade.php”, cioè lo script php di upgrade del database. E qui arrivano i dolori se il database da aggiornare non si limita a pochi MB ma arriva a pesare qualche GB. Con database molto pesanti il tempo di aggiornamento aumenta considerevolmente, il consumo di risorse di mysql (CPU e RAM) sulla macchina su cui si sta aggiornando schizza in alto e lo script upgrade.php può andare in timeout non riuscendo a terminare la procedura con successo. Una procedura di upgrade del database di WordPress che non si conclude in modo ottimale può comportare l’impossibilità di accedere ancora al backend del blog, con il messaggio “è necessario l’aggiornamento del database” che continua a riproporsi.

Aggiornamento database WordPress, come riaccedere al proprio blog

Le strade sono due per riaccedere al proprio WordPress: si accede via FTP o ssh al file /wp-includes/version.php e lo si modifica con un editor di testi cambiando il numero di versione del database inserendo l’identificativo della versione da cui si è effettuato l’upgrade. Ad esempio se aggiornavamo da WordPress 4.5.4 a WordPress 4.6.1 e non accediamo più al backend, la versione del database da inserire per poter accedere nuovamente al backend è la 36686, dovremo pertanto andare a togliere la versione del database relativa a WordPress 4.6.1 che è la 37965. La parte di codice interessata a questa modifica in version.php è la seguente:

/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
*
* @global int $wp_db_version
*/
$wp_db_version = 37965;

Basta cambiare 37965 e inserire 36686 salvando il file, tutto qui. Con questa modifica il numero di versione presente in version.php sarà lo stesso salvato nel database di WordPress, precisamente nella tabella wp_options come valore di db_version. L’elenco di tutte le versioni di WordPress e relativo numero identificativo del database è presente nel documento WordPress Versions.

Ovviamente questo è un escamotage per non eseguire l’upgrade del database quando si riscontrano problemi nella procedura di aggiornamento. Se invece vogliamo eseguire l’upgrade evitando problemi di timeout PHP con una procedura più sicura ed efficace possiamo ricorrere a un tool da riga di comando chiamato WP-CLI, una interfaccia a riga di comando che consente di gestire qualsiasi aspetto di WordPress, anche l’upgrade del database. Il prerequisito per usare WP-CLI è che WordPress sia installato su un server o virtual server a cui abbiamo pieno accesso tramite SSH.

L’installazione di WP-CLI è molto semplice, basta scaricarlo con curl o wget in una directory del proprio server:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Fatto questo va reso eseguibile lo script wp-cli.phar e spostato in una directory presente nel proprio PATH in modo da richiamarlo facilmente dalla console di Linux:

$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp

A questo punto dobbiamo portarci nella directory web dove è presente la nostra installazione di WordPress a cui vogliamo aggiornare il database e impartire il seguente comando:

sudo -u www-data -i -- wp core update-db --path='/home/nomesito/www'

Con sudo -u www-data diciamo a wp-cli di essere eseguito con i privilegi dell’utente owner della cartella dove è presente WordPress, in questo caso www-data, ma potete cambiare a seconda della vostra situazione specifica. Con wp core update-db –path=’/home/nomesito/www’ si dice invece di eseguire l’upgrade de database dandogli anche il percorso preciso dell’installazione di WordPress che vogliamo aggiornare. Se tutto è andato bene lo script verrà eseguito e non darà alcun feedback se non un puntino lampeggiante in console. Quando la procedura verrà completata (potrebbero volerci molti minuti a seconda della grandezza del database di WordPress da aggiornare) riceveremo un messaggio:

Success: WordPress database upgraded successfully from db version 36686 to 37965.

Questo messaggio ci conferma che l’upgrade del database è riuscito e siamo passati dalla versione 36686 alla 37965 (sempre per seguire l’esempio delle due versioni di cui abbiamo parlato in precedenza).

Fatto questo avremo aggiornato completamente WordPress e potremo accedere nuovamente al backend della nostra installazione di WordPress.

Per avere una panoramica dell’utilizzo di WP-CLI consiglio la lettura della documentazione sul sito ufficiale del progetto oppure leggere il tutorial Safe WordPress Install/Upgrade from Commandline using wp-cli.

C’è anche chi ha proposto uno script che non fa uso di wp-cli per aggiornare il database di WordPress ma non l’ho testato, però lo segnalo comunque: WordPress 4.2 Database Update Difficulties