MySQL versus MariaDB
A história por trás do MySQL e do MariaDB
MySQL e MariaDB compartilham alguma história comum, ambos têm o nome das filhas do desenvolvedor Michael Widenius, My e Maria. O MySQL foi criado em 1995 por uma empresa de software sueca, MySQL AB . Ele cresceu em popularidade ao longo dos anos e se tornou o padrão para o sistema de gerenciamento de banco de dados relacional de código aberto. Em 2008, a Sun comprou a MySQL AB (e, finalmente, a MySQL) por US$ 1 bilhão. Não muito tempo depois que a Sun foi comprada pela Oracle em abril de 2009. Neste ponto, a Oracle, um sistema de banco de dados concorrente, tornou-se dona do MySQL. Isso incomodou os desenvolvedores originais vendo como eles sentiam que o futuro do MySQL estava em perigo. Seguindo as regras do código aberto, eles decidiram “bifurcar” o MySQL e criar o MariaDB. E aí está, MySQL e MariaDB compartilham uma história!
Temos um ótimo tutorial sobre como instalar o MariaDB para substituir o MySQL no WHM.
Versão de replicação MySQL e MariaDB
Escravo↓ Mestre→ | 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 | Não | Não | Não | Não | Não | Não |
MariaDB-10.0 | Ok | Ok | Ok | ||||
MariaDB-10.1 | Ok | Ok | Ok | Ok | |||
MariaDB-10.2 | Ok | Ok | Ok | Ok | Ok | Ok |
Comparação de recursos do MySQL e do MariaDB
Mais mecanismos de armazenamento
MariaDB contém os mecanismos de armazenamento padrão MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE e MERGE. Ele também inclui alguns dos mecanismos de armazenamento menos comuns, como;
- Cassandra (MariaDB 10.0)
- Aranha (MariaDB 10.0+)
- SEQUÊNCIA (MariaDB 10.0+)
- CONECTAR (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (não disponível no MariaDB 5.5)
- FederatedX (substituir o Federated)
- Aria (substituição do MyISAM com armazenamento em cache aprimorado)
- MyRocks (mecanismo de armazenamento MariaDB 10.2 com compactação aprimorada)
- ColumnStore (um mecanismo de armazenamento orientado a colunas otimizado para armazenamento de dados)
Melhorias de velocidade
O MariaDB tem muitos aprimoramentos aprimorados em relação ao MySQL ao comparar o recurso Optimizer:
Recurso | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Otimizações de acesso ao disco | ||||
Pushdown da condição do índice (ICP) | SIM | SIM | – | SIM |
Leitura de vários intervalos de varredura de disco (DS-MRR) | SIM | SIM | – | SIM |
DS-MRR com recuperação ordenada por chave | SIM | SIM | – | – |
Index_merge / Sort_intersection | SIM | SIM | – | – |
Escolha baseada em custo de intervalo versus index_merge | SIM | SIM | – | – |
ORDER POR … LIMIT | – | SIM | – | SIM |
Usar chaves primárias estendidas (ocultas) para innodb/xtradb | SIM (5,5) | SIM | – | – |
Otimizações de junção | ||||
Acesso de chave em lote (BKA) | SIM | SIM | – | SIM |
Bloquear junção de hash | SIM | SIM | – | – |
Limites de memória definidos pelo usuário em todos os buffers de junção | SIM | SIM | – | – |
Aplicar condições LIGADAS da tabela externa inicial | SIM | SIM | – | – |
Condições de rejeição de nulos testadas antecipadamente para NULLs | SIM | SIM | – | – |
Otimizações de subconsultas | ||||
A existir | SIM | SIM | SIM | SIM |
Semi-junção | SIM | SIM | – | SIM |
Materialização | SIM | SIM | – | SIM |
Materialização com reconhecimento de NULL | SIM | SIM | – | – |
Escolha de custo de materialização versus existente | SIM | SIM | – | SIM |
Cache de subconsulta | SIM | SIM | – | – |
Explicação rápida com subconsultas | SIM | SIM | – | – |
EXISTS-to-IN | – | SIM | – | – |
Otimização para tabelas/visualizações derivadas | ||||
Atraso na materialização de tabelas derivadas/visualizações materializadas | SIM | SIM | – | SIM |
Explicação instantânea para tabelas derivadas | SIM | SIM | – | SIM |
Tabela derivada com otimização de chaves | SIM | SIM | – | SIM |
Campos de visualizações mescláveis e tabelas derivadas usadas em otimizações de igualdade | SIM | SIM | – | – |
Controle de execução | ||||
LIMIT ROWS EXAMINED rows_limit | SIM (5,5) | SIM | – | – |
Controle do otimizador (interruptor do otimizador) | ||||
Controle sistemático de todas as estratégias do otimizador | SIM | SIM | – | parcial |
EXPLICAR melhorias | ||||
Explicar para DELETE, INSERT, REPLACE e UPDATE | – | Parcial | – | SIM |
EXPLICAR no formato JSON | – | – | – | SIM |
EXPLIAR mais detalhado e consistente para subconsultas | SIM | SIM | – | – |
Rastreamento do otimizador | ||||
Rastreamento do otimizador | – | – | – | SIM |
- Replicação paralela — novo em 10.0; ocorre em três partes:os eventos de replicação são lidos pelo encadeamento de E/S e enfileirados no log de retransmissão, buscados individualmente pelo encadeamento SQL do log de retransmissão e cada evento é aplicado no escravo replicando as alterações no mestre.
- As melhorias de desempenho incluem um melhor subsistema de E/S assíncrono InnoDB no Windows.
- Os índices para o mecanismo MEMORY(HEAP) são mais rápidos. As correções mais recentes foram aplicadas no MariaDB 5.5 e MySQL 5.7.
- O Cache de Chave Segmentado para MyISAM foi adicionado no MariaDB 5.2. Isso melhorou o desempenho em tabelas MyISAM em até 4x.
- A partir da versão 10.0.13, o tamanho de hash ajustável para MyISAM e Aria melhora o tempo de desligamento se você estiver usando muitas tabelas MyISAM/Aria com chaves atrasadas.
- Com a CHECKSUM TABLE usando a opção QUICK a velocidade é melhorada.
- O desempenho foi aprimorado com as conversões do conjunto de caracteres e a remoção de conversões (quando não eram necessárias). A melhoria geral da velocidade é de cerca de 1 a 5%, mas pode ser mais rápida com grandes conjuntos de resultados.
- O pool de threads no MariaDB 5.1/MariaDB 5.5 permite que o MariaDB seja executado com mais de 200.000 conexões, o que melhora a velocidade ao usar muitas conexões.
- Melhorias na conexão do cliente adicionadas a partir do MariaDB 10.1 e MariaDB 10.2.
- Algumas melhorias no código DBUG no MariaDB ajudam a tornar o código mais rápido com a depuração compilada, mas não usada.
- Usar o mecanismo de armazenamento Aria usando tabelas temporárias internas permite melhorar o desempenho.
- O conjunto de testes é executado com mais rapidez, mesmo com a lista de testes estendida.
Novos recursos e extensões
Melhores testes
O MariaDB contém mais testes no conjunto de testes do que o MySQL. Testes inválidos e desnecessários foram removidos. Problemas com o conjunto de testes foram corrigidos.
Menos erros
Atualmente, a comunidade MariaDB está alerta e trabalha para corrigir bugs da forma mais rápida e completa possível. Além disso, os avisos do compilador também foram reduzidos como resultado da redução de bugs.
Código aberto
Todo o código-fonte do MariaDB é lançado sob GPL, LGPL ou BSD. Embora o MySQL tenha módulos de código fechado em sua Enterprise Edition, o MariaDB não possui nenhum módulo de código fechado. O MariaDB incluiu todos os recursos de código fechado contidos no MySQL 5.5 Enterprise Edition em sua versão de código aberto. O MariaDB inclui casos de teste para todos os novos bugs corrigidos. O MySQL não fornece casos de teste para bugs corrigidos no MySQL 5.5. O MariaDB torna públicos todos os planos de desenvolvimento futuros, incluindo bugs e suas correções. O MariaDB tem uma grande comunidade e essa comunidade de desenvolvedores inclui uma grande variedade de contribuidores, enquanto todos os commits do MySQL parecem ser de funcionários da Oracle. As bibliotecas cliente MySQL são lançadas sob a licença GPL, que proíbe a vinculação a aplicativos de código fechado. Pelo contrário, MariaDB licencia bibliotecas de cliente sob a licença LGPL, permitindo vincular a software de código fechado.
Problemas de compatibilidade entre MariaDB e MySQL
O MariaDB foi projetado para ser um substituto imediato para o MySQL e era uma bifurcação da base de código original do MySQL. Isso significa que, ao mudar do MySQL para o MariaDB, é um processo relativamente simples. Você simplesmente desinstala o MySQL e instala o MariaDB. Como é uma substituição imediata, não há necessidade de converter nenhum dado. Os desenvolvedores do MariaDB realizam uma mesclagem mensal do código MySQL para garantir que eles permaneçam compatíveis. Existem diferentes incompatibilidades entre as versões do MySQL e do MariaDB, embora as versões sejam projetadas para serem compatíveis por seus respectivos números de versão (por exemplo, MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).
Incompatibilidades entre MariaDB 10.0 e MariaDB 5.5 / MySQL 5.5
- A sintaxe SET OPTION está obsoleta no MariaDB 10.0 e MySQL 5.6. Use apenas SET.
Incompatibilidades entre MariaDB 10.0 e MySQL 5.6
- Todos os binários do MySQL (MySQLd, myisamchk etc.) dão um aviso se alguém usar um prefixo de uma opção (como –big-table em vez de –big-tables). Os binários do MariaDB funcionam da mesma maneira que a maioria dos outros comandos Unix e não dão avisos ao usar prefixos exclusivos.
- MariaDB GTID não é compatível com MySQL 5.6. Isso significa que não se pode ter o MySQL 5.6 como escravo para o MariaDB 10.0. No entanto, o MariaDB 10.0 pode ser escravo do MySQL 5.6 ou de qualquer versão anterior do MySQL/MariaDB.
- A replicação de várias origens do MariaDB 10.0 não é compatível com o MySQL 5.6.
- As colunas dinâmicas do MariaDB 10.0 não são compatíveis com o MySQL 5.6.
- Para fazer CREATE TABLE … SELECT funcionar da mesma maneira na replicação baseada em instrução e em linha, ele é executado por padrão como CREATE OR REPLACE TABLE no escravo. Um benefício disso é que se o escravo morrer no meio de CREATE … SELECT ele poderá continuar.
- Pode-se usar a variável slave-ddl-exec-mode para especificar como CREATE TABLE e DROP TABLE são replicados.
- Veja também uma análise detalhada das diferenças de variáveis do sistema entre o MariaDB 10.0 e o MySQL 5.6.
- O MySQL 5.6 tem o esquema de desempenho habilitado por padrão. Por motivos de desempenho, o MariaDB 10.0 o desabilita por padrão. Você pode habilitá-lo iniciando o MySQLd com a opção –performance-schema.
- O MariaDB 10.0 não é compatível com o plug-in MySQL Memcached.
- Usuários criados com o algoritmo de senha SHA256 do MySQL não podem ser usados no MariaDB 10.0.
- O MariaDB 10.0 não suporta replicação atrasada – MDEV-7145.
Incompatibilidades entre MariaDB 10.1 e MySQL 5.7
- O MariaDB 10.1 não é compatível com o JSON do MySQL 5.7.
- A criptografia InnoDB do MariaDB 10.1 é implementada de forma diferente da criptografia InnoDB do MySQL 5.7.
- O MariaDB 10.1 não suporta os plugins do analisador de texto completo ngram e MeCab – MDEV-10267, MDEV-10268.
- O MariaDB 10.1 não suporta vários gatilhos para uma tabela – MDEV-6112.
- O MariaDB 10.1 não suporta CREATE TABLESPACE para InnoDB.
Incompatibilidades entre MariaDB 10.2 e MySQL 5.7
- Diferenças de variáveis de sistema entre MariaDB 10.2 e MySQL 5.7.
- Diferenças de função entre MariaDB 10.2 e MySQL 5.7.
- Vários acionadores por tabela foram adicionados na versão 10.2
- A criptografia MariaDB InnoDB é implementada de forma diferente da criptografia InnoDB do MySQL 5.7.
- MariaDB armazena JSON como texto verdadeiro, não em formato binário como MySQL. A razão é que nossas funções JSON são muito mais rápidas que as do MySQL, então não precisamos ver a necessidade de armazenar coisas em formato binário, pois adiciona muita complexidade ao manipular objetos JSON.
- O MariaDB 10.2 não é compatível com os plug-ins do analisador de texto completo ngram e MeCab – MDEV-10267, MDEV-10268.
- O MariaDB 10.2 não suporta o plugin MySQL X.
- O MariaDB 10.2 não suporta os espaços de tabela gerais do MySQL.
- Veja também Incompatibilidades entre MariaDB 10.1 e MySQL 5.7.