mysqldump: errore quando eseguito da server con MySQL inferiore a 5.6

Supponiamo di avere due server, che chiamiamo serverA e serverB, dove serverA ha una versione MySQL inferiore alla 5.6 e serverB ha la 5.6 o superiore. Se serverA effettua un dump dei dati tramite mysqldump sul serverB, otterrete questo errore:

mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)

Vediamo a cosa è dovuto e come risolvere il problema.

Vi potrebbe capitare questa situazione quando avete un server di un cliente (serverB) dal quale volete copiare i dati per elaborarli sul vostro server (serverA), oppure se volete fare la copia di backup di un database da un server all’altro.

Ovviamente l’IP di serverA deve essere autorizzato nell’utente su serverB che effettua la copia dei dati e tutte le autorizzazioni devono essere a posto, altrimenti gli errori che otterrete saranno di altro genere.

Dalla versione 5.6 di MySQL, è stata rimossa la sintassi SET OPTION, che il comando mysqldump utilizzava nelle versioni 5.5 o inferiori prima di fare la copia dei dati di un database. Quindi la situazione è la seguente: su serverA è presente uno script mysqldump vecchio che invia i comandi al serverB e tra i comandi che invia c’è anche SET OPTION, tuttavia il MySQL che gira su serverB non accetta tale comando e restituisce un errore.

Nota: vorrei sottolineare che ciò non significa che tra MySQL 5.6 e le versioni inferiori non c’è compatibilità, significa semplicemente che questa modalità di lavoro “ibrida” non funziona. Infatti, se facessimo una copia dei dati sul serverB utilizzando il suo comando mysqldump e facessimo il ripristino di questo database sul serverA in cui gira una versione inferiore di MySQL, tutto funzionerebbe regolarmente.

Quali sono allora le soluzioni a questo problema?

La più semplice, se funziona, è quella di utilizzare il comando aggiungendo l’opzione:
mysqldump --force

Se ciò non funzionasse, i problemi aumentano. Una prima soluzione, anch’essa “resistente” agli aggiornamenti dei server come quella vista in precedenza, potrebbe essere quella di creare uno script che copia manualmente le varie tabelle, con istruzioni SQL apposite. Un lavoro che potrebbe rivelarsi lungo.

Una seconda soluzione, più rapida della precedente, è quella di creare una versione modificata il comando mysqldump: ciò presuppone che voi abbiate accesso root al server e che vi ricordiate, quando migrerete ad un nuovo server, di portare con voi questo file modificato. Come si modifica il comando mysqldump? Vi conviene cercare istruzioni aggiornate in rete, comunque in sostanza bisogna:

  1. Fare una copia del mysqldump (di solito in /usr/bin su sistemi linux) e posizionarla in una directory estranea al file system
  2. Intervenire sul codice con un editor esadecimale, andando a cercare la parte “SET OPTION SQL_QUOTE_SHOW_CREATE” e sostituire OPTION con spazi (0x20 in esadecimale)
  3. Utilizzare la versione modificata di mysqldump

È tutto!

Lascia un commento