← Voltar ao blog
MariaDB 27 de outubro de 2026 11 min de leitura

Migrar do MySQL para o MariaDB: o guia que eu queria ter lido antes

Como migrar do MySQL 5.7 ou 8.x para o MariaDB com segurança: escolha de versão, incompatibilidades reais (JSON, collations, autenticação), dump, validação e virada com replicação.

Migrar do MySQL para o MariaDB: o guia que eu queria ter lido antes

"MariaDB é só trocar o binário, né?" Já foi. Do MySQL 5.5 para o MariaDB 5.5 era quase isso. Hoje, com o MySQL 8 e o MariaDB 11/12, são dois bancos irmãos que cresceram em direções diferentes. A migração continua tranquila, mas não é cega. Aqui vai o roteiro que eu uso.

Dois racks de servidores ligados por uma ponte de luz transportando dados

Passo 0: para qual versão?

Produção pede versão com suporte longo (LTS). Expliquei as opções em MariaDB 10.6 chegou ao fim de vida: para qual versão migrar?. Resumo: escolha uma LTS ativa e evite rolling releases em sistema crítico.

O mapa da migração

1. Inventário      → versões, tamanho, features usadas
2. Compatibilidade → JSON, collations, auth, SQL específico
3. Ensaio          → dump/restore em homologação + testes da aplicação
4. Sincronização   → MariaDB como réplica do MySQL
5. Virada          → para escrita, aponta a aplicação, monitora
6. Rollback pronto → plano B testado

Passo 1: inventário

SELECT VERSION();
SELECT table_schema, engine, COUNT(*) tabelas,
       ROUND(SUM(data_length+index_length)/1024/1024) mb
FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','sys','information_schema','performance_schema')
GROUP BY table_schema, engine;

-- colunas JSON (atenção especial)
SELECT table_schema, table_name, column_name
FROM information_schema.columns WHERE data_type = 'json';

-- collations do MySQL 8
SELECT DISTINCT table_collation FROM information_schema.tables
WHERE table_collation LIKE '%0900%';

Passo 2: as incompatibilidades que mordem

Vindo do MySQL 5.7

Geralmente o caminho mais suave. O MariaDB nasceu desse código e a maioria das aplicações roda sem mudança. Ainda assim, faça o ensaio.

Vindo do MySQL 8.x

  • Arquivos de dados não são compatíveis. Esqueça copiar o datadir. Do MySQL 8 a migração é lógica (dump e restore).
  • JSON: no MySQL é um tipo binário; no MariaDB, JSON é um alias para LONGTEXT com validação JSON_VALID. As funções JSON comuns existem nos dois, mas teste as consultas que usam operadores -> e ->> e índices em colunas geradas.
  • Collations utf8mb4_0900_*: padrão do MySQL 8. Versões recentes do MariaDB reconhecem esses nomes e mapeiam para equivalentes; em versões antigas o restore falha. Na dúvida, troque no dump.
  • Autenticação caching_sha2_password: padrão do MySQL 8. Confira o suporte na versão de MariaDB escolhida; o caminho mais simples é recriar os usuários no destino com o plugin nativo do MariaDB.
  • Diferenças de SQL e otimizador: consultas com hints específicos do MySQL e algumas funções novas podem se comportar diferente. Só teste com a carga real revela.

Passo 3: dump e restore

# no MySQL de origem (sem as bases de sistema)
mysqldump --single-transaction --routines --triggers --events \
  --databases loja financeiro > dump.sql

# se o destino não aceitar as collations 0900
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql

# no MariaDB de destino
mariadb < dump.sql

Não leve o schema mysql no dump: as tabelas de usuários e privilégios são diferentes. Exporte as permissões e recrie:

-- na origem, para cada usuário
SHOW GRANTS FOR 'app'@'%';

-- no destino
CREATE USER 'app'@'%' IDENTIFIED BY 'senha_forte';
GRANT SELECT, INSERT, UPDATE, DELETE ON loja.* TO 'app'@'%';

Base grande? Use ferramentas paralelas de dump lógico (como o mydumper) para não passar o fim de semana olhando barra de progresso.

Passo 4: validar antes de comemorar

-- contagem de linhas por tabela, nos dois lados
SELECT COUNT(*) FROM loja.pedidos;

-- checksum (compare origem e destino)
CHECKSUM TABLE loja.pedidos, loja.clientes;

E o mais importante: rode a suíte de testes da aplicação e as consultas mais pesadas, capturadas do slow log, contra o MariaDB. Compare tempos e planos com EXPLAIN.

Passo 5: virada com pouca parada

Para não parar o sistema durante o restore, configure o MariaDB como réplica do MySQL a partir da posição registrada no dump. A replicação MySQL → MariaDB é suportada em vários cenários, mas confira a combinação exata de versões e use o formato de binlog ROW. Quando a réplica alcançar a origem:

  1. Coloque a aplicação em modo leitura (ou pare a escrita).
  2. Confirme que a réplica está sem atraso.
  3. Pare a replicação e aponte a aplicação para o MariaDB.
  4. Monitore erros e latência nas primeiras horas.

Passo 6: rollback

Migração sem plano de volta é aposta. Guarde o MySQL original intacto até ter certeza, e decida antes qual é o critério para voltar (erro X, latência acima de Y).

E depois? Aproveite o que o MySQL não tem

Migrou? Agora vem a parte divertida: tabelas temporais, SEQUENCE, RETURNING, thread pool gratuito, Galera Cluster e vetores para IA. Está tudo em /mariadb.


Sobre o autor: Alexandre Almeida é MariaDB Ambassador no Brasil, autor do livro Aprendendo MySQL e trabalha com bancos de dados há mais de 30 anos.

Fontes: MariaDB Knowledge Base: Moving from MySQL to MariaDB, MariaDB versus MySQL Compatibility, JSON Data Type e Replication Compatibility (mariadb.com/kb). Documentação do MySQL 8.4: mysqldump e Authentication Plugins. Imagem: ilustração gerada por IA.