MySQL versus MariaDB
Baghistorien om MySQL og MariaDB
MySQL og MariaDB deler en fælles historie, begge er opkaldt efter udvikler Michael Widenius' døtre, My og Maria. MySQL blev skabt i 1995 af et svensk softwarefirma, MySQL AB . Det voksede i popularitet i årenes løb og blev standarden for open source relationsdatabasestyringssystemet. I 2008 købte Sun MySQL AB (og i sidste ende MySQL) for 1 mia. Ikke længe efter, at Sun blev købt af Oracle i april 2009. På dette tidspunkt blev Oracle, et konkurrerende databasesystem, ejere af MySQL. Dette generede de oprindelige udviklere ved at se, hvordan de følte, at MySQL's fremtid var i fare. Efter reglerne for open source besluttede de at "fork" MySQL og oprette MariaDB. Og der har du det, MySQL og MariaDB deler en historie!
Vi har en god tutorial om, hvordan man installerer MariaDB for at erstatte MySQL i WHM.
MySQL- og MariaDB-replikeringsversionering
Slave↓ Master→ | 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 |
Funktionssammenligning af MySQL og MariaDB
Flere lagermotorer
MariaDB indeholder standardlagringsmotorerne MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE og MERGE. Det inkluderer også nogle af de mindre almindelige lagermotorer såsom;
- Cassandra (MariaDB 10.0)
- Edderkop (MariaDB 10.0+)
- SEKVENS (MariaDB 10.0+)
- CONNECT (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (Ikke tilgængelig i MariaDB 5.5)
- FederatedX (Drop in erstatning for Federated)
- Aria (MyISAM-erstatning med forbedret caching)
- MyRocks (MariaDB 10.2-lagringsmotor med forbedret komprimering)
- ColumnStore (en kolonneorienteret lagermaskine optimeret til data warehousing)
Hastighedsforbedringer
MariaDB har mange forbedrede forbedringer i forhold til MySQL, når man sammenligner Optimizer-funktionen:
Funktion | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Optimeringer af diskadgang | ||||
Index Condition Pushdown (ICP) | JA | JA | – | JA |
Disk-sweep multi-range read (DS-MRR) | JA | JA | – | JA |
DS-MRR med nøgleordret hentning | JA | JA | – | – |
Index_merge / Sort_intersection | JA | JA | – | – |
Omkostningsbaseret valg af interval kontra index_merge | JA | JA | – | – |
BEstil efter … LIMIT | – | JA | – | JA |
Brug udvidede (skjulte) primærnøgler til innodb/xtradb | JA (5.5) | JA | – | – |
Deltag optimeringer | ||||
Batched nøgleadgang (BKA) | JA | JA | – | JA |
Bloker hash-tilmelding | JA | JA | – | – |
Brugerindstillede hukommelsesgrænser på alle joinbuffere | JA | JA | – | – |
Anvend tidlige ydre tabel ON-betingelser | JA | JA | – | – |
Null-afvisende tilstande testet tidligt for NULL'er | JA | JA | – | – |
Underforespørgselsoptimeringer | ||||
In-to-exists | JA | JA | JA | JA |
Semi-join | JA | JA | – | JA |
Materialisering | JA | JA | – | JA |
NULL-bevidst materialisering | JA | JA | – | – |
Omkostningsvalg af materialisering vs. in-to-exists | JA | JA | – | JA |
Underforespørgselscache | JA | JA | – | – |
Hurtig forklaring med underforespørgsler | JA | JA | – | – |
EKSISTERER-til-IN | – | JA | – | – |
Optimering til afledte tabeller/visninger | ||||
Forsinket materialisering af afledte tabeller / materialiserede visninger | JA | JA | – | JA |
Øjeblikkelig EXPLAIN for afledte tabeller | JA | JA | – | JA |
Afledt tabel med nøgleoptimering | JA | JA | – | JA |
Felter med visninger, der kan sammenflettes, og afledte tabeller, der bruges i ligestillingsoptimeringer | JA | JA | – | – |
Udførelseskontrol | ||||
LIMIT RÆKKER UNDERSØGET rows_limit | JA (5.5) | JA | – | – |
Optimeringskontrol (optimeringskontakt) | ||||
Systematisk kontrol af alle optimeringsstrategier | JA | JA | – | delvis |
FORKLÆR forbedringer | ||||
Forklar for DELETE, INSERT, REPLACE og UPDATE | – | Delvis | – | JA |
EXPLAIN i JSON-format | – | – | – | JA |
Mere detaljeret og konsekvent FORKLARING til underforespørgsler | JA | JA | – | – |
Optimeringssporing | ||||
Optimeringssporing | – | – | – | JA |
- Parallel replikering — ny i 10.0; foregår i tre dele:replikeringshændelser læses af IO-tråden og sættes i kø i relæloggen, hentes individuelt af SQL-tråden fra relæloggen, og hver hændelse anvendes på slaven og replikerer ændringerne på masteren.
- Ydeevneforbedringer omfatter et bedre InnoDB asynkront IO-undersystem på Windows.
- Indekser for MEMORY(HEAP)-motoren er hurtigere. De seneste rettelser blev anvendt i MariaDB 5.5 og MySQL 5.7.
- Segmenteret nøglecache til MyISAM blev tilføjet i MariaDB 5.2. Dette har forbedret ydeevnen i MyISAM-tabeller op til 4x.
- Fra og med version 10.0.13 forbedrer den justerbare hashstørrelse for MyISAM og Aria nedlukningstiden, hvis du bruger mange MyISAM/Aria-tabeller med forsinkede nøgler.
- Med KONTROLSUMTABELLEN ved at bruge indstillingen HURTIG forbedres hastigheden.
- Ydeevnen blev forbedret med konverteringer af tegnsæt og fjernelse af konverteringer (når de ikke var nødvendige). Samlet hastighedsforbedringer er omkring 1-5 %, men kan være hurtigere med store resultatsæt.
- Pool of Threads i MariaDB 5.1/MariaDB 5.5 tillader MariaDB at køre med 200.000+ forbindelser, hvilket fører til hastighedsforbedring, når der bruges mange forbindelser.
- Forbedringer af klientforbindelse tilføjet fra MariaDB 10.1 og MariaDB 10.2.
- Nogle forbedringer af DBUG-koden i MariaDB hjælper med at få koden til at køre hurtigere med fejlretningen kompileret i, men ikke brugt.
- Brug af Aria-lagermotoren ved hjælp af interne midlertidige tabeller giver mulighed for forbedret ydeevne.
- Testpakken kører hurtigere selv med den udvidede testliste.
Nye funktioner og udvidelser
Bedre test
MariaDB indeholder flere test i testpakken end MySQL. Ugyldige og eventuelle unødvendige test er blevet fjernet. Problemer med testpakken er blevet rettet.
Færre fejl
I øjeblikket er MariaDB-fællesskabet opmærksomt og arbejder på at rette fejl så hurtigt og så grundigt som muligt. Derudover er compiler-advarsler også blevet reduceret som følge af reduktionen af fejl.
Open Source
Al kildekoden til MariaDB udgives under GPL, LGPL eller BSD. Mens MySQL har lukkede kildemoduler i deres Enterprise Edition, har MariaDB ingen lukkede kildemoduler. MariaDB inkluderede alle de lukkede kildefunktioner indeholdt i MySQL 5.5 Enterprise Edition i deres open source-version. MariaDB inkluderer testcases for alle nye rettede fejl. MySQL leverer ikke testcases for fejl rettet i MySQL 5.5. MariaDB offentliggør alle fremtidige udviklingsplaner, inklusive fejl og deres rettelser. MariaDB har et stort fællesskab, og det fællesskab af udviklere inkluderer en bred vifte af bidragydere, mens alle forpligtelser til MySQL ser ud til at være fra Oracle-ansatte. MySQL-klientbiblioteker frigives under GPL-licensen, som forbyder links til lukkede kildeprogrammer. Tværtimod licenserer MariaDB klientbiblioteker under LGPL-licensen, der tillader linkning til lukket kildesoftware.
Kompatibilitetsproblemer mellem MariaDB og MySQL
MariaDB blev designet til at være en drop-in-erstatning for MySQL og var en forgrening af den originale MySQL-kodebase. Det betyder, at når du skifter fra MySQL til MariaDB, er det en forholdsvis ligetil proces. Du skal blot afinstallere MySQL og installere MariaDB. Da det er en drop-in erstatning, er der ingen grund til at konvertere nogen data. MariaDBs udviklere udfører en månedlig fletning af MySQL-koden for at sikre, at de forbliver kompatible. Der er forskellige inkompatibiliteter mellem versioner af MySQL og MariaDB, selvom versioner er designet til at være kompatible med deres respektive versionsnumre (for eksempel MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).
Inkompatibilitet mellem MariaDB 10.0 og MariaDB 5.5 / MySQL 5.5
- SET OPTION-syntaks er forældet i MariaDB 10.0 og MySQL 5.6. Brug kun SET.
Inkompatibilitet mellem MariaDB 10.0 og MySQL 5.6
- Alle MySQL-binære filer (MySQLd, myisamchk osv.) giver en advarsel, hvis man bruger et præfiks for en mulighed (såsom –big-table i stedet for –big-tables). MariaDB-binære filer fungerer på samme måde som de fleste andre Unix-kommandoer og giver ikke advarsler, når du bruger unikke præfikser.
- MariaDB GTID er ikke kompatibel med MySQL 5.6. Det betyder, at man ikke kan have MySQL 5.6 som slave for MariaDB 10.0. MariaDB 10.0 kan dog være en slave af MySQL 5.6 eller en hvilken som helst tidligere MySQL/MariaDB-version.
- MariaDB 10.0 multi-source replikering er ikke understøttet i MySQL 5.6.
- MariaDB 10.0 dynamiske kolonner understøttes ikke af MySQL 5.6.
- For at få CREATE TABLE … SELECT til at fungere på samme måde i sætningsbaseret og rækkebaseret replikering, udføres det som standard som CREATE OR REPLACE TABLE på slaven. En fordel ved dette er, at hvis slaven dør midt i CREATE … SELECT vil den kunne fortsætte.
- Man kan bruge slave-ddl-exec-mode-variablen til at specificere, hvordan CREATE TABLE og DROP TABLE replikeres.
- Se også en detaljeret oversigt over systemvariable forskelle mellem MariaDB 10.0 og MySQL 5.6.
- MySQL 5.6 har ydeevneskema aktiveret som standard. Af præstationsmæssige årsager har MariaDB 10.0 det deaktiveret som standard. Du kan aktivere det ved at starte MySQLd med muligheden –performance-schema.
- MariaDB 10.0 understøtter ikke MySQL Memcached plugin.
- Brugere oprettet med MySQL's SHA256-adgangskodealgoritme kan ikke bruges i MariaDB 10.0.
- MariaDB 10.0 understøtter ikke forsinket replikering – MDEV-7145.
Inkompatibilitet mellem MariaDB 10.1 og MySQL 5.7
- MariaDB 10.1 understøtter ikke MySQL 5.7's JSON.
- MariaDB 10.1's InnoDB-kryptering er implementeret anderledes end MySQL 5.7's InnoDB-kryptering.
- MariaDB 10.1 understøtter ikke ngram og MeCab fuldtekstparser-plugins – MDEV-10267, MDEV-10268.
- MariaDB 10.1 understøtter ikke flere triggere for en tabel – MDEV-6112.
- MariaDB 10.1 understøtter ikke CREATE TABLESPACE til InnoDB.
Inkompatibilitet mellem MariaDB 10.2 og MySQL 5.7
- Systemvariable forskelle mellem MariaDB 10.2 og MySQL 5.7.
- Funktionsforskelle mellem MariaDB 10.2 og MySQL 5.7.
- Flere udløsere pr. tabel blev tilføjet i 10.2
- MariaDB InnoDB-kryptering er implementeret anderledes end MySQL 5.7's InnoDB-kryptering.
- MariaDB gemmer JSON som ægte tekst, ikke i binært format som MySQL. Årsagen er, at vores JSON-funktioner er meget hurtigere end MySQL's, så vi behøvede ikke at se et behov for at gemme ting i binært format, da det tilføjer en masse kompleksitet, når man manipulerer JSON-objekter.
- MariaDB 10.2 understøtter ikke ngram og MeCab fuldtekstparser-plugins – MDEV-10267, MDEV-10268.
- MariaDB 10.2 understøtter ikke MySQL X-plugin.
- MariaDB 10.2 understøtter ikke MySQL generelle tablespaces.
- Se også Inkompatibiliteter mellem MariaDB 10.1 og MySQL 5.7.