MySQL versus MariaDB
Die Hintergrundgeschichte von MySQL und MariaDB
MySQL und MariaDB haben eine gemeinsame Geschichte, beide sind nach den Töchtern von Entwickler Michael Widenius, My und Maria, benannt. MySQL wurde 1995 von einer schwedischen Softwarefirma, MySQL AB, entwickelt . Es wurde im Laufe der Jahre immer beliebter und wurde zum Standard für relationale Open-Source-Datenbankverwaltungssysteme. Im Jahr 2008 kaufte Sun MySQL AB (und schließlich MySQL) für 1 Milliarde US-Dollar. Nicht lange nachdem Sun im April 2009 von Oracle gekauft wurde. Zu diesem Zeitpunkt wurde Oracle, ein konkurrierendes Datenbanksystem, Eigentümer von MySQL. Dies beunruhigte die ursprünglichen Entwickler, die sahen, wie sie die Zukunft von MySQL in Gefahr sahen. Nach den Regeln von Open Source beschlossen sie, MySQL zu „forken“ und MariaDB zu erstellen. Und da haben Sie es, MySQL und MariaDB teilen sich einen Verlauf!
Wir haben ein großartiges Tutorial zur Installation von MariaDB, um MySQL in WHM zu ersetzen.
MySQL- und MariaDB-Replikationsversionierung
Sklave↓ Meister→ | MariaDB-5.5 | MariaDB-10.0 | MariaDB-10.1 | MariaDB-10.2 | MySQL-5.6 | MySQL-5.7 | MySQL-8.0 |
---|---|---|---|---|---|---|---|
MariaDB-5.5 | Okay | Nein | Nein | Nein | Nein | Nein | Nein |
MariaDB-10.0 | Okay | Okay | Okay | ||||
MariaDB-10.1 | Okay | Okay | Okay | Okay | |||
MariaDB-10.2 | Okay | Okay | Okay | Okay | Okay | Okay |
Funktionsvergleich von MySQL und MariaDB
Mehr Speicher-Engines
MariaDB enthält die Standardspeicher-Engines MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE und MERGE. Es enthält auch einige der weniger gebräuchlichen Speicher-Engines wie;
- Kassandra (MariaDB 10.0)
- Spider (MariaDB 10.0+)
- SEQUENZ (MariaDB 10.0+)
- VERBINDEN (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (in MariaDB 5.5 nicht verfügbar)
- FederatedX (Drop-in-Ersatz für Federated)
- Aria (MyISAM-Ersatz mit verbessertem Caching)
- MyRocks (MariaDB 10.2 Speicher-Engine mit verbesserter Komprimierung)
- ColumnStore (eine für Data Warehousing optimierte spaltenorientierte Speicher-Engine)
Geschwindigkeitsverbesserungen
MariaDB hat viele verbesserte Verbesserungen gegenüber MySQL, wenn man die Optimizer-Funktion vergleicht:
Funktion | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Optimierung des Plattenzugriffs | ||||
Indexbedingungs-Pushdown (ICP) | JA | JA | – | JA |
Disk-Sweep-Multi-Range-Read (DS-MRR) | JA | JA | – | JA |
DS-MRR mit Schlüssel-geordnetem Abruf | JA | JA | – | – |
Index_merge / Sort_intersection | JA | JA | – | – |
Kostenbasierte Wahl des Bereichs vs. index_merge | JA | JA | – | – |
ORDER BY … LIMIT | – | JA | – | JA |
Verwenden Sie erweiterte (versteckte) Primärschlüssel für innodb/xtradb | JA (5.5) | JA | – | – |
Beitrittsoptimierungen | ||||
Batch-Schlüsselzugriff (BKA) | JA | JA | – | JA |
Hash-Join blockieren | JA | JA | – | – |
Benutzerdefinierte Speichergrenzen für alle Join-Puffer | JA | JA | – | – |
Wende frühe ON-Bedingungen für äußere Tabellen an | JA | JA | – | – |
NULL-Zurückweisungsbedingungen wurden früh auf NULLen getestet | JA | JA | – | – |
Unterabfrageoptimierungen | ||||
Besteht | JA | JA | JA | JA |
Semi-Join | JA | JA | – | JA |
Materialisierung | JA | JA | – | JA |
NULL-bewusste Materialisierung | JA | JA | – | – |
Kostenwahl der Materialisierung vs. In-to-exists | JA | JA | – | JA |
Unterabfrage-Cache | JA | JA | – | – |
Schnelle Erklärung mit Unterabfragen | JA | JA | – | – |
EXISTS-to-IN | – | JA | – | – |
Optimierung für abgeleitete Tabellen / Ansichten | ||||
Verzögerte Materialisierung abgeleiteter Tabellen / materialisierter Ansichten | JA | JA | – | JA |
Sofortiges EXPLAIN für abgeleitete Tabellen | JA | JA | – | JA |
Abgeleitete Tabelle mit Schlüsseloptimierung | JA | JA | – | JA |
Felder zusammenführungsfähiger Ansichten und abgeleiteter Tabellen, die in Gleichheitsoptimierungen verwendet werden | JA | JA | – | – |
Ausführungskontrolle | ||||
UNTERSUCHTE ZEILEN LIMITIEREN rows_limit | JA (5.5) | JA | – | – |
Optimierersteuerung (Optimiererschalter) | ||||
Systematische Kontrolle aller Optimierungsstrategien | JA | JA | – | teilweise |
ERKLÄREN Sie Verbesserungen | ||||
Erklären Sie DELETE, INSERT, REPLACE und UPDATE | – | Teilweise | – | JA |
EXPLAIN im JSON-Format | – | – | – | JA |
Detaillierteres und konsistenteres EXPLAIN für Unterabfragen | JA | JA | – | – |
Optimierer-Trace | ||||
Optimierer-Trace | – | – | – | JA |
- Parallele Replikation — neu in 10.0; findet in drei Teilen statt:Replikationsereignisse werden vom IO-Thread gelesen und in das Relay-Log eingereiht, einzeln vom SQL-Thread aus dem Relay-Log abgerufen und jedes Ereignis wird auf den Slave angewendet, der die Änderungen auf dem Master repliziert.
- Zu den Leistungsverbesserungen gehört ein besseres asynchrones InnoDB-IO-Subsystem unter Windows.
- Indizes für die MEMORY(HEAP)-Engine sind schneller. Die neuesten Fixes wurden in MariaDB 5.5 und MySQL 5.7 angewendet.
- Segmentierter Schlüssel-Cache für MyISAM wurde in MariaDB 5.2 hinzugefügt. Dies hat die Leistung in MyISAM-Tabellen um das bis zu 4-fache verbessert.
- Ab Version 10.0.13 verbessert die einstellbare Hash-Größe für MyISAM und Aria die Herunterfahrzeit, wenn Sie viele MyISAM/Aria-Tabellen mit verzögerten Schlüsseln verwenden.
- Mit der CHECKSUM TABLE unter Verwendung der QUICK-Option wird die Geschwindigkeit verbessert.
- Die Leistung wurde durch die Zeichensatzkonvertierungen und das Entfernen von Konvertierungen (wenn sie nicht benötigt wurden) verbessert. Die Gesamtgeschwindigkeitsverbesserung beträgt etwa 1–5 %, kann aber bei großen Ergebnismengen schneller sein.
- Thread-Pool in MariaDB 5.1/MariaDB 5.5 ermöglicht es MariaDB, mit mehr als 200.000 Verbindungen zu laufen, was zu einer Geschwindigkeitsverbesserung führt, wenn viele Verbindungen verwendet werden.
- Verbesserungen der Clientverbindung ab MariaDB 10.1 und MariaDB 10.2 hinzugefügt.
- Einige Verbesserungen am DBUG-Code innerhalb von MariaDB tragen dazu bei, dass der Code schneller ausgeführt wird, wenn der Debug zwar kompiliert, aber nicht verwendet wird.
- Die Verwendung der Aria-Speicher-Engine mit internen temporären Tabellen ermöglicht eine verbesserte Leistung.
- Die Testsuite läuft sogar mit der erweiterten Testliste schneller.
Neue Funktionen und Erweiterungen
Besseres Testen
MariaDB enthält mehr Tests in der Testsuite als MySQL. Ungültige und unnötige Tests wurden entfernt. Probleme mit der Testsuite wurden behoben.
Weniger Fehler
Derzeit ist die MariaDB-Community wachsam und arbeitet daran, Fehler so schnell und gründlich wie möglich zu beheben. Außerdem wurden Compiler-Warnungen als Ergebnis der Reduzierung von Fehlern reduziert.
Open-Source
Der gesamte Quellcode für MariaDB ist unter GPL, LGPL oder BSD veröffentlicht. Während MySQL in ihrer Enterprise Edition Closed-Source-Module hat, hat MariaDB keine Closed-Source-Module. MariaDB hat alle in MySQL 5.5 Enterprise Edition enthaltenen Closed-Source-Funktionen in ihre Open-Source-Version aufgenommen. MariaDB enthält Testfälle für alle neuen behobenen Fehler. MySQL stellt keine Testfälle für Fehler bereit, die in MySQL 5.5 behoben wurden. MariaDB veröffentlicht alle zukünftigen Entwicklungspläne, einschließlich Bugs und deren Fixes. MariaDB hat eine große Community und diese Community von Entwicklern umfasst eine Vielzahl von Mitwirkenden, während alle Commits zu MySQL anscheinend von Oracle-Mitarbeitern stammen. MySQL-Clientbibliotheken werden unter der GPL-Lizenz veröffentlicht, die das Verknüpfen mit Closed-Source-Anwendungen verbietet. Im Gegensatz dazu lizenziert MariaDB Client-Bibliotheken unter der LGPL-Lizenz, die die Verknüpfung mit Closed-Source-Software ermöglicht.
Kompatibilitätsprobleme zwischen MariaDB und MySQL
MariaDB wurde als Drop-in-Ersatz für MySQL entwickelt und war ein Fork der ursprünglichen MySQL-Codebasis. Das bedeutet, dass der Wechsel von MySQL zu MariaDB ein relativ unkomplizierter Prozess ist. Sie deinstallieren einfach MySQL und installieren MariaDB. Da es sich um einen Drop-in-Ersatz handelt, müssen keine Daten konvertiert werden. Die Entwickler von MariaDB führen monatlich eine Zusammenführung des MySQL-Codes durch, um sicherzustellen, dass sie kompatibel bleiben. Es gibt verschiedene Inkompatibilitäten zwischen den Versionen von MySQL und MariaDB, obwohl die Versionen so konzipiert sind, dass sie durch ihre jeweiligen Versionsnummern kompatibel sind (z. B. MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).
Inkompatibilitäten zwischen MariaDB 10.0 &MariaDB 5.5 / MySQL 5.5
- Die SET OPTION-Syntax ist in MariaDB 10.0 und MySQL 5.6 veraltet. Verwenden Sie einfach SET.
Inkompatibilitäten zwischen MariaDB 10.0 und MySQL 5.6
- Alle MySQL-Binärdateien (MySQLd, myisamchk etc.) geben eine Warnung aus, wenn man ein Präfix einer Option verwendet (zB –big-table statt –big-tables). MariaDB-Binärdateien funktionieren genauso wie die meisten anderen Unix-Befehle und geben keine Warnungen aus, wenn eindeutige Präfixe verwendet werden.
- MariaDB GTID ist nicht mit MySQL 5.6 kompatibel. Das bedeutet, dass man MySQL 5.6 nicht als Slave für MariaDB 10.0 haben kann. MariaDB 10.0 kann jedoch ein Slave von MySQL 5.6 oder einer früheren MySQL/MariaDB-Version sein.
- MariaDB 10.0 Multi-Source-Replikation wird in MySQL 5.6 nicht unterstützt.
- Dynamische Spalten von MariaDB 10.0 werden von MySQL 5.6 nicht unterstützt.
- Damit CREATE TABLE … SELECT bei der anweisungsbasierten und zeilenbasierten Replikation auf die gleiche Weise funktioniert, wird es standardmäßig als CREATE OR REPLACE TABLE auf dem Slave ausgeführt. Ein Vorteil davon ist, dass, wenn der Slave mitten in CREATE … SELECT stirbt, er weitermachen kann.
- Man kann die Variable slave-ddl-exec-mode verwenden, um anzugeben, wie CREATE TABLE und DROP TABLE repliziert werden.
- Siehe auch eine detaillierte Aufschlüsselung der Systemvariablenunterschiede zwischen MariaDB 10.0 und MySQL 5.6.
- In MySQL 5.6 ist das Leistungsschema standardmäßig aktiviert. Aus Leistungsgründen ist sie in MariaDB 10.0 standardmäßig deaktiviert. Sie können es aktivieren, indem Sie MySQLd mit der Option –performance-schema. starten
- MariaDB 10.0 unterstützt das MySQL-Memcached-Plugin nicht.
- Benutzer, die mit dem SHA256-Passwortalgorithmus von MySQL erstellt wurden, können in MariaDB 10.0 nicht verwendet werden.
- MariaDB 10.0 unterstützt keine verzögerte Replikation – MDEV-7145.
Inkompatibilitäten zwischen MariaDB 10.1 und MySQL 5.7
- MariaDB 10.1 unterstützt das JSON von MySQL 5.7 nicht.
- Die InnoDB-Verschlüsselung von MariaDB 10.1 ist anders implementiert als die InnoDB-Verschlüsselung von MySQL 5.7.
- MariaDB 10.1 unterstützt nicht die ngram- und MeCab-Volltext-Parser-Plugins – MDEV-10267, MDEV-10268.
- MariaDB 10.1 unterstützt nicht mehrere Trigger für eine Tabelle – MDEV-6112.
- MariaDB 10.1 unterstützt CREATE TABLESPACE für InnoDB nicht.
Inkompatibilitäten zwischen MariaDB 10.2 und MySQL 5.7
- Unterschiede zwischen Systemvariablen zwischen MariaDB 10.2 und MySQL 5.7.
- Funktionsunterschiede zwischen MariaDB 10.2 und MySQL 5.7.
- Mehrere Trigger pro Tabelle wurden in 10.2 hinzugefügt
- MariaDB InnoDB-Verschlüsselung wird anders implementiert als die InnoDB-Verschlüsselung von MySQL 5.7.
- MariaDB speichert JSON als echten Text, nicht im Binärformat wie MySQL. Der Grund dafür ist, dass unsere JSON-Funktionen viel schneller sind als die von MySQL, sodass wir keine Notwendigkeit sahen, Dinge im Binärformat zu speichern, da dies die Manipulation von JSON-Objekten erheblich komplizierter macht.
- MariaDB 10.2 unterstützt nicht die ngram- und MeCab-Volltext-Parser-Plugins – MDEV-10267, MDEV-10268.
- MariaDB 10.2 unterstützt das MySQL X-Plugin nicht.
- MariaDB 10.2 unterstützt die allgemeinen MySQL-Tabellenbereiche nicht.
- Siehe auch Inkompatibilitäten zwischen MariaDB 10.1 und MySQL 5.7.