Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender de onde vem o MariaDB e por que ele se parece com o MySQL
- Comparar JSON, sequences, RETURNING, versões e replicação
- Decidir entre MariaDB e MySQL para um projeto novo ou uma migração
Se você já instalou um servidor MySQL em Linux, provavelmente já cruzou com o MariaDB: muitas distribuições e tutoriais instalam um no lugar do outro, e os comandos mysql e mysqldump funcionam nos dois. Isso dá a impressão de que são a mesma coisa.
Não são. O MariaDB começou como fork do MySQL e, a cada versão, ganhou recursos que o MySQL não tem (e vice-versa). Num app simples a diferença passa despercebida; com JSON, replicação ou autenticação, ela aparece.
O que são MySQL e MariaDB?#
MySQL é um banco relacional mantido pela Oracle. O motor de armazenamento padrão é o InnoDB, com transações ACID e bloqueio por linha. Ele tem duas trilhas de versão: LTS, que só recebe correções, e Innovation, que traz recursos novos. As datas de suporte de cada série estão na política de fim de vida da Oracle. Veja o que é MySQL.
MariaDB é um fork do MySQL mantido pela MariaDB Foundation e pela empresa MariaDB. Ele lança versões LTS com regularidade, cada uma com alguns anos de suporte da comunidade, e as versões que não são LTS têm suporte curto. A política de manutenção do MariaDB mostra quais séries estão em suporte.
Repare nos números de versão: um número maior no MariaDB não quer dizer que ele seja "mais novo" que o MySQL, nem que as duas versões se equivalham. Os dois deixaram de acompanhar a mesma numeração há anos, e isso é parte da divergência.
Por que os dois se parecem tanto?#
Porque compartilham a origem. O protocolo de cliente, a maior parte da sintaxe SQL, os utilitários (mysql, mysqldump) e os drivers mais comuns funcionam nos dois. Um app que usa só SELECT, INSERT, índices e transações simples normalmente roda em qualquer um deles sem mudar uma linha.
A própria documentação do MariaDB diz que as versões 10.0 e 10.1 só substituíam o MySQL 5.6 de forma limitada e cita diferenças de implementação. Quanto mais recursos avançados você usa, menor a compatibilidade.
O que mudou entre eles?#
| Critério | MySQL | MariaDB |
|---|---|---|
| Mantenedor | Oracle | MariaDB Foundation e empresa MariaDB |
Tipo JSON |
Formato binário interno, validado na entrada | Alias de LONGTEXT com validação por CHECK |
INSERT ... RETURNING |
Não tem | Sim, desde a 10.5 |
CREATE SEQUENCE |
Não tem | Sim, desde a 10.3 |
| Replicação em cluster | Group Replication | Galera Cluster |
| GTID | Formato do MySQL | Formato próprio, incompatível |
| Autenticação | Tem sha256_password e caching_sha2_password |
Não tem sha256_password; caching_sha2_password só desde a 11.4.9, 11.8.4 e 12.1 |
Três desses pontos merecem mais detalhe.
Como cada um trata JSON?#
No MySQL, a coluna JSON guarda o documento num formato binário interno, valida a entrada e permite buscar chaves sem reler o documento inteiro. Uma entrada inválida falha com erro:
INSERT INTO eventos (dados) VALUES ('[1, 2,');
-- ERROR 3140 (22032): Invalid JSON text: ...No MariaDB, JSON é apenas um alias de LONGTEXT COLLATE utf8mb4_bin, criado por compatibilidade. O valor fica guardado como texto, sem alteração, e a validação vem de uma restrição CHECK incluída automaticamente. As funções JSON_EXTRACT, JSON_VALUE e similares existem nos dois, mas o armazenamento e a comparação não são idênticos, e a própria documentação do MariaDB avisa que ele não suporta os objetos JSON empacotados do MySQL 5.7. Se você move colunas JSON entre os dois, teste as consultas e os índices.
O que o MariaDB tem a mais?#
Duas coisas que quem vem do PostgreSQL ou do Oracle reconhece. A primeira é INSERT ... RETURNING, que devolve as linhas gravadas na mesma consulta:
INSERT INTO usuarios (nome) VALUES ('Ana') RETURNING id, nome;No MySQL, você faz o INSERT e depois lê LAST_INSERT_ID() ou dá um SELECT. A segunda é a sequence, um gerador de números independente de tabela:
CREATE SEQUENCE pedidos_seq START WITH 100 INCREMENT BY 10;
SELECT NEXTVAL(pedidos_seq);
CREATE TABLE pedidos (
id INT PRIMARY KEY DEFAULT NEXTVAL(pedidos_seq),
total DECIMAL(10,2)
);O MariaDB também tem um tipo VECTOR(N) para busca por similaridade, disponível desde a 11.7. O MySQL tem um tipo VECTOR próprio, mas confira na documentação da sua edição quais funções de distância e índices ele inclui antes de migrar código de embeddings.
E a replicação?#
Aqui a incompatibilidade é explícita. Segundo a página de compatibilidade do MariaDB, o GTID dele não é compatível com o do MySQL (um MySQL 5.6 não funciona como réplica de um MariaDB 10.0) e as variáveis de sistema são diferentes. A mesma página diz que o Group Replication do MySQL é incompatível com o Galera Cluster do MariaDB. Se o seu plano é um cluster multi-nó ou réplicas de leitura, escolha o motor primeiro e monte a replicação com as ferramentas dele.
Dá para trocar um pelo outro?#
Dá, com cuidado. A migração costuma ser mais simples quando o app usa só SQL padrão. Os pontos que mais quebram são colunas JSON, contas de usuário com autenticação sha256_password, performance_schema e sys, replicação e views criadas por versões antigas. Depois de subir o MariaDB sobre um diretório de dados do MySQL, ainda é preciso rodar o mysql_upgrade (chamado mariadb-upgrade nas versões recentes) para atualizar as tabelas de sistema.
Um roteiro seguro: exporte com mysqldump, restaure num servidor de teste do outro motor, rode a suíte de testes e compare o plano de consultas com EXPLAIN. Veja também como fazer backup de um banco de dados.
Qual escolher?#
Escolha MySQL se sua stack já o exige, se a documentação do software (CMS, ERP, framework) cita MySQL primeiro ou se você quer a trilha LTS da Oracle.
Escolha MariaDB se você quer RETURNING, sequences, Galera ou o VECTOR do MariaDB, ou se sua distribuição Linux já o instala por padrão.
Software popular aceita os dois. O WordPress, por exemplo, recomenda versões LTS em suporte de ambos. Nesse caso, escolha o que seu provedor oferece e mantenha-se numa versão em suporte.
Em qualquer dos casos, escolha uma série LTS em suporte: uma versão que já passou do fim de suporte não recebe mais correções de segurança. Se a dúvida é mais ampla (relacional ou NoSQL, PostgreSQL ou MySQL), veja qual banco de dados escolher e PostgreSQL ou MySQL.
Como fazer isso na Square Cloud#
A Square Cloud oferece hospedagem de MongoDB, PostgreSQL, MySQL e Redis a partir do plano Standard; o Hobby não inclui hospedagem de banco. Dos dois motores comparados aqui, o disponível é o MySQL, sempre em uma versão recente.
Você cria o banco no painel, e ele é provisionado em segundos no mesmo datacenter das suas aplicações (cerca de 1 ms de latência média). O TLS é obrigatório, com o certificado baixado no painel. Você tira snapshots manuais quando quiser, e todo plano com bancos inclui também um snapshot automático diário.
Você conecta a aplicação com a URL de conexão que o painel entrega. Se o seu app só usa SQL comum, ele roda no MySQL hospedado sem mudanças. Se ele depende de RETURNING ou sequences, ajuste o código antes, porque o MySQL não tem esses recursos. Galera também fica de fora: o banco é um nó único. Veja a página de hospedagem de MySQL.
Hospedagem de bancos
MongoDB, PostgreSQL, MySQL e Redis no mesmo datacenter do app
Perguntas frequentes
MariaDB é a mesma coisa que MySQL?
Não. O MariaDB começou como fork do MySQL, mas hoje é um projeto separado. Os dois falam SQL parecido e usam protocolo de cliente semelhante, porém têm recursos, tipos e comportamentos que já diferem.
MariaDB é um substituto direto do MySQL?
Só em parte. A documentação do MariaDB diz que, a partir da versão 10.0, migrar do MySQL costuma ser fácil, mas lista incompatibilidades em JSON, GTID, autenticação e replicação em grupo. Teste a migração antes.
O WordPress funciona com MariaDB e com MySQL?
Sim. O manual de hospedagem do WordPress recomenda versões LTS em suporte dos dois bancos.
Qual é mais rápido, MariaDB ou MySQL?
Depende da consulta, dos índices e da versão. Benchmarks genéricos pouco ajudam. Rode EXPLAIN e um teste com os seus dados nos dois antes de decidir.
Mais em Bancos de dados
Ver todos os 24 artigos- Quanto custa um banco de dados na nuvem?Um banco de dados na nuvem custa de zero a centenas de dólares por mês. Veja o que define o preço: instância, disco, tráfego, snapshots e como estimar o seu.
- Como hospedar um banco de dados (e conectar sua aplicação)Para hospedar um banco de dados, escolha o motor, crie a instância, guarde a string de conexão em variável de ambiente e teste a conexão. Veja o passo a passo.
- O que é Redis e para que serveRedis é um banco de dados em memória que guarda pares chave-valor e estruturas de dados. Veja como funciona, para que serve e quando não usar.
- Como fazer backup do banco de dados (MySQL, PostgreSQL, MongoDB)Faça backup de MySQL, PostgreSQL e MongoDB com mysqldump, pg_dump e mongodump, e restaure o dump. Veja os comandos, como verificar e os erros comuns.