MySQL versus MariaDB
Het achtergrondverhaal van MySQL en MariaDB
MySQL en MariaDB delen een gemeenschappelijke geschiedenis, beide zijn vernoemd naar de dochters van ontwikkelaar Michael Widenius, My en Maria. MySQL is in 1995 gemaakt door een Zweeds softwarebedrijf, MySQL AB . Het groeide in de loop der jaren in populariteit en werd de standaard voor het open-source relationele databasebeheersysteem. In 2008 kocht Sun MySQL AB (en uiteindelijk MySQL) voor $ 1 miljard. Niet lang nadat Sun in april 2009 door Oracle werd gekocht. Op dat moment werd Oracle, een concurrerend databasesysteem, de eigenaren van MySQL. Dit stoorde de oorspronkelijke ontwikkelaars die zagen hoe zij dachten dat de toekomst van MySQL in gevaar was. Volgens de regels van open source besloten ze MySQL te "forken" en MariaDB te creëren. En daar heb je het, MySQL en MariaDB delen een geschiedenis!
We hebben een geweldige tutorial over het installeren van MariaDB om MySQL in WHM te vervangen.
MySQL- en MariaDB-replicatieversies
Slaaf↓ Meester→ | 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 | Nee | Nee | Nee | Nee | Nee | Nee |
MariaDB-10.0 | Ok | Ok | Ok | ||||
MariaDB-10.1 | Ok | Ok | Ok | Ok | |||
MariaDB-10.2 | Ok | Ok | Ok | Ok | Ok | Ok |
Functievergelijking van MySQL en MariaDB
Meer opslagengines
MariaDB bevat de standaard opslagengines MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE en MERGE. Het bevat ook enkele van de minder gebruikelijke opslag-engines zoals;
- Cassandra (MariaDB 10.0)
- Spin (MariaDB 10.0+)
- SEQUENTIE (MariaDB 10.0+)
- VERBINDEN (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (niet beschikbaar in MariaDB 5.5)
- FederatedX (vervanging voor Federated)
- Aria (MyISAM-vervanging met verbeterde caching)
- MyRocks (MariaDB 10.2 opslagengine met verbeterde compressie)
- ColumnStore (een kolomgeoriënteerde opslagengine die is geoptimaliseerd voor datawarehousing)
Snelheidsverbeteringen
MariaDB heeft veel verbeterde verbeteringen ten opzichte van MySQL bij het vergelijken van de Optimizer-functie:
Functie | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Optimalisaties voor schijftoegang | ||||
Index Condition Pushdown (ICP) | JA | JA | – | JA |
Disk-sweep Multi-range lezen (DS-MRR) | JA | JA | – | JA |
DS-MRR met ophalen van sleutels | JA | JA | – | – |
Index_merge / Sort_intersection | JA | JA | – | – |
Op kosten gebaseerde keuze van bereik vs. index_merge | JA | JA | – | – |
BESTEL OP … LIMIET | – | JA | – | JA |
Gebruik uitgebreide (verborgen) primaire sleutels voor innodb/xtradb | JA (5.5) | JA | – | – |
Deelnemen aan optimalisaties | ||||
Batched key access (BKA) | JA | JA | – | JA |
Hash-join blokkeren | JA | JA | – | – |
Door de gebruiker ingestelde geheugenlimieten voor alle join-buffers | JA | JA | – | – |
Vroege buitenste tabel AAN-voorwaarden toepassen | JA | JA | – | – |
Null-afwijzende condities vroeg getest op NULL's | JA | JA | – | – |
Subquery-optimalisaties | ||||
Bestaat nog | JA | JA | JA | JA |
Semi-join | JA | JA | – | JA |
Materialisering | JA | JA | – | JA |
NULL-bewuste materialisatie | JA | JA | – | – |
Kosten keuze van materialisatie vs. in-to-exists | JA | JA | – | JA |
Subquerycache | JA | JA | – | – |
Snel uitleggen met subquery's | JA | JA | – | – |
EXISTS-to-IN | – | JA | – | – |
Optimalisatie voor afgeleide tabellen/weergaven | ||||
Vertraagde realisatie van afgeleide tabellen / gerealiseerde weergaven | JA | JA | – | JA |
Direct UITLEG voor afgeleide tabellen | JA | JA | – | JA |
Afgeleide tabel met sleuteloptimalisatie | JA | JA | – | JA |
Velden van samenvoegbare weergaven en afgeleide tabellen die worden gebruikt in gelijkheidsoptimalisaties | JA | JA | – | – |
Uitvoeringscontrole | ||||
LIMIET RIJEN ONDERZOCHT rows_limit | JA (5.5) | JA | – | – |
Optimizer-besturing (optimizer-schakelaar) | ||||
Systematische controle van alle optimalisatiestrategieën | JA | JA | – | gedeeltelijk |
LEEG verbeteringen uit | ||||
Uitleggen voor DELETE, INSERT, REPLACE en UPDATE | – | Gedeeltelijk | – | JA |
UITLEG in JSON-indeling | – | – | – | JA |
Gedetailleerd en consistent UITLEG voor subquery's | JA | JA | – | – |
Optimizer-tracering | ||||
Optimizer-tracering | – | – | – | JA |
- Parallelle replicatie — nieuw in 10.0; vindt plaats in drie delen:replicatiegebeurtenissen worden gelezen door de IO-thread en in de wachtrij geplaatst in het relaislogboek, afzonderlijk opgehaald door de SQL-thread uit het relaislogboek, en elke gebeurtenis wordt toegepast op de slave en repliceert de wijzigingen op de master.
- Prestatieverbeteringen omvatten een beter InnoDB asynchrone IO-subsysteem op Windows.
- Indexen voor de MEMORY(HEAP)-engine zijn sneller. De nieuwste oplossingen zijn toegepast in MariaDB 5.5 en MySQL 5.7.
- Gesegmenteerde sleutelcache voor MyISAM is toegevoegd in MariaDB 5.2. Dit heeft de prestaties in MyISAM-tabellen tot 4x verbeterd.
- Vanaf versie 10.0.13 verbetert de instelbare hashgrootte voor MyISAM en Aria de afsluittijd als je veel MyISAM/Aria-tabellen met vertraagde sleutels gebruikt.
- Met de CHECKSUM TABEL wordt de snelheid verbeterd door de SNELLE optie te gebruiken.
- De prestaties zijn verbeterd met de tekensetconversies en het verwijderen van conversies (wanneer ze niet nodig waren). De algehele snelheidsverbetering is ongeveer 1-5%, maar kan sneller zijn met grote resultatensets.
- Pool van threads in MariaDB 5.1/MariaDB 5.5 stelt MariaDB in staat om met 200.000+ verbindingen te werken, wat leidt tot snelheidsverbetering bij het gebruik van veel verbindingen.
- Verbeteringen in clientverbinding toegevoegd vanaf MariaDB 10.1 en MariaDB 10.2.
- Sommige verbeteringen aan de DBUG-code binnen MariaDB zorgen ervoor dat de code sneller wordt uitgevoerd als de foutopsporing is gecompileerd, maar niet wordt gebruikt.
- Het gebruik van de Aria-opslagengine met interne tijdelijke tabellen zorgt voor betere prestaties.
- De testsuite werkt sneller, zelfs met de uitgebreide testlijst.
Nieuwe functies en uitbreidingen
Beter testen
MariaDB bevat meer tests in de testsuite dan MySQL. Ongeldige en onnodige tests zijn verwijderd. Problemen met de testsuite zijn opgelost.
Minder bugs
Momenteel is de MariaDB-gemeenschap alert en werkt ze om bugs zo snel en grondig mogelijk op te lossen. Bovendien zijn de waarschuwingen van de compiler ook verminderd als gevolg van de vermindering van bugs.
Open source
Alle broncode voor MariaDB wordt vrijgegeven onder GPL, LGPL of BSD. Hoewel MySQL closed source-modules heeft in hun Enterprise Edition, heeft MariaDB geen closed source-modules. MariaDB heeft alle closed source-functies van MySQL 5.5 Enterprise Edition in hun open source-versie opgenomen. MariaDB bevat testcases voor alle nieuwe opgeloste bugs. MySQL biedt geen testcases voor bugs die zijn opgelost in MySQL 5.5. MariaDB maakt alle toekomstige ontwikkelingsplannen openbaar, inclusief bugs en hun oplossingen. MariaDB heeft een grote community en die community van ontwikkelaars omvat een grote verscheidenheid aan bijdragers, terwijl alle commits naar MySQL afkomstig lijken te zijn van Oracle-medewerkers. MySQL-clientbibliotheken worden vrijgegeven onder de GPL-licentie die koppelingen naar closed source-applicaties verbiedt. Integendeel, MariaDB licentieert clientbibliotheken onder de LGPL-licentie, waardoor koppelingen naar closed source-software mogelijk zijn.
Compatibiliteitsproblemen tussen MariaDB en MySQL
MariaDB is ontworpen als een drop-in vervanging voor MySQL en was een afsplitsing van de originele MySQL-codebasis. Dit betekent dat het overstappen van MySQL naar MariaDB een relatief eenvoudig proces is. U verwijdert eenvoudig MySQL en installeert MariaDB. Omdat het een drop-in vervanging is, is het niet nodig om gegevens te converteren. De ontwikkelaars van MariaDB voeren een maandelijkse samenvoeging van de MySQL-code uit om ervoor te zorgen dat ze compatibel blijven. Er zijn verschillende incompatibiliteiten tussen versies van MySQL en MariaDB, ook al zijn versies ontworpen om compatibel te zijn op basis van hun respectievelijke versienummers (bijvoorbeeld MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).
Incompatibiliteit tussen MariaDB 10.0 en MariaDB 5.5 / MySQL 5.5
- SET OPTION-syntaxis is verouderd in MariaDB 10.0 en MySQL 5.6. Gebruik gewoon SET.
Incompatibiliteit tussen MariaDB 10.0 en MySQL 5.6
- Alle MySQL binaries (MySQLd, myisamchk etc.) geven een waarschuwing als men een prefix van een optie gebruikt (zoals –big-table in plaats van –big-tables). MariaDB-binaire bestanden werken op dezelfde manier als de meeste andere Unix-commando's en geven geen waarschuwingen bij het gebruik van unieke voorvoegsels.
- MariaDB GTID is niet compatibel met MySQL 5.6. Dit betekent dat men MySQL 5.6 niet als slaaf voor MariaDB 10.0 kan hebben. MariaDB 10.0 kan echter een slaaf zijn van MySQL 5.6 of een eerdere MySQL/MariaDB-versie.
- MariaDB 10.0 multi-source replicatie wordt niet ondersteund in MySQL 5.6.
- MariaDB 10.0 dynamische kolommen worden niet ondersteund door MySQL 5.6.
- Om CREATE TABLE … SELECT op dezelfde manier te laten werken in replicatie op basis van instructies en op rijen, wordt het standaard uitgevoerd als CREATE OR REPLACE TABLE op de slave. Een voordeel hiervan is dat als de slaaf sterft in het midden van CREATE ... SELECT, hij kan doorgaan.
- Men kan de variabele slave-ddl-exec-mode gebruiken om te specificeren hoe CREATE TABLE en DROP TABLE worden gerepliceerd.
- Zie ook een gedetailleerd overzicht van de verschillen in systeemvariabelen tussen MariaDB 10.0 en MySQL 5.6.
- MySQL 5.6 heeft standaard prestatieschema ingeschakeld. Om prestatieredenen heeft MariaDB 10.0 het standaard uitgeschakeld. Je kunt het inschakelen door MySQLd te starten met de optie –performance-schema.
- MariaDB 10.0 ondersteunt de MySQL Memcached-plug-in niet.
- Gebruikers die zijn gemaakt met het SHA256-wachtwoordalgoritme van MySQL kunnen niet worden gebruikt in MariaDB 10.0.
- MariaDB 10.0 ondersteunt geen vertraagde replicatie – MDEV-7145.
Incompatibiliteiten tussen MariaDB 10.1 en MySQL 5.7
- MariaDB 10.1 ondersteunt de JSON van MySQL 5.7 niet.
- De InnoDB-codering van MariaDB 10.1 is anders geïmplementeerd dan de InnoDB-codering van MySQL 5.7.
- MariaDB 10.1 ondersteunt de ngram en MeCab full-text parser-plug-ins – MDEV-10267, MDEV-10268, niet.
- MariaDB 10.1 ondersteunt geen meerdere triggers voor een tabel - MDEV-6112.
- MariaDB 10.1 ondersteunt CREATE TABLESPACE voor InnoDB niet.
Incompatibiliteiten tussen MariaDB 10.2 en MySQL 5.7
- Verschillen in systeemvariabelen tussen MariaDB 10.2 en MySQL 5.7.
- Functieverschillen tussen MariaDB 10.2 en MySQL 5.7.
- Meerdere triggers per tafel zijn toegevoegd in 10.2
- MariaDB InnoDB-codering is anders geïmplementeerd dan de InnoDB-codering van MySQL 5.7.
- MariaDB slaat JSON op als echte tekst, niet in binair formaat als MySQL. De reden is dat onze JSON-functies veel sneller zijn dan die van MySQL, dus we hoefden geen noodzaak in te zien om dingen in binair formaat op te slaan, omdat het veel complexiteit toevoegt bij het manipuleren van JSON-objecten.
- MariaDB 10.2 biedt geen ondersteuning voor de ngram en MeCab full-text parser-plug-ins - MDEV-10267, MDEV-10268.
- MariaDB 10.2 ondersteunt de MySQL X-plug-in niet.
- MariaDB 10.2 ondersteunt de algemene MySQL-tabelruimten niet.
- Zie ook Incompatibiliteiten tussen MariaDB 10.1 en MySQL 5.7.