Jan Reilink

Het MyISAM-tabel opslagformaat in MariaDB-databases (MySQL) wordt sinds november 2019 niet meer door Vevida ondersteund. Heb jij (oude) databasetabellen gemaakt in het MyISAM formaat, dan hebben wij deze al automatisch voor je omgezet naar het betere formaat InnoDB. Probeer je een nieuwe MyISAM-tabel aan te maken, dan zorgen wij ervoor dat dit een InnoDB-tabel wordt. Lees verder als je graag wilt weten waarvoor dit is.

Let op: deze post bevat pseudo-code, wees voorzichtig met het direct overnemen en gebruiken hiervan.

Einde gebruik MyISAM tabellen in MariaDB-databases (MySQL)

MyISAM is een table storage engine in MariaDB-databaseserversoftware (MySQL). Een storage engine is – in lekentaal – het opslagformaat en bepaalt in welke structuur data in een tabel wordt opgeslagen. Zo is ook InnoDB een opslagformaat. En InnoDB is een nieuwer tabel opslagformaat.

Nieuwer is beter en we leggen je graag uit waarom.

Waarom is dit belangrijk voor mij?

Het MyISAM opslagformaat is dusdanig verouderd, dat het niet meer doorontwikkeld wordt door MariaDB. Alle vernieuwingen en prestatieverbeteringen zijn voor het InnoDB-formaat. Alleen al hierom wil je graag InnoDB gebruiken, toch? Maar er is een tweede reden:

Een tabel van het type MyISAM kan niet gebruikt worden in high-availability (hoge beschikbaarheid) en high-performance (hoge prestaties) databasecluster. Ook is een cluster schaalbaar en dat garandeert deze hoge beschikbaarheid prestaties van jouw database. Dus als je database nog MyISAM tabellen gebruikt, dan profiteer je niet van de voordelen van een cluster.

Nog een reden kan zijn dat het gebruiken van nieuwere technologieën, zoals een opslagformaat, belangrijk is voor het optimaliseren van MySQL databases.

Moet ik zelf iets doen?

Nee, in principe hoef je niets te doen. Wij zorgen ervoor dat bestaande tabellen omgezet zijn van MyISAM naar InnoDB, en dat nieuwe tabellen automatisch als InnoDB worden opgeslagen. We vinden het echter wél belangrijk om extra informatie en uitleg te geven over hoe je dit zelf direct goed kunt doen.

Hoe herken ik MyISAM-tabellen?

De eerste stap is het herkennen van deze tabellen. In heel veel oude code-voorbeelden die je op internet vindt zie je vaak in een CREATE TABLE staan: ENGINE = MyISAM. Deze opdracht vertelt MariaDB om een MyISAM tabel aan te maken. Het InnoDB equivalent is simpelweg: ENGINE = InnoDB.

Ook kan MariaDB (MySQL) je heel eenvoudig vertellen van welk opslagformaat je bestaande tabellen zijn. De interfaces phpMyAdmin, MySQL Workbench en Navicat geven dit automatisch weer, en op de MariaDB command-line kun je een query gebruiken. Je leest meer over deze programma’s in ons FAQ-artikel MySQL-database beheren.

phpMyAdmin

MySQL Workbench

Op de MariaDB command-line gebruik je de volgende query:

select table_name, engine 
	from information_schema.tables
	where table_schema = "examplenl2";

Let op: vervang ‘examplenl2’ door de naam van jouw eigen database!

En de uitvoer lijkt dan op:

MariaDB [examplenl2]> select table_name, engine from information_schema.tables where table_schema = "examplenl2";
+----------------------+--------+
| table_name           | engine |
+----------------------+--------+
| gastenboek_blacklist | MyISAM |
| gastenboek           | MyISAM |
+----------------------+--------+
2 rows in set (0.000 sec)

Je ziet hier dat er 2 tabellen aanwezig zijn in de database en beide zijn van het engine-type MyISAM.

Hoe zet ik MyISAM tabellen om?

Dit hebben wij al voor je gedaan. Wil je toch zelf hiermee bezig, dan kun je het ALTER TABLE statement gebruiken om de table engine te veranderen:

ALTER TABLE `gastenboek` ENGINE=InnoDB;
ALTER TABLE `gastenboek_blacklist` ENGINE=InnoDB;

Als je hierna dezelfde query uitvoert om de engine weer te geven, dan is het resultaat als volgt:

MariaDB [examplenl2]> select table_name,engine from information_schema.tables where table_schema = "examplenl2";
+----------------------+--------+
| table_name           | engine |
+----------------------+--------+
| gastenboek_blacklist | InnoDB |
| gastenboek           | InnoDB |
+----------------------+--------+
2 rows in set (0.002 sec)

Je vindt deze informatie ook terug in ons grotere FAQ-artikel “Hoe optimaliseer je een MySQL database?“: MyISAM-tabellen omzetten naar InnoDB.

Jan Reilink Systeembeheerder

Jan Reilink is ruim 10 jaar in dienst bij Vevida als systeembeheerder. Zijn specialiteiten zijn Windows Server, IIS, PHP, websites, optimalisatie en beveiliging. Daarnaast houdt Jan al jaren een technisch blog saotn.org bij met nieuws en artikelen over deze onderwerpen.