I en tidigare artikel berättade vi historien om webbservern Apache, dess roll i internets uppkomst och hur dess marknadsandel äts upp av konkurrenter som Nginx. Apache är en del av LAMP-stackenLinux + Apache + MySQL + PHP — och det är inte en underdrift att säga att mer än hälften av hela internet är skyldig till sin existens till LAMP.

Idag ska vi ta en titt på några av skillnaderna mellan MariaDB och MySQL, två liknande men olika databastekniker som används för att driva miljontals webbplatser runt om i världen.

Vad är MySQL

MySQL är en relationsdatabas (RDBMS), som först såg dagens ljus år 1995, skapad av Michael Monty Widenius och David Axmark. Den skapades när marknaden dominerades av Microsoft och Oracles proprietära (och dyra) lösningar.

Gammal MySQL-sida från 1998
Gammal MySQL-sida från 1998 (bildkälla: Archive.org)

MySQL är numera ett arketypiskt varumärke. Dess roll var avgörande för att bygga internet som vi känner till det i dag. Denna artikel i Linux Journal lyser lite ljus på dess tidiga dagar.

Med sitt tidiga antagande av dubbellicensiering – och med hjälp av GNU GPL för dess gratis version – MySQL banade vägen för många andra programvaruleverantörer som kom senare.

Enligt Michael Widenius ord om dubbellicensiering:

… eftersom MySQL är en infrastrukturprodukt som är lätt att bädda in i andra produkter, kunde vi sälja licenser till dem som ville bädda in MySQL i sin produkt men inte ville göra sin produkt öppen källkod.

Server-distribuerade webbapplikationer, som en del av LAMP-stacken, brukar inte bädda in MySQL och distribuera deras kod. Detta innebar att alla fritt kunde använda programvaran för sina egna webbprodukter.

Mindre än ett decennium efter deras offentliga release dominerade MySQL marknaden för relationsdatabaser med öppen källkod.

Google Trends visar att det globala webbsökningsintresset i MySQL nådde sin topp mellan 2004 och 2005:

Intresset för MySQL över tid
Intresset för MySQL över tid

Några av de anmärkningsvärda företag som använder MySQL inkluderar:

  • Facebook, en rapport från 2011 nämner så mycket som ”60 miljoner förfrågningar per sekund, och nästan 4 miljoner radändringar per sekund” och MySQL hanterar ”i princip varje användarinteraktion: gillamarkeringar, delningar, statusuppdateringar, aviseringar, förfrågningar”.
  • Netflixs faktureringsdel av sin plattform
  • Youtube
  • Booking.com
  • Airbnb
  • och många andra.

Ytterligare en faktor som bidrog till ökningen och antagandet av MySQL som är värt att nämna är phpMyAdmin.

PhpMyAdmin är ett webbaserat databasadministrationsverktyg med en historia från så långt tillbaka som 1998, som ganska tidigt kom in i hanteringskonsolerna för delade webbhotell, inklusive cPanel. Det är ett verktyg skrivet i PHP som har gjort det lätt att administrera MySQL på LAMP-servrar. Importera, exportera, komponera komplexa förfrågningar, ta bort och skapa tabeller, genomföra komplexa sökningar är bara några av de saker phpMyAdmin möjliggjort utan att användarna någonsin behöver använda Linux terminal.

WordPress och MySQL

En av faktorerna bakom MySQLs popularitet är utan tvekan WordPress, som idag driver runt 60% av CMS-systemen eller 34% av hela webben.
WordPress skapades 2003 av Matt Mullenweg och Mike Little, som en fork av ett annat projekt. Det skrevs i PHP, det använde MySQL som sin databas, och när det dök spred sig användningen som en eld.

WordPress blev snabbt synonymt med begreppet öppen källkod och det gjorde också dess underliggande serverstack. DisplayWP har ett snyggt diagram över den minsta nödvändiga MySQL-versionen för varje WordPress-utgåva.

En av de faktorer som ökade antagandet av MySQL var GPL-aspekten av dess licensiering. Eftersom det är kompatibelt med Linux började det som standard inkluderas i Linux-distributioner. Idag ingår det som standard med Ubuntu.

Kort översikt över MySQL och Relationsdatabasmodellen

MySQL var tänkt som ett RDBMS (relationsdatabashanteringssystem). Relationsdatabasmodellen sträcker sig tillbaka till 1970-talet, vilket beskrivs av ”Codds Tolv Budord”. För att uttrycka det kortfattat strukturerar denna modell data i tabeller som består av kolumner och rader. Varje rad identifieras unikt med en nyckel (primärnyckel för att använda SQL-jargong).

Dessa primärnycklar kan användas som en sorts pinnar som används av andra tabeller för att definiera en relation till den specifika raden. Så kolumnen FOREIGN KEY i en relationsdatabastabell hänvisar till kolumnen PRIMARY KEY i en annan tabell, som definierar en relation mellan rader i olika tabeller.

Som Essential SQL förklarar, Primärnyckeln består av en eller flera kolumner vars innehållande data används för att unikt identifiera varje rad i tabellen”. Data i primärnyckelkolumner måste vara unika och kan inte vara tomma eller NULL. I en relationsdatabas ”har tabellen bara en primärnyckel, och definitionen är obligatorisk.”
Samtidigt är foreign key en uppsättning av en eller flera kolumner i en tabell som refererar till primärnyckeln i en annan tabell. Det finns inte någon särskild kod, konfiguration eller tabelldefinitioner som du behöver placera för att officiellt ”utse” en foreign key”.

Relationsdatabasmodell i MySQL
Relationsdatabasmodell i MySQL

På så sätt är det med relationsdatabaser möjligt att modellera data på sofistikerade sätt och definiera kopplingar mellan olika bitar av data. I vårt enkla exempel ovan har vi två tabeller, med rader som kan relateras till varandra, t.ex. varje person äger en bil.

Vi kan förfråga dessa data enligt logiken vi behöver, vi kan filtrera resultatuppsättningen enligt olika uppsättningar kriterier, och vi kan konstruera vår förfrågan på ett mycket mer komplicerat sätt än ovan.

Av denna anledning använder relationsdatabaser – och databaser i allmänt – domänspecifika språk bland vilka SQL, som står för Strukturerat förfrågningsspråk, är den mest utbredda om inte den enda som används av RDBMS.

Förvärv av Sun

Under 2008 förvärvades MySQL AB, företaget bakom MySQL, av Sun Microsystems. Detta företag skapade JAVA, Solaris Unix OS och var en betydande bidragsgivare till olika datortekniker. Som Business Wire rapporterade då:

””Sun Microsystems, Inc. (NASDAQ: JAVA) tillkännagav idag att det har ingått ett slutgiltigt avtal om att förvärva MySQL AB, en öppen källkods-ikon och utvecklare av en av världens snabbast växande öppen källkods-databaser för cirka 1 miljard dollar”

Det skulle snart visa sig att detta förvärv inte var tillräckligt för att förhindra Suns fall, men det målar en bild av hur stort MySQL var tillbaka på den tiden.

Oracle

Oracle Corporation är en leverantör av den största slutna källkods-databasen till denna dag, Oracle database.

Det var en direkt konkurrent till MySQL och praktiskt taget motsatsen till GPL och gratis öppen källkod-modellen som MySQL var på den tiden.

När Oracle köpte Sun och MySQL med det 2010 (de vann mot IBM) såg FOSS-världen det som så ”olycksbådande” som en Borgattack i Star Trek. En användare minns händelsen på Quora:

MySQL var ett allvarligt hot mot Oracle – Oracle-databasen stod vid det tillfället för något över 80% av alla intäkter (och med tanke på den skelettbesättning som behövdes för att underhålla det, ännu mer av vinsten).

MySQL gjorde store framsteg – stora Fortune 50-företag med webbplatslicenser som kostar miljoner ändrade databaser (särskilt skrivskyddade) från Oracle till MySQL eftersom den administrativa kostnaden var så mycket lägre. Jag vet, jag hjälpte till att göra några av dessa.

Många i MySQL-gemenskapen ville lägga till funktioner som skulle göra det onödigt att använda ens en gratis version av Oracle. MySQL var definitivt på väg ditåt. Verktygen mognade och Larry var rädd.

Så Oracle köpte MySQL för att se till att de skulle ha kontroll över varumärket, splittra gemenskapen och rädda sitt flaggskepp från de stora massorna.

Detta var en logisk slutsats, eftersom MySQL vid den tiden blev så populärt att det kunde ha betraktats som ett verkligt hot mot Oracles kärnverksamhet. Som Geekflares Ankush Thakur uttryckte det blev MySQL så populärt att utvecklare ganska snart glömde att SQL och MySQL var två olika saker.

Innan förvärvet ens hände, i slutet av 2009, publicerade Monty Widenius, som lämnade MySQL-laget det året för att etablera sin egen fork och databasföretag, en dramatisk uppmaning på sin blogg (vi kommer bara att citera början):

Hjälp oss rädda MySQL

Jag, Michael ”Monty” Widenius, skaparen av MySQL, ber dig snabbt att hjälpa till att rädda MySQL från Oracles klor. Utan din omedelbara hjälp kan Oracle äga MySQL vilken dag som helst nu. Genom att skriva till Europeiska kommissionen (EG) kan du stödja denna fråga och bidra till att säkra den framtida utvecklingen av produkten MySQL som ett öppet källkodsprojekt.

Förvärvet gick ändå igenom en månad senare, till många i öppen källkodsgemenskapen stora besvikelse. Widenius hade redan lämnat Sun, bildat Monty Program AB, och forkat från MySQL för att lägga grunden för MariaDB. Och samtidigt tog han många MySQL-utvecklare med sig.

Till denna dag ifrågasätter människor fortfarande Montys rädsla. Särskilt eftersom det värsta scenariot inte hände alls: Oracle köpte inte MySQL bara för att döda det.

Vissa hävdar att MySQL köptes av Oracle som inget annat än ett ”indirekt offer” för förvärvet av Sun. År 2009 hade de som hade ögonen på databasmarknaden skäl för oro.

Varningarna fanns där. Utvecklaren av MySQL:s huvudlagringsmotor, InnoDB, ett företag från Finland, förvärvades av Oracle 2005. Senare blev de helt sammanslagna med Oracle och lade ner det ursprungliga företaget. 2006 köpte Oracle ut skaparna av Berkeley DB, leverantör av en annan, mindre viktig BDB-lagringsmotor. De cirklade runt.

Vad är MariaDB

MariaDB fick sin första release oktober 2009, med version 5.1.38 Beta, baserad på MySQL 5.1.38. Det var en fork tänkt att ”säkerställa att MySQL-kodbasen skulle vara gratis fri för alltid”.

Vid forkningens tidpunkt var den vanligaste rädslan att förvärvet var ett fientligt övertagande med målet att döda MySQL. Denna oro visade sig åtminstone delvis vara ogrundad.

Igen 2009, inrättade Monty Program AB och Percona, ett företag som tillhandahåller premium MySQL-tjänster, Open Database Alliance. Deras mål var att ”förena all MySQL-relaterad utveckling och tjänster, och ge en lösning på fragmenteringen och osäkerheten mot gemenskaper, företag och tekniska experter som är involverade i MySQL”.

Tanken var att ”bli branschnavet för MySQL öppen källkods-databas, inklusive MySQL och derivatkod, binärer, utbildning, support och andra förbättringar för MySQL-gemenskapen och partner-ekosystem”.

När vi tar en titt tillbaka är det möjligt att dessa steg har förhindrat ett sämre scenario för den berömda databasen.

MariaDB vs MySQL: Kompatibilitet

Hela poängen med MariaDBs fork av MySQL (uppkallad efter Widenius dotter) var att säkra framtida tillgång till MySQL och dess vidareutveckling. Det är därför MariaDB var tänkt som en fullständig binär ersättning – en ”drop-in”-ersättning, så att säga – för att göra det möjligt för alla användare av MySQL att byta mot andra på sina system.

MySQL är ett klient-serverprogram, och både dess serverprogram mysqld, dess klient mysql, och hjälpprogram, som mysqldump, har samma namn med MariaDB.

Utbyte av MySQL mot MariaDB blir en sömlös process för de flesta applikationer och ändamål, särskilt WordPress. Befintlig programvara, från populära CMS-verktyg till appar som phpMyAdmin, fungerar direkt, och faktiska data kan exporteras/importeras från den ena till den andra utan några ändringar.

MariaDBs uttalade mål är att upprätthålla kompatibilitet med MySQL. Enligt MariaDBs webbplats,

  • data och tabelldefinitionsfiler är kompatibla.
  • alla klient-API:er och protokoll är kompatibla.
  • Filnamn, binärer och sökvägar är lika på MySQL och MariaDB.
  • Portar och uttag är lika.
  • Alla MySQL-kontakter – PHP, Perl, Python, Java och andra – fungerar med MariaDB.
  • MySQL-klientpaket fungerar lika väl med MariaDB som med MySQL.

Månatliga sammanslagningar genomförs för att säkerställa kompatibilitet och för att få nya funktioner och buggfixar från Oracle.

MariaDB vs MySQL: Skälen bakom forkningen

Det fanns flera orsaker bakom MariaDB-releasen. Rädslan för att Oracle helt enkelt skulle döda sin växande konkurrent för att skydda sin mer lukrativa huvudprodukt var säkert en av de största. Användare skulle ha förlorat en fantastisk och gratis produkt!

Andra skäl var relaterade till att se till att MySQL skulle ha fortsatt vara gratis och med och öppen källkod. Idag är MariaDB fullt GPL-licensierad med hela sin uppsättning funktioner, medan MySQL håller en dubbellicensstrategi, där premiumfunktioner licensieras under proprietär, betald licens:

”MySQL Enterprise Edition innehåller den mest omfattande uppsättningen avancerade funktioner, hanteringsverktyg och tekniskt stöd för att uppnå de högsta nivåerna av MySQL-skalbarhet, säkerhet, tillförlitlighet och drifttid. Det minskar risken, kostnaden och komplexiteten i att utveckla, distribuera och hantera affärskritiska MySQL-applikationer”.

Om vi jämför de två har MariaDB en klar fördel genom GPL-licensen som den släpps med. På grund av den proprietära kodbasen kan Oracle inte lagligt dra nytta av MariaDB-koden och slå samman den i sin databas.

Widenius lovade”När Oracle kommer att släppa ett slutet källkods-tillägg för MySQL, kommer vi också att släppa ett i öppen källkod.”

Gemenskapen spelar roll

En annan anledning bakom forken var att hålla projektet ”Öppet” i den meningen att det är ett gemenskapsdrivet projekt (som WordPress), vars riktning och utveckling är öppna precis som dess licens. Om vi tittar på commit loggen är det lätt att dra slutsatsen att den mesta av MySQL-koden kommer från interna utvecklare. Oracles utvecklare ger tack till tillfälliga och anmärkningsvärda bidrag från gemenskapen, till exempel, men det är långt ifrån MariaDBs öppenhet och långt ifrån vad MySQL brukade vara.

För att sätta saker i perspektiv, har MariaDB serverarkiv i skrivande stund mer än 186k commits, 370+ grenar, och 200 bidragsgivare. MySQL, å andra sidan, har mer än 148k commits, 9 grenar och 72 bidragsgivare.

Diskussionen om MariaDBs utveckling, dess riktning, omröstning om funktionerna etc. görs på en allmänt tillgänglig e-postlista:

Maria-utvecklarteamet
Maria-utvecklarteamet

Förutom den här, finns det en också e-postlista som kallas Maria Discuss.

Maria Captains är ett team av betrodda utvecklare till vilka utvecklare kan skicka in patchar. Som teamets sida på Launchpad säger:

”Kaptenerna är betrodda utvecklare med skrivåtkomst till de viktigaste MariaDB-träden. Om du vill ha en patch in i det trädet, skicka den till Maria-utvecklarlistan och en eller flera av kaptenerna kommer att arbeta med dig för att få patchen granskad, godkänd och slutligen införlivad i lämpligt MariaDB-träd.”

Det har förekommit några tillfällen där MariaDB livliga utvecklingsprocess visat sin fördel jämfört med Oracles slutna process.

I slutet av 2012 bildades MariaDB Foundation för att övervaka utvecklingen av databasen.

Strax efter forken hoppade många ursprungliga MySQL-utvecklare av och gick med i MariaDB-projektet. Linux-leverantörer som Red Hat, CentOS, Arch Linux, Debian, Opensuse, Slackware, Fedora bytte till MariaDB som standard RDBMS, liksom BSD-distributioner, FreeBSD och OpenBSD, medan Ubuntu innehåller MariaDB. Hela listan finns här.

Företag som Alibaba Cloud, Tencent, IBM, Microsoft, Booking.com blev platinasponsorer.

För Kinsta, som är bäst på applikationshosting, databashosting och hanterad WordPress-hosting, så är det intressant att nämna att bland MariaDB Foundation’s styrelse så finns det personer från Automattic. Detta är ett tydligt tecken på att skapare av WordPress har anammat MariaDB.

Under åren efter forken hade MariaDB en livlig utveckling, såpass mycket att MariaDB på grund av hela uppsättningen nya funktioner som introducerades 2012 hoppade från 5.* i versionsnummer, kompatibel med MySQL, till 10.0, för att återspegla det stora språng i utveckling av funktioner som hade skett.

På grund av prestandaskäl tillkännagav Wikimedia Foundation 2013 att de bytte Wikipedia till MariaDB. Samma sak hände med Google, och användarlistan innehåller nu Deutsche Bank, DBS Bank, Nasdaq, Verizon, Craigslist och andra.

Bland MySQL-användare, har vi GitHub, Amerikanske flottan, NASA, Tesla, Netflix, WeChat, Facebook, Zendesk, Twitter, Zappos, YouTube, Spotify.

Sedan den första utgåvan hade intresset för MySQL-efterträdaren stadigt ökat, som Google Search Trends visar:

Intresset för MariaDB över tid
Intresset för MariaDB över tid

MariaDB vs MySQL: Viktiga skillnader

Medan MariaDB kan ha börjat som helt kompatibel med MySQL, kan vi förvänta oss att deras vägar avviker mer från varandra i framtiden.

MariaDB vs MySQL
MariaDB vs MySQL

I sitt senaste blogginlägg gratulerar Widenius Oracle för deras arbete med version 8.0 av MySQL, och beskriver några skillnader och påpekanden som:

Trådpool: precis som problemet Nginx-servern löser jämfört med Apache, tilldelar MySQL trådar till varje klientanslutning, och detta, vilket kan jämföras med att starta upp ett helt program i en dator, var helt enkelt ineffektivt. MariaDB introducerade sin egen lösning på detta i version 5.5

Osynliga kolumner är MariaDB:s exklusiva funktion från 10.3.3. De returnerar inte resultat i ett SELECT * -uttryck, och de behöver inte heller tilldelas värde i ett INSERT-uttryck.

MariaDB introducerar mikrosekunder i sina temporala datatyper.

Lagringsmotorer: MariaDBs användningsområden inkluderar XtraDB, InnoDB, MariaDB ColumnStore, Aria, Archive, Blackhole, Cassandra Storage Engine, Connect, CSV, FederatedX, Memory storage engine, Merge, Mroonga, MyISAM, MyRocks, QQGraph, Sequence Storage Engine, SphinxSE, Spider, TokuDB. ColumnsStore är intressant för prestanda eftersom det möjliggör linjär skalning för att hantera petabyte data. Mer om det på deras blogg.

MySQLs lagringsmotorer är InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, Merge, Federated, Example.

Databasvisning är en funktion där MariaDB introducerar betydande optimeringar genom att endast begära de nödvändiga tabellerna.

Vissa funktioner MySQL införde är JSON inbyggda datatyp, MySQL Shell i MySQL version 8.0 — som tillåter JavaScript och python-skripting — och fungerar inte med MariaDB, SHA-256-baserad autentiseringsplugin, vilket förbättrar säkerheten över mysql_native_password.

Här hittar du den fullständiga listan över skillnader mellan MariaDB vs MySQL och fördelarna med den förra jämfört med den senare.

Sammanfattning

MySQL är under samma tak som den största kommersiella databasleverantören i världen. Med så många heltidsingenjörer som arbetar dygnet runt för att utveckla nya premiumfunktioner har vi redan några punkter där de avviker. MariaDB, å andra sidan, brukar komma ikapp när det gäller premiumtillägg, men det är inte alltid omedelbart och det finns inga garantier.

Med detta sagt finns det dock många scenarier där MariaDB erbjuder förbättrad prestanda. Lägg till deras mer smidiga patchar och uppdateringar, en stabilare öppen källkods-framtid och lite mer optimism och du kan se varför vi på Kinsta inte bara är fans utan också använder MariaDB som en del av vår prestandadrivna serverstack.

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.