mysql, conversione a InnoDB

La premessa doverosa è che, trattandosi di mysql, in generale, non funzionarà[1]. Ma può essere un punto di partenza, poi sta ai solutori più che abili, risolvere i problemini che Mysql potrebbe[2] presentare.

In generale, la conversione di un db da MyISAM a InnoDB non è altro che una serie di alter table <nome della tabella> engine=InnoDB;.

E’ altrettanto vero che di solito, è scomodo digitare ogni singola alter a mano.

Da qui si procede quindi con due metodi: manipolazione del dump, o scripting ad hoc.

La manipolazione del dump è triviale (create un dump, usate il vostro editor preferito per sostituire engine=MyISAM con engine=InnoDB, droppate il db e ricaricate), quindi ci concentriamo sul secondo metodo.

– generare una sequenza di alter a partire dall’sql:

echo "select concat('ALTER TABLE `',TABLE_NAME,'` ENGINE=InnoDB;') FROM Information_schema.TABLES WHERE ENGINE != 'InnoDB' AND TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA='<nome del database>'" | mysql  | tail -n +2 > convert.sql

Ovviamente dovete sostituire <nome del database> con il nome vero e proprio.

Attenzione ai nomi che sono effettivamente maiuscoli (sic), il tail -n +2 è solo un trick per eliminare la prima riga che non è sql. Se dovete dare utente e pass e/o db il posto giù è dopo “mysql”.

A questo punto, non dovete fare altro che eseguire il vostro sql appena creato da “dentro” il db con un \. convert.sql oppure con il comando

mysql <nome del database> < convert.sql

[1]

Essenzialmente perchè mysql è un bocchino. Si, ho scritto bocchino.

[2]

A me ha trovato una tabella che NON C’ERA, ha tentato di convertirmi una vista con risultati NON. Insomma, il solito mysql.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.