MariaDB: Fra MyISAM til InnoDB

MyISAM har vært «default storage engine» i databaser og tabeller opprettet hos oss, frem til vi i går endret til InnoDB – og det var på tide, fordi gamle MyISAM i 2019 ikke lenger er det beste valget.

MyISAM er over 22 år gammel, og allerede i oktober 2016 annonserte Percona at de kun kom til å tilby begrenset støtte for MyISAM, se Percona blog: MySQL 8.0: The end of MyISAM – i tillegg ble InnoDB default storage engine i MariaDB fra versjon 10.2.x, se MariaDB.com: Choosing the Right Storage Engine – det er MariaDB 10.2.x som benyttes hos oss.

MyISAM vil fortsette å fungere helt fint hos oss, men en eller annen gang i fremtiden, vil nok støtten for MyISAM fjernes eller begrenses i MariaDB og MySQL – så på sikt, kan det være en lurt å tenke på å endre tabellene i dine databaser til å bruke InnoDB.

Når vi nå har endret default storage engine fra MyISAM til InnoDB, så har det ingen betydning for dine eksisterende databaser og tabeller, men alle nye databaser og tabeller du oppretter, vil nå være med InnoDB. Les mer om InnoDB i Wikipedia.

MyISAM er fortsatt tilgjengelig for nye databaser og tabeller dersom dine PHP-skript spesifikt oppgir MyISAM som «engine» når det opprettes nye tabeller, men i de fleste tilfeller spesifiserer ikke PHP-skript dette, og da vil det være InnoDB som blir brukt.

Jeg kan kort nevne at vi også spent følger med på MariaDB sin utvikling av Aria (les mer om Aria i Wikipedia), som er ment som en moderne etterfølger til MyISAM – men det ser ut til å bli minst et par år frem i tid, før Aria vil kunne bli en fullgod erstatning for MyISAM og InnoDB – frem til den tid måtte komme, er det nå InnoDB som er førstevalget hos oss.

Endre til InnoDB og få raskere nettsider

InnoDB er en bedre, mer moderne og ikke minst en raskere lagringsmotor for databaser, og vi anbefaler derfor at så mange som mulig endrer tabellene i sine databaser til å benytte InnoDB. Ta gjerne kontakt dersom du ønsker vi skal endre dine databaser til InnoDB for deg, så gjør vi det gratis. Her er en trinnvis fremgangsmåte du kan bruke dersom du ønsker å gjøre det selv:

Logg på phpMyAdmin (du kan bruke samme brukernavn/passord som til DirectAdmin) og klikk i venstre kolonne på navnet til databasen du vil endre. Klikk deretter i horisontal meny på «SQL» og lim inn denne koden (du må endre DITT_DATABASENAVN med navnet på databasen det gjelder):

SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.', table_name, ' ENGINE=InnoDB;') AS sql_statements
FROM information_schema.tables
WHERE TABLE_SCHEMA NOT IN ('information_schema', 'performance_schema')
AND `ENGINE` = 'MyISAM'
AND `TABLE_TYPE` = 'BASE TABLE'
AND table_schema = 'DITT_DATABASENAVN'
ORDER BY TABLE_SCHEMA, table_name DESC;

Klikk på «Gjør»-knappen.

Du får da opp en liste med linjer som begynner med ordene «ALTER TABLE…», rett over denne listen klikk på «Innstillinger», huk av for «Hele tekster», klikk på knappen «Gjør» (dette er nødvendig for at ikke «ALTER TABLE…»-linjene blir forkortet og dermed ville ha manglet nødvendig tekst. Merk også at dersom du hadde flere tabeller enn 25, så vises ikke alle, du må da huke av for «Vis alle» nederst under «ALTER TABLE…»-linjene).

Marker og kopier alle linjene som starter med teksten «ALTER TABLE…» (dersom du måtte klikke på «Vis alle» og dersom du har mer enn 100 tabeller, så får du en linje som heter «sql_statements» mellom hver 100 linjer, og da må du slette alle linjene som heter «sql_statements» før du limer dem inn på nytt som beskrevet nedenfor).

Klikk i venstre kolonne på navnet til databasen det gjelder, klikk så på «SQL» i horisontal meny og lim inn hele blokka med «ALTER TABLE…»-linjene som du kopierte tidligere. Klikk så på «Gjør»-knappen.

Klikk til slutt på databasenavnet ditt helt øverst over den horisontale menyen, slik at du kommer til «forsiden» til databasen, og du vil nå se at under kolonnen «Type», listes det nå kun opp «InnoDB» nedover. Gratulerer, databasen din kjører nå kun med InnoDB!

For de av dere som har installert InfiniteWP, vil databasen til InfiniteWP i de fleste tilfeller bestå av endel InnoDB-tabeller og noen ganger også noen få MyISAM-tabeller. På grunn av en uspesifisert bug noen kunder har opplevd i InfiniteWP, som ble løst ved å endre et fåtall tabeller tilbake til MyISAM, vil jeg fraråde å endre eventuelle MyISAM-tabeller som måtte finnes i databaser til InfiniteWP.

Oppdatering 15. januar kl 11:50: SQL-koden ovenfor ble forbedret/endret.