MySQL frente a MariaDB
La historia de fondo de MySQL y MariaDB
Control de versiones de replicación de MySQL y MariaDB
Esclavo↓ Maestro→ | MariaDB-5.5 | MariaDB-10.0 | MariaDB-10.1 | MariaDB-10.2 | MySQL-5.6 | MySQL-5.7 | MySQL-8.0 |
---|---|---|---|---|---|---|---|
MariaDB-5.5 | Está bien | No | No | No | No | No | No |
MariaDB-10.0 | Está bien | Está bien | Está bien | ||||
MariaDB-10.1 | Está bien | Está bien | Está bien | Está bien | |||
MariaDB-10.2 | Está bien | Está bien | Está bien | Está bien | Está bien | Está bien |
Comparación de características de MySQL y MariaDB
Más motores de almacenamiento
MariaDB contiene los motores de almacenamiento estándar MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE y MERGE. También incluye algunos de los motores de almacenamiento menos comunes como;
- Casandra (MariaDB 10.0)
- Araña (MariaDB 10.0+)
- SECUENCIA (MariaDB 10.0+)
- CONECTAR (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (no disponible en MariaDB 5.5)
- FederatedX (Reemplazo directo de Federated)
- Aria (reemplazo de MyISAM con almacenamiento en caché mejorado)
- MyRocks (motor de almacenamiento MariaDB 10.2 con compresión mejorada)
- ColumnStore (un motor de almacenamiento orientado a columnas optimizado para almacenamiento de datos)
Mejoras de velocidad
MariaDB tiene muchas mejoras mejoradas sobre MySQL al comparar la función Optimizer:
Característica | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Optimizaciones de acceso al disco | ||||
Inserción de condición de índice (ICP) | SÍ | SÍ | – | SÍ |
Lectura de rango múltiple de barrido de disco (DS-MRR) | SÍ | SÍ | – | SÍ |
DS-MRR con recuperación ordenada por clave | SÍ | SÍ | – | – |
Index_merge / Sort_intersection | SÍ | SÍ | – | – |
Elección de rango basada en costos vs. index_merge | SÍ | SÍ | – | – |
ORDENAR POR... LÍMITE | – | SÍ | – | SÍ |
Usar claves primarias extendidas (ocultas) para innodb/xtradb | SÍ (5.5) | SÍ | – | – |
Únete a optimizaciones | ||||
Acceso de clave por lotes (BKA) | SÍ | SÍ | – | SÍ |
Bloquear unión hash | SÍ | SÍ | – | – |
Límites de memoria establecidos por el usuario en todos los búferes de unión | SÍ | SÍ | – | – |
Aplicar condiciones ON de tabla exterior temprana | SÍ | SÍ | – | – |
Condiciones de rechazo nulo probadas antes de NULL | SÍ | SÍ | – | – |
Optimizaciones de subconsultas | ||||
In-to-exists | SÍ | SÍ | SÍ | SÍ |
Semi-unión | SÍ | SÍ | – | SÍ |
Materialización | SÍ | SÍ | – | SÍ |
Materialización consciente de NULL | SÍ | SÍ | – | – |
Elección de costo de materialización vs. dentro de existencia | SÍ | SÍ | – | SÍ |
Caché de subconsulta | SÍ | SÍ | – | – |
Explicación rápida con subconsultas | SÍ | SÍ | – | – |
EXISTE-a-ENTRADA | – | SÍ | – | – |
Optimización para tablas/vistas derivadas | ||||
Retraso en la materialización de tablas derivadas/vistas materializadas | SÍ | SÍ | – | SÍ |
EXPLICACIÓN instantánea para tablas derivadas | SÍ | SÍ | – | SÍ |
Tabla derivada con optimización de claves | SÍ | SÍ | – | SÍ |
Campos de vistas combinables y tablas derivadas utilizadas en optimizaciones de igualdad | SÍ | SÍ | – | – |
Control de ejecución | ||||
LÍMITE DE FILAS EXAMINADAS rows_limit | SÍ (5.5) | SÍ | – | – |
Control optimizador (interruptor optimizador) | ||||
Control sistemático de todas las estrategias del optimizador | SÍ | SÍ | – | parcial |
EXPLICAR mejoras | ||||
Explicación para ELIMINAR, INSERTAR, REEMPLAZAR y ACTUALIZAR | – | Parcial | – | SÍ |
EXPLICAR en formato JSON | – | – | – | SÍ |
EXPLICACIÓN más detallada y consistente para subconsultas | SÍ | SÍ | – | – |
Rastreo del optimizador | ||||
Seguimiento del optimizador | – | – | – | SÍ |
- Replicación en paralelo — nuevo en 10.0; se lleva a cabo en tres partes:el subproceso de E/S lee los eventos de replicación y los pone en cola en el registro de retransmisión, el subproceso de SQL los obtiene individualmente del registro de retransmisión, y cada evento se aplica en el esclavo replicando los cambios en el maestro.
- Las mejoras de rendimiento incluyen un mejor subsistema de E/S asíncrono InnoDB en Windows.
- Los índices para el motor MEMORY(HEAP) son más rápidos. Las últimas correcciones se aplicaron en MariaDB 5.5 y MySQL 5.7.
- Se agregó caché de clave segmentada para MyISAM en MariaDB 5.2. Esto ha mejorado el rendimiento en las tablas MyISAM hasta 4 veces.
- A partir de la versión 10.0.13, el tamaño de hash ajustable para MyISAM y Aria mejora el tiempo de apagado si usa muchas tablas MyISAM/Aria con claves retrasadas.
- Con la TABLA CHECKSUM usando la opción QUICK se mejora la velocidad.
- Se mejoró el rendimiento con las conversiones de conjuntos de caracteres y la eliminación de conversiones (cuando no eran necesarias). La mejora general de la velocidad es de aproximadamente un 1-5 %, pero puede ser más rápida con grandes conjuntos de resultados.
- Pool of Threads en MariaDB 5.1/MariaDB 5.5 permite que MariaDB se ejecute con más de 200 000 conexiones, lo que mejora la velocidad cuando se usan muchas conexiones.
- Se agregaron mejoras en la conexión del cliente a partir de MariaDB 10.1 y MariaDB 10.2.
- Algunas mejoras en el código DBUG dentro de MariaDB ayudan a que el código se ejecute más rápido con la depuración compilada, pero no utilizada.
- Usar el motor de almacenamiento Aria con tablas temporales internas permite mejorar el rendimiento.
- El conjunto de pruebas se ejecuta más rápido incluso con la lista de pruebas extendida.
Nuevas funciones y extensiones
Mejores pruebas
MariaDB contiene más pruebas en el conjunto de pruebas que MySQL. Se han eliminado las pruebas no válidas y las innecesarias. Se han solucionado los problemas con el conjunto de pruebas.
Menos errores
Actualmente, la comunidad de MariaDB está alerta y trabaja para corregir errores de la manera más rápida y completa posible. Además, las advertencias del compilador también se han reducido como resultado de la reducción de errores.
Código abierto
Todo el código fuente de MariaDB se publica bajo GPL, LGPL o BSD. Mientras que MySQL tiene módulos de código cerrado en su Enterprise Edition, MariaDB no tiene ningún módulo de código cerrado. MariaDB incluyó todas las funciones de código cerrado contenidas en MySQL 5.5 Enterprise Edition en su versión de código abierto. MariaDB incluye casos de prueba para todos los nuevos errores corregidos. MySQL no proporciona casos de prueba para errores corregidos en MySQL 5.5. MariaDB hace públicos todos los planes de desarrollo futuros, incluidos los errores y sus correcciones. MariaDB tiene una gran comunidad y esa comunidad de desarrolladores incluye una amplia variedad de colaboradores, mientras que todas las confirmaciones de MySQL parecen ser de empleados de Oracle. Las bibliotecas de cliente de MySQL se publican bajo la licencia GPL que prohíbe la vinculación a aplicaciones de código cerrado. Por el contrario, MariaDB otorga licencias de bibliotecas de clientes bajo la licencia LGPL que permite la vinculación a software de código cerrado.
Problemas de compatibilidad entre MariaDB y MySQL
MariaDB se diseñó para ser un reemplazo directo de MySQL y era una bifurcación del código base original de MySQL. Esto significa que cambiar de MySQL a MariaDB es un proceso relativamente sencillo. Simplemente desinstala MySQL e instala MariaDB. Dado que es un reemplazo directo, no hay necesidad de convertir ningún dato. Los desarrolladores de MariaDB realizan una combinación mensual del código MySQL para garantizar que sigan siendo compatibles. Existen diferentes incompatibilidades entre las versiones de MySQL y MariaDB, aunque las versiones están diseñadas para ser compatibles por sus respectivos números de versión (por ejemplo, MySQL 5.1 -> MariaDB 5.1 y MySQL 5.5 -> MariaDB 5.5).
Incompatibilidades entre MariaDB 10.0 y MariaDB 5.5 / MySQL 5.5
- La sintaxis SET OPTION está obsoleta en MariaDB 10.0 y MySQL 5.6. Use solo SET.
Incompatibilidades entre MariaDB 10.0 y MySQL 5.6
- Todos los archivos binarios de MySQL (MySQLd, myisamchk, etc.) muestran una advertencia si se usa el prefijo de una opción (como –big-table en lugar de –big-tables). Los binarios de MariaDB funcionan de la misma manera que la mayoría de los otros comandos de Unix y no dan advertencias cuando se usan prefijos únicos.
- MariaDB GTID no es compatible con MySQL 5.6. Esto significa que uno no puede tener MySQL 5.6 como esclavo para MariaDB 10.0. Sin embargo, MariaDB 10.0 puede ser un esclavo de MySQL 5.6 o cualquier versión anterior de MySQL/MariaDB.
- La replicación de múltiples fuentes de MariaDB 10.0 no es compatible con MySQL 5.6.
- Las columnas dinámicas de MariaDB 10.0 no son compatibles con MySQL 5.6.
- Para hacer que CREATE TABLE... SELECT funcione de la misma manera en la replicación basada en declaraciones y en filas, se ejecuta de forma predeterminada como CREATE OR REPLACE TABLE en el esclavo. Un beneficio de esto es que si el esclavo muere en medio de CREAR... SELECCIONAR, podrá continuar.
- Se puede usar la variable slave-ddl-exec-mode para especificar cómo se replican CREATE TABLE y DROP TABLE.
- Vea también un desglose detallado de las diferencias de variables del sistema entre MariaDB 10.0 y MySQL 5.6.
- MySQL 5.6 tiene el esquema de rendimiento habilitado de forma predeterminada. Por motivos de rendimiento MariaDB 10.0 lo tiene deshabilitado por defecto. Puede habilitarlo iniciando MySQLd con la opción –performance-schema.
- MariaDB 10.0 no es compatible con el complemento MySQL Memcached.
- Los usuarios creados con el algoritmo de contraseña SHA256 de MySQL no se pueden usar en MariaDB 10.0.
- MariaDB 10.0 no es compatible con la replicación retrasada:MDEV-7145.
Incompatibilidades entre MariaDB 10.1 y MySQL 5.7
- MariaDB 10.1 no es compatible con JSON de MySQL 5.7.
- El cifrado InnoDB de MariaDB 10.1 se implementa de manera diferente al cifrado InnoDB de MySQL 5.7.
- MariaDB 10.1 no es compatible con los complementos de analizador de texto completo ngram y MeCab:MDEV-10267, MDEV-10268.
- MariaDB 10.1 no admite múltiples disparadores para una tabla:MDEV-6112.
- MariaDB 10.1 no es compatible con CREATE TABLESPACE para InnoDB.
Incompatibilidades entre MariaDB 10.2 y MySQL 5.7
- Diferencias de variables del sistema entre MariaDB 10.2 y MySQL 5.7.
- Diferencias de funciones entre MariaDB 10.2 y MySQL 5.7.
- Se agregaron múltiples disparadores por tabla en 10.2
- El cifrado MariaDB InnoDB se implementa de manera diferente al cifrado InnoDB de MySQL 5.7.
- MariaDB almacena JSON como texto verdadero, no en formato binario como MySQL. La razón es que nuestras funciones JSON son mucho más rápidas que las de MySQL, por lo que no necesitamos ver la necesidad de almacenar cosas en formato binario, ya que agrega mucha complejidad al manipular objetos JSON.
- MariaDB 10.2 no es compatible con los complementos de analizador de texto completo ngram y MeCab:MDEV-10267, MDEV-10268.
- MariaDB 10.2 no es compatible con el complemento MySQL X.
- MariaDB 10.2 no es compatible con los espacios de tablas generales de MySQL.
- Consulte también Incompatibilidades entre MariaDB 10.1 y MySQL 5.7.