Cum se schimbă în MySQL de la InnoDB la MyISAM

Cu câteva zile în urmă m-am decis să dezactivez engine-ul InnoDB pe câteva din VPS-urile de la NOVIT, pe are aveam extrem de puțin trafic pe 2 site-uri și un blog, încât nu se justifica utilizarea memoriei (InnoDB consumă vreo 10 MB în plus, spor de performanță inexistent în cazul meu).

Drept urmare, am editat /etc/mysql/my.cnf și am decomentat optiunea skip-innodb, am repornit MySQL și m-am apucat să testez toate aplicațiile care folosesc baze de date. Totul bine și frumos, mai puțin RoundCube (îl folosesc pentru webmail), care a ținut să mă înjure:

SERVICE CURRENTLY NOT AVAILABLE!
Error No. [0x01F4]

Am pus repede la loc InnoDB, a început să meargă RoundCube, și uitându-mă prin tabelele pe care și le-a făcut, s-a confirmat că engine-ul folosit era InnoDB. În mod normal, schimbarea engine-ului ar trebui să fie un alter table simplu, dar la mine s-a lăsat cu următoare oroare:

mysql> use roundcubemail;
mysql> alter table users engine = MyISAM;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

Nici phpmyadmin nu s-a descurcat mai bine, iar alter table nu știe (sau nu știu eu?) să modifice mai multe tabele simultan. Soluția pe care o căutam pentru a modifica simultan toate tabelele care folosesc InnoDB s-a dovedit a fi backup, edit și restore. Mai exact, întâi am dump-at baza de date:

# mysqldump -u root -p roundcubemail > /tmp/dump

Următorul pas a fost să editez fișierul rezultat (/tmp/dump) și să înlocuiesc InnoDB cu MyISAM peste tot. În continuare, am șters baza de date existentă (aveam un backup, deci mi-am permis). Alternativ, phpmyadmin știe să facă rename.

mysql> drop database roundcubemail;

Apoi am creat o nouă bază de date cu vechiul nume și am restaurat datele din dump-ul pe care l-am editat mai sus:

mysql> create database roundcubemail;
# mysql roundcubemail -u root -p < /tmp/dump

Ultimul pas a fost să repun opțiunea skip-innodb în /etc/mysql/my.cnf (urmat de restart la MySQL) și RoundCube a mers perfect cu tabele MyISAM în loc de InnoDB.

TwitterFacebookLinkedInGoogle ReaderYahoo MessengerEmailGoogle GmailYahoo MailPrintShare

No related posts.

Leave a Reply

Your email address will not be published. Required fields are marked *

*


six + 9 =

CommentLuv badge