sql >> Databasteknik >  >> RDS >> Mysql

MySQL kontra MariaDB

MySQL kontra MariaDB

The Back Story of MySQL och MariaDB

MySQL och MariaDB delar lite gemensam historia, båda är uppkallade efter utvecklaren Michael Widenius döttrar, My och Maria. MySQL skapades 1995 av ett svenskt mjukvaruföretag, MySQL AB . Det växte i popularitet under åren och blev standarden för hanteringssystemet för relationsdatabas med öppen källkod. 2008 köpte Sun MySQL AB (och i slutändan MySQL) för 1 miljard dollar. Inte långt efter att Sun köptes av Oracle i april 2009. Vid denna tidpunkt blev Oracle, ett konkurrerande databassystem, ägare till MySQL. Detta störde de ursprungliga utvecklarna att se hur de kände att framtiden för MySQL var i fara. Efter reglerna för öppen källkod bestämde de sig för att "gaffel" MySQL och skapa MariaDB. Och där har du det, MySQL och MariaDB delar en historia!

Vi har en bra handledning om hur man installerar MariaDB för att ersätta MySQL i WHM.

MySQL- och MariaDB-replikeringsversionering

Slav↓ Mästare→ MariaDB-5.5 MariaDB-10.0 MariaDB-10.1 MariaDB-10.2 MySQL-5.6 MySQL-5.7 MySQL-8.0
MariaDB-5.5 Ok Nej Nej Nej Nej Nej Nej
MariaDB-10.0 Ok Ok Ok
MariaDB-10.1 Ok Ok Ok Ok
MariaDB-10.2 Ok Ok Ok Ok Ok Ok

Funktionsjämförelse av MySQL och MariaDB

Fler lagringsmotorer

MariaDB innehåller standardlagringsmotorerna MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE och MERGE. Den innehåller också några av de mindre vanliga lagringsmotorerna som;

  • Cassandra (MariaDB 10.0)
  • Spider (MariaDB 10.0+)
  • SEKVENS (MariaDB 10.0+)
  • CONNECT (MariaDB 10.0+)
  • TokuDB (MariaDB 5.5+)
  • SphinxSE (MariaDB 5.2+)
  • OQGRAPH (ej tillgängligt i MariaDB 5.5)
  • FederatedX (Drop in ersättning för Federated)
  • Aria (MyISAM-ersättning med förbättrad cachning)
  • MyRocks (MariaDB 10.2-lagringsmotor med förbättrad komprimering)
  • ColumnStore (en kolumnorienterad lagringsmotor optimerad för datalagring)

Hastighetsförbättringar

MariaDB har många förbättrade förbättringar jämfört med MySQL när man jämför Optimizer-funktionen:

Funktion MariaDB 5.3/5.5 MariaDB 10.0 MySQL 5.5 MySQL 5.6
Optimeringar av diskåtkomst
Indexvillkor Pushdown (ICP) JA JA JA
Disksvep multi-range read (DS-MRR) JA JA JA
DS-MRR med nyckelordnad hämtning JA JA
Index_merge / Sort_intersection JA JA
Kostnadsbaserat val av intervall kontra index_merge JA JA
ORDER EFTER … LIMIT JA JA
Använd utökade (dolda) primärnycklar för innodb/xtradb JA (5.5) JA
Gå med i optimeringar
Batchad key access (BKA) JA JA JA
Blockera hash-anslutning JA JA
Användarinställda minnesgränser för alla kopplingsbuffertar JA JA
Tillämpa tidiga yttre tabell ON-villkor JA JA
Null-avvisande villkor testade tidigt för NULL JA JA
Subquery-optimeringar
In-to-exists JA JA JA JA
Semi-join JA JA JA
Materialisering JA JA JA
NULL-medveten materialisering JA JA
Kostnadsval för materialisering kontra existerande JA JA JA
Subquery cache JA JA
Snabb förklaring med underfrågor JA JA
FINNS-till-IN JA
Optimering för härledda tabeller/vyer
Försenad materialisering av härledda tabeller / materialiserade vyer JA JA JA
Omedelbar EXPLAIN för härledda tabeller JA JA JA
Härledd tabell med nycklaroptimering JA JA JA
Fält med sammanslagningsbara vyer och härledda tabeller som används i jämställdhetsoptimeringar JA JA
Exekveringskontroll
LIMIT ROWS EXAMINED rows_limit JA (5.5) JA
Optimeringskontroll (optimeringsväxel)
Systematisk kontroll av alla optimerarstrategier JA JA partiell
FÖRKLARA förbättringar
Förklara för DELETE, INSERT, REPLACE och UPDATE Delvis JA
FÖLLA I JSON-format JA
Mer detaljerad och konsekvent EXPLAIN för underfrågor JA JA
Optimeringsspårning
Optimeringsspårning JA

  • Parallell replikering — ny i 10.0; sker i tre delar:replikeringshändelser läses av IO-tråden och köas i reläloggen, hämtas individuellt av SQL-tråden från reläloggen, och varje händelse appliceras på slaven och replikerar ändringarna på mastern.
  • Prestandaförbättringar inkluderar ett bättre InnoDB asynkront IO-undersystem på Windows.
  • Index för MEMORY(HEAP)-motorn är snabbare. De senaste korrigeringarna tillämpades i MariaDB 5.5 och MySQL 5.7.
  • Segmenterad nyckelcache för MyISAM lades till i MariaDB 5.2. Detta har förbättrat prestanda i MyISAM-tabeller upp till 4x.
  • Från och med version 10.0.13 förbättrar den justerbara hashstorleken för MyISAM och Aria avstängningstiden om du använder många MyISAM/Aria-tabeller med fördröjda nycklar.
  • Med KONTROLLSUMMATABELL som använder alternativet SNABB förbättras hastigheten.
  • Prestandan förbättrades med teckenuppsättningsomvandlingar och borttagning av konverteringar (när de inte behövdes). Den totala hastighetsförbättringen är cirka 1-5 % men kan vara snabbare med stora resultatuppsättningar.
  • Pool of Threads i MariaDB 5.1/MariaDB 5.5 gör att MariaDB kan köras med 200 000+ anslutningar, vilket leder till hastighetsförbättring när man använder många anslutningar.
  • Förbättringar av klientanslutningar har lagts till från och med MariaDB 10.1 och MariaDB 10.2.
  • Vissa förbättringar av DBUG-koden inom MariaDB hjälper till att göra koden snabbare med felsökningen kompilerad i, men inte använd.
  • Att använda Aria-lagringsmotorn med interna temporära tabeller möjliggör förbättrad prestanda.
  • Testsviten körs snabbare även med den utökade testlistan.

Nya funktioner och tillägg

Bättre testning

MariaDB innehåller fler tester i testsviten än MySQL. Ogiltiga och onödiga tester har tagits bort. Problem med testsviten har åtgärdats.

Färre buggar

För närvarande är MariaDB-gemenskapen alert och arbetar för att fixa buggar så snabbt och så noggrant som möjligt. Dessutom har kompilatorvarningar också minskat som ett resultat av minskningen av buggar.

Öppen källkod

All källkod för MariaDB släpps under GPL, LGPL eller BSD. Medan MySQL har moduler med stängd källkod i sin Enterprise Edition, har MariaDB inga moduler med stängd källkod. MariaDB inkluderade alla funktioner med stängd källkod som finns i MySQL 5.5 Enterprise Edition i sin öppen källkodsversion. MariaDB inkluderar testfall för alla nya fixade buggar. MySQL tillhandahåller inte testfall för buggar fixade i MySQL 5.5. MariaDB gör alla framtida utvecklingsplaner offentliga, inklusive buggar och deras korrigeringar. MariaDB har en stor gemenskap och denna gemenskap av utvecklare inkluderar en mängd olika bidragsgivare, medan alla commits till MySQL verkar vara från Oracle-anställda. MySQL-klientbibliotek släpps under GPL-licensen som förbjuder länkning till applikationer med stängd källkod. Tvärtom, MariaDB licenserar klientbibliotek under LGPL-licensen som tillåter länkning till programvara med stängd källkod.

Kompatibilitetsproblem mellan MariaDB och MySQL

MariaDB designades för att vara en drop-in-ersättning för MySQL och var en gaffel av den ursprungliga MySQL-kodbasen. Detta innebär att när du byter från MySQL till MariaDB är det en relativt okomplicerad process. Du avinstallerar helt enkelt MySQL och installerar MariaDB. Eftersom det är en drop-in-ersättning behöver du inte konvertera några data. MariaDBs utvecklare utför en månatlig sammanslagning av MySQL-koden för att säkerställa att de förblir kompatibla. Det finns olika inkompatibiliteter mellan versioner av MySQL och MariaDB även om versioner är designade för att vara kompatibla med sina respektive versionsnummer (till exempel MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).

Inkompatibiliteter mellan MariaDB 10.0 och MariaDB 5.5 / MySQL 5.5

  • SET OPTION-syntax är utfasad i MariaDB 10.0 och MySQL 5.6. Använd bara SET.

Inkompatibiliteter mellan MariaDB 10.0 och MySQL 5.6

  • Alla MySQL-binärer (MySQLd, myisamchk etc.) ger en varning om man använder ett prefix för ett alternativ (som –big-table istället för –big-tables). MariaDB-binärfiler fungerar på samma sätt som de flesta andra Unix-kommandon och ger inga varningar när du använder unika prefix.
  • MariaDB GTID är inte kompatibel med MySQL 5.6. Detta betyder att man inte kan ha MySQL 5.6 som slav för MariaDB 10.0. MariaDB 10.0 kan dock vara en slav av MySQL 5.6 eller någon tidigare MySQL/MariaDB-version.
  • MariaDB 10.0 multi-source replikering stöds inte i MySQL 5.6.
  • MariaDB 10.0 dynamiska kolumner stöds inte av MySQL 5.6.
  • För att få CREATE TABLE … SELECT att fungera på samma sätt i satsbaserad och radbaserad replikering, körs det som standard som CREATE OR REPLACE TABLE på slaven. En fördel med detta är att om slaven dör mitt i CREATE ... SELECT kommer den att kunna fortsätta.
  • Man kan använda variabeln slave-ddl-exec-mode för att specificera hur CREATE TABLE och DROP TABLE replikeras.
  • Se även en detaljerad uppdelning av skillnader i systemvariabler mellan MariaDB 10.0 och MySQL 5.6.
  • MySQL 5.6 har prestandaschema aktiverat som standard. Av prestandaskäl har MariaDB 10.0 den inaktiverad som standard. Du kan aktivera det genom att starta MySQLd med alternativet –performance-schema.
  • MariaDB 10.0 stöder inte MySQL Memcached-plugin.
  • Användare som skapats med MySQL:s SHA256-lösenordsalgoritm kan inte användas i MariaDB 10.0.
  • MariaDB 10.0 stöder inte fördröjd replikering – MDEV-7145.

Inkompatibiliteter mellan MariaDB 10.1 och MySQL 5.7

  • MariaDB 10.1 stöder inte MySQL 5.7:s JSON.
  • MariaDB 10.1:s InnoDB-kryptering implementeras annorlunda än MySQL 5.7:s InnoDB-kryptering.
  • MariaDB 10.1 stöder inte ngram och MeCab fulltext parser plugin - MDEV-10267, MDEV-10268.
  • MariaDB 10.1 stöder inte flera utlösare för en tabell – MDEV-6112.
  • MariaDB 10.1 stöder inte CREATE TABLESPACE för InnoDB.

Inkompatibiliteter mellan MariaDB 10.2 och MySQL 5.7

  • Skillnader i systemvariabler mellan MariaDB 10.2 och MySQL 5.7.
  • Funktionsskillnader mellan MariaDB 10.2 och MySQL 5.7.
  • Flera utlösare per tabell lades till i 10.2
  • MariaDB InnoDB-kryptering implementeras annorlunda än MySQL 5.7:s InnoDB-kryptering.
  • MariaDB lagrar JSON som sann text, inte i binärt format som MySQL. Anledningen är att våra JSON-funktioner är mycket snabbare än MySQL:s så vi behövde inte se något behov av att lagra saker i binärt format eftersom det tillför mycket komplexitet när man manipulerar JSON-objekt.
  • MariaDB 10.2 stöder inte ngram och MeCab fulltext parser plugins – MDEV-10267, MDEV-10268.
  • MariaDB 10.2 stöder inte MySQL X-plugin.
  • MariaDB 10.2 stöder inte MySQL allmänna tabellutrymmen.
  • Se även Inkompatibiliteter mellan MariaDB 10.1 och MySQL 5.7.

  1. SET kontra SELECT vid tilldelning av variabler?

  2. Hur man ändrar sekvensnumret för ett databaspostkonto inom en profil i SQL Server (T-SQL)

  3. Hur man konverterar en sträng till ett datum/tid i SQL Server med CAST()

  4. Postgresql:Skriptkörning av psql med lösenord