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.