In het vorige artikel vertelden we het verhaal van de Apache-webserver, haar rol in de opkomst van het internet, en hoe het marktaandeel werd opgeslokt door concurrenten zoals Nginx. Apache is onderdeel van de LAMP stack Linux + Apache + MySQL + PHP – en we overdrijven niet als we zeggen dat de helft van het internet haar bestaan dankt aan LAMP.

Vandaag kijken we naar enkele verschillen tussen MariaDB en MySQL, twee soortgelijke maar toch verschillende database-technologieën die worden gebruikt om wereldwijd miljoenen websites te laten werken.

Wat is MySQL

MySQL is een relationele database (RDBMS) die in 1995 ontwikkeld is door Michael Monty Widenius en David Axmark. Het werd ontwikkeld toen de markt nog gedomineerd werd door de gepatenteerde (en dure) oplossingen van Microsoft en Oracle.

MariaDB vs MySQL: MySQL-old-page
Oude MySQL-pagina uit 1998 (bron: Archive.org)

MySQL is tegenwoordig een merk met naam en geschiedenis. De rol van MySQL was van vitaal belang bij de totstandkoming van het internet zoals we dat vandaag de dag kennen. Dit artikel in het Linux Journal geeft meer inzicht over de eerste dagen van MySQL.

Met het vroege gebruik van dual licensing — en het gebruik van GNU GPL voor de gratis versie — heeft MySQL de weg vrij gemaakt voor veel software-verkopers die later kwamen.

Met de woorden van Michael Widenius over duale licenties:

…aangezien MySQL een infrastructuurproduct is dat makkelijk is te integreren in andere producten, zouden we licenties kunnen verkopen aan mensen die MySQL willen integreren in hun product maar hun product niet open-source willen maken.

Webapplicaties die geïmplementeerd worden vanaf de server, als onderdeel van de LAMP-stack, bevatten zelden MySQL en verspreiden ook zelden hun code. Dit betekende dat iedereen gratis hun software kon gebruiken voor hun eigen webproducten.

Minder dan een decennium na hun openbare release domineerde MySQL al de markt van open-source relationele databases.

Google Trends laat zien dat de wereldwijde interesse voor zoekopdrachten voor MySQL piekte tussen 2004-2005:

Interesse in MySQL gedurende de jaren
Interesse in MySQL gedurende de jaren
  • Facebook, een rapport uit 2011 meldt zelfs“60 miljoen queries per seconde, en bijna 4 miljoen rij-mutaties per seconde” en MySQL behandelde “nagenoeg elke interactie met de gebruiker, zoals likes, shares, status updates, alerts, aanvragen.”
  • Het facturatie-deel van het platform van Netflix
  • Youtube
  • Booking.com
  • Airbnb
  • en vele anderen

Nog een noemenswaardige factor die bijdroeg aan de opkomst en het succes van MySQL is phpMyAdmin.

PhpMyAdmin is een webgebaseerde database-administratietool begonnen in 1998, die al vroeg zijn weg vond naar de managementdashboards van providers van gedeelde hosting, inclusief cPanel. Het is een tool die geschreven is in PHP waardoor het makkelijk is om MySQL te beheren binnen LAMP-servers. Het importeren, exporteren, schrijven van complexe query’s, verwijderen en creëren van tabellen en het uitvoeren van gecompliceerde zoekopdrachten zijn slechts enkele van de zaken die phpMyAdmin mogelijk maakt zonder dat gebruikers ooit een Linux-terminal hoeven te gebruiken.

WordPress en MySQL

Eén van de factoren achter de populariteit van MySQL is zeker ook WordPress, dat tegenwoordig 60% van de CMS-systemen laat draaien, oftewel 34% van het volledige internet.
WordPress is gestart in 2003 door Matt Mullenweg en Mike Little, als een afsplitsing van een ander project. Het was geschreven in PHP, gebruikte MySQL als database, en zodra het verscheen begon eigenlijk iedereen het te gebruiken.

WordPress werd al snel synoniem met het concept van open-source software en de onderliggende server stack surfte daarop mee. DisplayWP heeft een mooie grafiek van de minimale versie van MySQL voor elke WordPress release.

Eén van de factoren waardoor MySQL nog sneller werd ‘geadopteerd’ is de GPL-kant van hun licenties. Aangezien het compatibel is met Linux, werd het al snel standaard meegeleverd met Linux-distributies. Vandaag de dag wordt het standaard meegeleverd met Ubuntu.

Kort overzicht van MySQL en het Relational Database Model

MySQL is ontworpen als een RDBMS (Relational Database Management System). Het model van een Relational Database komt uit de jaren zeventig, zoals beschreven in “Codd’s twaalf wetten”. Kort gezegd organiseert dit model data door middel van tabellen, die bestaan uit kolommen en rijen. Elke rij is uniek identificeerbaar door een sleutel (zgh. Primary Key om in SQL-jargon te blijven).

Deze ‘Primary Keys’ kunnen gebruikt worden als een soort haakje die andere tabellen kunnen gebruiken om een relatie te definiëren tot die specifieke rij. Op deze manier verwijst een ‘FOREIGN KEY’ kolom in een tabel van een relationele database naar de ‘PRIMARY KEY’ kolom in een andere tabel, waardoor een relatie wordt gedefinieerd tussen bepaalde rijen in verschillende tabellen.

Zoals Essential SQL het uitlegt: De primary key bestaat uit één of meerdere kolommen waarvan de data wordt gebruikt om elke rij in de tabel uniek te identificeren.” Data in de primary key-kolommen moet uniek zijn, en kan dus niet missen of NULL zijn. In een relationele database “heeft de tabel slechts één primary key, en het definiëren ervan is vereist.”
Tegelijkertijd is de foreign key een set van één of meer kolommen in een tabel die verwijzen naar de primary key in een andere tabel. Je hoeft geen speciale code, configuraties of tabeldefinities te gebruiken om een foreign key aan te wijzen.

Relationele database model in MySQL
Relationele database model in MySQL

Door het gebruik van zulke relationele databases is het mogelijk de data te modelleren op een geavanceerde manier, waardoor er verbindingen gelegd kunnen worden tussen verschillende stukjes data. In ons simpele voorbeeld hierboven hebben we twee tabellen, met rijen die aan elkaar gelinkt kunnen worden, bijvoorbeeld dat elke persoon een auto bezit.

We kunnen vervolgens een opdracht op deze data loslaten conform onze logica en de resultaten filteren op basis van verschillende criteria. We kunnen ook onze zoekopdracht nog veel complexer maken dan hierboven.

Daarom gebruiken relationele databases – en databases in het algemeen – domeinspecifieke talen, waarvan SQL (Structured Query Language) de meest voorkomende, zo niet de enige is die wordt gebruikt door RDBMS.

Acquisitie door Sun

In 2008 werd MySQL AB, het bedrijf achter MySQL, aangekocht door Sun Microsystems. Sun Microsystems heeft Java en Solaris Unix OS gemaakt en heeft een belangrijke bijdrage geleverd aan verschillende computertechnologieën. Zoals Business Wire destijds schreef:

“Sun Microsystems, Inc. (NASDAQ:JAVA) heeft vandaag bekend gemaakt dat het een definitieve overeenkomst heeft afgesloten om MySQL AB aan te schaffen, een open-source-icoon en ontwikkelaar van een van de snelst groeiende open-source-databases, voor een totaalbedrag van ongeveer 1 miljard dollar.”

Snel hierna zal blijken dat deze aankoop niet genoeg was om Sun te behouden voor de ondergang, maar het laat wel zien hoe groot MySQL destijds al was.

Oracle

Oracle Corporation is een verkoper van de grootste closed-source-database tot op heden, de Oracle database.

Het was een directe concurrent van MySQL en in feite de tegenhanger van het GPL, gratis, open-source-software model dat MySQL destijds aan het worden was.

Toen in 2010 Sun overgenomen werd door Oracle, en daarmee dus MySQL (waarmee ze IBM versloegen met bieden), zag de FOSS-wereld dat als iets dat net zo “duister” was als een aanval van Borgs in Star Trek. Zoals een gebruiker het zich herinnert op Quora:

MySQL was een ernstige bedreiging voor Oracle – destijds was de Oracle-database verantwoordelijk voor meer dan 80% van de alle inkomsten (en in beschouwing nemend hoe weinig mensen nodig waren om het te onderhouden, was het een goudmijn).
MySQL was serieus aan een opmars bezig – grote Fortune 500 bedrijven met website-licenties ter waarde van miljoenen waren aan het verhuizen van databases (met name alleen-lezen databases) van Oracle naar MySQL omdat de administratieve overheadkosten zoveel lager waren. Ik kan het weten, want ik heb bij een aantal hiervan geholpen.
Velen binnen de MySQL-community wilden features toevoegen die zelfs een gratis versie van Oracle achterhaald zouden maken. MySQL ging zeker die kant op. Tools werden steeds verder ontwikkeld en Larry begon bang te worden.
Dus kocht Oracle MySQL om er zeker van te zijn dat ze controle over het merk zouden hebben, de community uit elkaar zouden kunnen drijven, en op die manier hun vlaggenschip zouden kunnen redden van het ongewassen volk.
Dit was een logische conclusie, omdat MySQL destijds zo populair aan het worden was dat het gezien werd als een directe bedreiging voor Oracle’s kernactiviteiten. Zoals Ankush Thakur van Geekflare het zegt, werd MySQL al snel zo populair dat ontwikkelaars vergaten dat SQL en MySQL twee verschillende dingen waren.

Eind 2009, zelfs nog voordat de acquisitie gedaan werd, publiceerde Monty Widenius, die het MySQL-team dat jaar verlaten had om zijn eigen afsplitsing te vestigen met een database-bedrijf, een dramatisch beroep op zijn blog (we citeren hier alleen het begin):

Help MySQL te redden

Ik, Michael “Monty” Widenius, bedenker van MySQL, vraag jou met klem om MySQL te redden uit de klauwen van Oracle. Zonder jouw onmiddellijke hulp zal Oracle een dezer dagen in het bezit komen van MySQL. Door de Europese Commissie (EC) te schrijven kun je de zaak helpen, en verdere ontwikkeling van het product MySQ als een Open Source-project veilig stellen.

Desalniettemin ging de acquisitie een maand later alsnog door, velen binnen de open-source-community in verslagenheid achterlatend. Widenius, die Sun inmiddels al verlaten had, vormde Monty Program AB, en splitste af van MySQL, waarmee de fundering werd gelegd voor MariaDB. Hij nam daarbij vele MySQL-ontwikkelaars met zich mee.

Tot op de dag van vandaag vragen mensen zich af of de angst van Monty gerechtvaardigd was. Vooral aangezien het ergste scenario helemaal niet uitkwam: Oracle kocht MySQL niet alleen maar om het kapot te maken.

Sommigen beweren dat MySQL alleen maar werd gekocht door Oracle als een “bijkomend slachtoffer” bij de acquisitie van Sun. Destijds in 2009 hadden mensen die de database-markt in de gaten hielden echter genoeg reden om zich zorgen te maken.

De waarschuwingen waren er zeker. De ontwikkelaar van de voornaamste storage engine van MySQL, InnoDB uit Finland, werd door Oracle overgenomen in 2005. Later werden ze volledig samengevoegd met Oracle, waarmee het originele bedrijf ten einde kwam. In 2006 kocht Oracle de makers van Berkeley DB af, de leverancier van een andere, minder belangrijke BDB storage engine. Ze cirkelden dus al rond.

Wat is MariaDB

MariaDB had de eerste release in oktober 2009, met versie 5.1.38 Beta, gebaseerd op MySQL 5.1.38. Het was een afsplitsing bedoeld om “er zeker van te zijn dat de MySQL-basiscode voor altijd gratis zou zijn”.

Ten tijde van de afsplitsing was de voornaamste angst dat de acquisitie een vijandige overname was met de bedoeling om MySQL om zeep te helpen. Die zorgen bleken, tenminste gedeeltelijk, onterecht.

Terug in 2009 vestigden Monty Program AB en Percona, een bedrijf dat premium MySQL-diensten leverde, samen de Open Database Alliance. Hun doel was “om alle MySQL-gerelateerde ontwikkeling en diensten te verenigen, het bieden van een oplossing voor alle fragmentering en onzekerheid waar de community’s, bedrijven en technisch experts die zich met MySQL bezighouden mee te maken hebben.”

Het idee was “om de hub voor de hele sector te worden voor de MySQL open-source-database, inclusief MySQL en afgeleide code, binary’s, training, ondersteuning en andere uitbreidingen voor de MySQL-community en het ecosysteem van partners.”

Terugkijkend is het mogelijk dat deze stappen een slechter scenario voor de bekende database hebben voorkomen.

MariaDB versus MySQL: Compatibiliteit

Het hele punt van de MariaDB-afsplitsing van MySQL (vernoemd naar de dochter van Widenius) was om de toegang tot MySQL en verdere ontwikkeling veilig te stellen voor de toekomst. Dit is waarom MariaDB werd bedacht als een ‘full binary replacement’ – een directe vervanger, als het ware – waardoor alle gebruikers van MySQL moeiteloos van de ene naar de andere konden wisselen op al hun systemen.

MySQL is een client-server-toepassing, en zowel het server-programma mysqld, de client mysql als hulpprogramma’s zoals mysqldump behouden dezelfde naam bij MariaDB.

MySQL vervangen door MariaDB wordt zo een naadloos proces voor de meeste toepassingen en doelen, met name bij WordPress. Reeds bestaande software, van populaire CMS-tools tot apps zoals phpMyAdmin, werken direct, en de data kan worden geïmporteerd of geëxporteerd van de ene naar de ander zonder aanpassingen.

De vastgestelde doelstelling van MariaDB is om compatibel te blijven met MySQL. Volgens de website van MariaDB,

  • zijn data- en tabeldefinities compatibel.
  • Zijn alle client-API’s en protocollen compatibel.
  • Zijn alle bestandsnamen, binary’s en bestandspaden hetzelfde op MySQL en MariaDB.
  • Zijn poorten en sockets hetzelfde.
  • Werken alle MySQL-connectoren – PHP, Perl, Python, Java, en anderen – ook met MariaDB.
  • Is het MySQL-clientpakket volledig uitwisselbaar tussen MariaDB en MySQL.

Maandelijkse fusies worden gedaan om compatibiliteit te kunnen blijven garanderen en om alle nieuwe features en bugreparaties van Oracle te krijgen.

MariaDB versus MySQL: De redenen voor de splitsing

Er waren verschillende redenen voor de release van MariaDB. De angst dat Oracle simpelweg hun groeiende concurrent om zeep zou helpen om hun eigen veel lucratievere product te beschermen was zeker één van de belangrijkste. Gebruikers zouden een geweldig en gratis product verloren zien gaan!

Andere redenen waren meer gericht om er zeker van te zijn dat MySQL gratis en open source zou blijven. Vandaag de dag heeft MariaDB een volledig GPL-licentieverlening met de hele set features, terwijl MySQL de dubbele licentieverlening behoudt, met premium features gelicentieerd onder gepatenteerde, betaalde licenties:

” MySQL Enterprise Edition bevat de meest uitgebreide set geavanceerde features, managementtools, en technische ondersteuning om de hoogste niveaus van schaalbaarheid, betrouwbaarheid, veiligheid en uptime van MySQL te behalen. Het beperkt het risico, de kosten en complexiteit in het ontwikkelen, ontplooien en managen van bedrijfskritieke MySQL-toepassing.”

Als we de twee zo vergelijken, heeft MariaDB een duidelijk voordeel vanwege de GPL-licentie waar het op gebaseerd is. Vanwege de gepatenteerde code kan Oracle juridisch gezien niet gebruik maken van de MariaDB-code en deze toevoegen aan hun database.

Widenius beloofde“Wanneer Oracle een closed-source uitbreiding voor MySQL publiceert, publiceren wij ook een open-source versie.”

Community doet ertoe

Een andere reden achter de afsplitsing was ervoor te zorgen dat het project “open” bleef in de zin van dat het een community-gedreven project bleef (net als WordPress), waarvan de richting en de ontwikkeling open zijn, net als de licentie. Als we kijken naar het logboek van commits, kunnen we concluderen dat de meeste MySQL-code van in-house ontwikkelaars komt. De ontwikkelaars van Oracle laten af en toe hun dank blijken voor belangrijke bijdragen van de community, maar dat staat in schril contrast met de openheid van MariaDB en met hoe MySQL ooit was.

Om één en ander in perspectief te plaatsen, ten tijde dat we dit schrijven heeft de server repository van MariaDB meer dan 186.000 commits, meer dan 370 aftakkingen, en meer dan 200 inzenders. MySQL, daarentegen, heeft meer dan 148.000 commits, 9 aftakkingen, en 72 inzenders.

De discussie over de ontwikkeling van MariaDB, de richting, stemmingen over features en dergelijke wordt gedaan via een publiek beschikbare e-maillijst:

Het team van "Maria-ontwikkelaars"
Het team van “Maria-ontwikkelaars”

Naast deze is er ook nog een Maria Discuss e-maillijst.

De Maria Captains zijn een team van betrouwbare ontwikkelaars naar wie andere ontwikkelaars patches kunnen sturen. Zoals de pagina van het team op Launchpad schrijft:

“De captains zijn betrouwbare ontwikkelaars met schrijf-toegang tot de belangrijkste MariaDB-stammen. Als je een patch in de ‘tree’ wilt hebben, stuur het dan op naar de maria-developers-lijst en één of meerdere captains zullen met je samenwerken om de patch te laten reviewen, goedkeuren en uiteindelijk toe te voegen aan de relevante MariaDB-tree.”

Er zijn al meerdere gevallen geweest waarbij het levendige ontwikkelingsproces van MariaDB liet zien een voordeel te betekenen ten opzichte van het gesloten proces van Oracle.

Aan het einde van 2012 werd de MariaDB-stichting opgericht om toezicht te houden op de ontwikkeling van de database.

Al snel na de afsplitsing verlieten veel van de originele MySQL-ontwikkelaars het schip en sloten zich aan bij het MariaDB-project. Linux-verkopers zoals Red Hat, CentOS, Arch Linux, Debian, OpenSuse, Slackware en Fedora schakelden om naar MariaDB als hun standaard RDBMS, net als BSD-distributies, FreeBSD en OpenBSD, en ook Ubuntu bevat MariaDB. De hele lijst is hier te vinden.

Bedrijven zoals Alibaba Cloud, Tencent, IBM, Microsoft en Booking.com werden platina sponsoren.

Wat betreft Kinsta, als beste applicatie, database en managed WordPress host, is het interessant om te noemen dat er mensen van Automattic in het bestuur van de MariaDB-stichting zitten, een duidelijk signaal dat de makers van WordPress MariaDB omarmen.

In de jaren na de splitsing had MariaDB een levendige ontwikkeling, zelfs in zoverre dat vanwege de hele set met nieuwe features die in 2012 geïntroduceerd werd, MariaDB van de 5.* versie, compatibel met MySQL, naar 10.0 sprong, om de enorme sprong in features te laten zien.

Vanwege redenen omtrent de prestaties kondigde ook de Wikimedia Stichting in 2013 aan dat het Wikipedia ging omzetten naar MariaDB. Hetzelfde gebeurde met Google, en de lijst met gebruikers bevat nu ook Deutsche Bank, DBS Bank, Nasdaq, Verizon, Craigslist, en vele anderen.

Onder de MySQL-gebruikers hebben we GitHub, de marine van de VS, NASA, Tesla, Netflix, WeChat, Facebook, Zendesk, Twitter, Zappos, Youtube en Spotify.

Sinds de eerste release bleef de interesse in de opvolger van MySQL gestaag groeien, zoals Google Search Trends laat zien:

Interesse in MariaDB gedurende de jaren
Interesse in MariaDB gedurende de jaren

MariaDB versus MySQL: De belangrijkste verschillen

Alhoewel MariaDB altijd volledig compatibel was met MySQL, kunnen we wel verwachten dat er meer verschillen zullen gaan komen in de toekomst.

MariaDB vs MySQL
MariaDB vs MySQL

In zijn nieuwste artikel feliciteert Widenius Oracle met hun werk aan versie 8.0 van MySQL, terwijl hij enkele verschillen en beperkingen beschrijft, zoals:

Thread Pool: net als het probleem dat de Nginx-server oplost ten opzichte van een Apache-server wijst MySQL threads toe aan elke client-verbinding wat simpelweg erg inefficiënt is: vergelijk het met een heel programma opstarten in een pc. MariaDB introduceerde hun eigen oplossing hiervoor al in versie 5.5.

Onzichtbare Kolommen zijn een exclusieve feature van MariaDB in versie 10.3.3. Ze geven geen resultaten in een SELECT * opdracht, en ze hoeven geen waarde toegewezen te krijgen in een INSERT opdracht.

MariaDB introduceert microseconden in hun tijdsdatatypen.

Storage Engines: Toepassingen van MariaDB zijn onder meer XtraDB, InnoDB, MariaDB ColumnsStore, Aria, Archive, Blackhole, Cassandra Storage Engine, Connect, CSV, FederatedX, Memory storage engine, Merge, Mroonga, MyISAM, MyRocks, QQGraph, Sequence Storage Engine, SphinxSE, Spider, TokuDB ColumnsStore is vooral interessant als het gaat om prestaties, omdat het lineair schalen mogelijk maakt, waardoor je petabytes aan data kunt gebruiken. Lees hier meer over op hun blog.

MySQL storage engines zijn InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, Merge, Federated, Example .

Database Views is een feature waarmee MariaDB belangrijke verbetering introduceert door alleen de relevante tabellen te bevragen.

Features van MySQL zijn onder meer JSON native datatype,MySQL Shell in MySQL 8.0 – waardoor je Python en Javascript scripts kunt gebruiken – en niet met MariaDB werkt, SHA-256-gebaseerde verificatie-plugin, waarmee de beveiliging verbetert ten opzichte van mysql_native_password.

Hier kun je een volledige lijst vinden met de verschillen tussen MariaDB en MySQL en de voordelen van de eerste ten opzichte van de tweede.

Samenvatting

MySQL valt onder de zakelijke paraplu van de grootste commerciële database-verkoper in de wereld. Met zoveel fulltime engineers die de hele dag werken om nieuwe premium features te ontwikkelen, hebben we al een aantal punten waarop ze verschillen. MariaDB daarentegen, haalt ze meestal wel weer in als het gaat om premium toevoegingen, maar dat is niet altijd direct en er zijn geen garanties.

Dat gezegd hebbende, er zijn heel veel scenario’s waarin MariaDB betere prestaties biedt. Daarbovenop komen nog de meer flexibele patches en updates, een stabielere open-source toekomst en wat meer optimisme, en je snapt waarom we hier bij Kinsta niet alleen fan zijn, maar ook MariaDB gebruiken als onderdeel van onze prestatie-gedreven server stack.

Tonino Jankov

Tonino is an entrepreneur, Linux & OSS enthusiast, developer, and tech educator. He has over ten years of experience in development and has been in the blockchain space for 3+ years. When he's not coding, he writes for SitePoint and Alibaba Cloud, binge-watches the newest works of fiction on Netflix, and explores new travel destinations.