MySQL contre MariaDB
L'histoire de MySQL et MariaDB
MySQL et MariaDB partagent une histoire commune, les deux portent le nom des filles du développeur Michael Widenius, My et Maria. MySQL a été créé en 1995 par une société de logiciels suédoise, MySQL AB . Il a gagné en popularité au fil des ans et est devenu la norme pour le système de gestion de base de données relationnelle open source. En 2008, Sun a acheté MySQL AB (et finalement MySQL) pour 1 milliard de dollars. Peu de temps après l'achat de Sun par Oracle en avril 2009. À ce stade, Oracle, un système de base de données concurrent, est devenu propriétaire de MySQL. Cela a dérangé les développeurs d'origine en voyant à quel point ils pensaient que l'avenir de MySQL était en danger. Suivant les règles de l'open source, ils ont décidé de "forker" MySQL et de créer MariaDB. Et voilà, MySQL et MariaDB partagent un historique !
Nous avons un excellent tutoriel sur la façon d'installer MariaDB pour remplacer MySQL dans WHM.
Gestion des versions de la réplication MySQL et MariaDB
Esclave↓ Maître→ | MariaDB-5.5 | MariaDB-10.0 | MariaDB-10.1 | MariaDB-10.2 | MySQL-5.6 | MySQL-5.7 | MySQL-8.0 |
---|---|---|---|---|---|---|---|
MariaDB-5.5 | D'accord | Non | Non | Non | Non | Non | Non |
MariaDB-10.0 | D'accord | D'accord | D'accord | ||||
MariaDB-10.1 | D'accord | D'accord | D'accord | D'accord | |||
MariaDB-10.2 | D'accord | D'accord | D'accord | D'accord | D'accord | D'accord |
Comparaison des fonctionnalités de MySQL et MariaDB
Plus de moteurs de stockage
MariaDB contient les moteurs de stockage standard MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE et MERGE. Il inclut également certains des moteurs de stockage les moins courants tels que ;
- Cassandre (MariaDB 10.0)
- Araignée (MariaDB 10.0+)
- SÉQUENCE (MariaDB 10.0+)
- CONNECTER (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (non disponible dans MariaDB 5.5)
- FederatedX (en remplacement de Federated)
- Aria (remplacement de MyISAM avec mise en cache améliorée)
- MyRocks (moteur de stockage MariaDB 10.2 avec compression améliorée)
- ColumnStore (un moteur de stockage orienté colonne optimisé pour l'entreposage de données)
Améliorations de la vitesse
MariaDB a de nombreuses améliorations améliorées par rapport à MySQL lors de la comparaison de la fonctionnalité Optimizer :
Fonctionnalité | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Optimisations d'accès au disque | ||||
Repoussée des conditions d'index (ICP) | OUI | OUI | – | OUI |
Lecture multi-gamme par balayage de disque (DS-MRR) | OUI | OUI | – | OUI |
DS-MRR avec récupération ordonnée par clé | OUI | OUI | – | – |
Index_merge / Sort_intersection | OUI | OUI | – | – |
Choix de la plage basé sur le coût par rapport à index_merge | OUI | OUI | – | – |
ORDER PAR … LIMITE | – | OUI | – | OUI |
Utiliser des clés primaires étendues (cachées) pour innodb/xtradb | OUI (5.5) | OUI | – | – |
Joindre les optimisations | ||||
Accès par lots de clés (BKA) | OUI | OUI | – | OUI |
Bloquer la jointure par hachage | OUI | OUI | – | – |
Limites de mémoire définies par l'utilisateur sur tous les tampons de jointure | OUI | OUI | – | – |
Appliquer les conditions ON de la table externe précoce | OUI | OUI | – | – |
Conditions de rejet de NULL testées tôt pour les NULL | OUI | OUI | – | – |
Optimisations des sous-requêtes | ||||
In-to-existe | OUI | OUI | OUI | OUI |
Semi-jointure | OUI | OUI | – | OUI |
Matérialisation | OUI | OUI | – | OUI |
Matérialisation compatible NULL | OUI | OUI | – | – |
Choix du coût de la matérialisation par rapport à l'in-to-exists | OUI | OUI | – | OUI |
Cache de sous-requêtes | OUI | OUI | – | – |
Explication rapide avec des sous-requêtes | OUI | OUI | – | – |
EXISTS-to-IN | – | OUI | – | – |
Optimisation pour les tables/vues dérivées | ||||
Matérialisation retardée des tables dérivées / vues matérialisées | OUI | OUI | – | OUI |
EXPLAIN instantané pour les tables dérivées | OUI | OUI | – | OUI |
Table dérivée avec optimisation des clés | OUI | OUI | – | OUI |
Champs des vues fusionnables et tables dérivées utilisées dans les optimisations d'égalité | OUI | OUI | – | – |
Contrôle d'exécution | ||||
LIMITER LES LIGNES EXAMINÉES rows_limit | OUI (5.5) | OUI | – | – |
Contrôle de l'optimiseur (commutateur de l'optimiseur) | ||||
Contrôle systématique de toutes les stratégies d'optimisation | OUI | OUI | – | partielle |
EXPLIQUER les améliorations | ||||
Expliquer pour DELETE, INSERT, REPLACE et UPDATE | – | Partiel | – | OUI |
EXPLIQUER au format JSON | – | – | – | OUI |
EXPLAIN plus détaillé et cohérent pour les sous-requêtes | OUI | OUI | – | – |
Traçage de l'optimiseur | ||||
Traçage de l'optimiseur | – | – | – | OUI |
- Réplication parallèle — nouveau dans 10.0 ; se déroule en trois parties :les événements de réplication sont lus par le thread IO et mis en file d'attente dans le journal de relais, récupérés individuellement par le thread SQL à partir du journal de relais, et chaque événement est appliqué sur l'esclave en répliquant les modifications sur le maître.
- Les améliorations de performances incluent un meilleur sous-système d'E/S asynchrones InnoDB sous Windows.
- Les index pour le moteur MEMORY(HEAP) sont plus rapides. Les derniers correctifs ont été appliqués dans MariaDB 5.5 et MySQL 5.7.
- Le cache de clé segmenté pour MyISAM a été ajouté dans MariaDB 5.2. Cela a amélioré les performances dans les tables MyISAM jusqu'à 4x.
- Depuis la version 10.0.13, la taille de hachage ajustable pour MyISAM et Aria améliore le temps d'arrêt si vous utilisez de nombreuses tables MyISAM/Aria avec des clés retardées.
- Avec la CHECKSUM TABLE utilisant l'option QUICK, la vitesse est améliorée.
- Les performances ont été améliorées avec les conversions de jeux de caractères et la suppression des conversions (lorsqu'elles n'étaient pas nécessaires). L'amélioration globale de la vitesse est d'environ 1 à 5 %, mais peut être plus rapide avec de grands ensembles de résultats.
- Le pool de threads dans MariaDB 5.1/MariaDB 5.5 permet à MariaDB de fonctionner avec plus de 200 000 connexions, ce qui améliore la vitesse lors de l'utilisation de nombreuses connexions.
- Améliorations de la connexion client ajoutées à partir de MariaDB 10.1 et MariaDB 10.2.
- Certaines améliorations apportées au code DBUG dans MariaDB permettent d'accélérer l'exécution du code avec le débogage compilé, mais non utilisé.
- L'utilisation du moteur de stockage Aria à l'aide de tables temporaires internes permet d'améliorer les performances.
- La suite de tests s'exécute plus rapidement même avec la liste de tests étendue.
Nouvelles fonctionnalités et extensions
Meilleurs tests
MariaDB contient plus de tests dans la suite de tests que MySQL. Les tests invalides et inutiles ont été supprimés. Les problèmes avec la suite de tests ont été corrigés.
Moins de bogues
Actuellement, la communauté MariaDB est en alerte et s'efforce de corriger les bugs aussi rapidement et aussi complètement que possible. De plus, les avertissements du compilateur ont également été réduits en raison de la réduction des bogues.
Open Source
Tout le code source de MariaDB est publié sous GPL, LGPL ou BSD. Alors que MySQL a des modules à source fermée dans son édition Enterprise, MariaDB n'a pas de modules à source fermée. MariaDB a inclus toutes les fonctionnalités de source fermée contenues dans MySQL 5.5 Enterprise Edition dans leur version open source. MariaDB inclut des cas de test pour tous les nouveaux bogues corrigés. MySQL ne fournit pas de cas de test pour les bogues corrigés dans MySQL 5.5. MariaDB rend publics tous les futurs plans de développement, y compris les bogues et leurs correctifs. MariaDB a une grande communauté et cette communauté de développeurs comprend une grande variété de contributeurs alors que tous les engagements envers MySQL semblent provenir d'employés d'Oracle. Les bibliothèques clientes MySQL sont publiées sous la licence GPL qui interdit la liaison à des applications à source fermée. Au contraire, MariaDB octroie des licences aux bibliothèques clientes sous la licence LGPL permettant la liaison à des logiciels à source fermée.
Problèmes de compatibilité entre MariaDB et MySQL
MariaDB a été conçu pour remplacer MySQL et était un fork de la base de code MySQL d'origine. Cela signifie que lors du passage de MySQL à MariaDB, le processus est relativement simple. Vous désinstallez simplement MySQL et installez MariaDB. Puisqu'il s'agit d'un remplacement instantané, il n'est pas nécessaire de convertir des données. Les développeurs de MariaDB effectuent une fusion mensuelle du code MySQL pour s'assurer qu'ils restent compatibles. Il existe différentes incompatibilités entre les versions de MySQL et MariaDB même si les versions sont conçues pour être compatibles par leurs numéros de version respectifs (par exemple MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).
Incompatibilités entre MariaDB 10.0 &MariaDB 5.5 / MySQL 5.5
- La syntaxe SET OPTION est obsolète dans MariaDB 10.0 et MySQL 5.6. Utilisez simplement SET.
Incompatibilités entre MariaDB 10.0 et MySQL 5.6
- Tous les binaires MySQL (MySQLd, myisamchk etc.) donnent un avertissement si l'on utilise un préfixe d'option (comme –big-table au lieu de –big-tables). Les binaires MariaDB fonctionnent de la même manière que la plupart des autres commandes Unix et ne donnent pas d'avertissements lors de l'utilisation de préfixes uniques.
- MariaDB GTID n'est pas compatible avec MySQL 5.6. Cela signifie qu'on ne peut pas avoir MySQL 5.6 comme esclave pour MariaDB 10.0. Cependant, MariaDB 10.0 peut être un esclave de MySQL 5.6 ou de toute version antérieure de MySQL/MariaDB.
- La réplication multi-sources MariaDB 10.0 n'est pas prise en charge dans MySQL 5.6.
- Les colonnes dynamiques MariaDB 10.0 ne sont pas prises en charge par MySQL 5.6.
- Pour que CREATE TABLE … SELECT fonctionne de la même manière dans la réplication basée sur les instructions et sur les lignes, il est exécuté par défaut en tant que CREATE OR REPLACE TABLE sur l'esclave. L'un des avantages de ceci est que si l'esclave meurt au milieu de CREATE … SELECT, il pourra continuer.
- On peut utiliser la variable slave-ddl-exec-mode pour spécifier comment CREATE TABLE et DROP TABLE sont répliqués.
- Consultez également une répartition détaillée des différences de variables système entre MariaDB 10.0 et MySQL 5.6.
- MySQL 5.6 a un schéma de performances activé par défaut. Pour des raisons de performances, MariaDB 10.0 l'a désactivé par défaut. Vous pouvez l'activer en démarrant MySQLd avec l'option –performance-schema.
- MariaDB 10.0 ne prend pas en charge le plug-in MySQL Memcached.
- Les utilisateurs créés avec l'algorithme de mot de passe SHA256 de MySQL ne peuvent pas être utilisés dans MariaDB 10.0.
- MariaDB 10.0 ne prend pas en charge la réplication différée – MDEV-7145.
Incompatibilités entre MariaDB 10.1 et MySQL 5.7
- MariaDB 10.1 ne prend pas en charge le JSON de MySQL 5.7.
- Le chiffrement InnoDB de MariaDB 10.1 est implémenté différemment du chiffrement InnoDB de MySQL 5.7.
- MariaDB 10.1 ne prend pas en charge les plugins d'analyseur de texte intégral ngram et MeCab - MDEV-10267, MDEV-10268.
- MariaDB 10.1 ne prend pas en charge plusieurs déclencheurs pour une table – MDEV-6112.
- MariaDB 10.1 ne prend pas en charge CREATE TABLESPACE pour InnoDB.
Incompatibilités entre MariaDB 10.2 et MySQL 5.7
- Différences des variables système entre MariaDB 10.2 et MySQL 5.7.
- Différences fonctionnelles entre MariaDB 10.2 et MySQL 5.7.
- Plusieurs déclencheurs par table ont été ajoutés dans la version 10.2
- Le chiffrement MariaDB InnoDB est implémenté différemment du chiffrement InnoDB de MySQL 5.7.
- MariaDB stocke JSON sous forme de texte vrai, et non au format binaire comme MySQL. La raison en est que nos fonctions JSON sont beaucoup plus rapides que celles de MySQL, nous n'avions donc pas besoin de voir le besoin de stocker des éléments au format binaire, car cela ajoute beaucoup de complexité lors de la manipulation d'objets JSON.
- MariaDB 10.2 ne prend pas en charge les plug-ins d'analyseur de texte intégral ngram et MeCab :MDEV-10267, MDEV-10268.
- MariaDB 10.2 ne prend pas en charge le plugin MySQL X.
- MariaDB 10.2 ne prend pas en charge les espaces table généraux MySQL.
- Voir également Incompatibilités entre MariaDB 10.1 et MySQL 5.7.