Migração MySQL 5.7 para 8.0 no Azure: Guia completo
Publicado em Fevereiro 2026 | Por Okeh | ... visualizações
⚠️ Aviso importante: A Microsoft cobrará $0.07 por vCore/hora por extended support do MySQL 5.7 a partir de 1º de abril de 2026. Você tem até 31 de março de 2026 para fazer a migração.
Se você utiliza Azure Database for MySQL Flexible Server com a versão 5.7, recebeu uma notificação da Microsoft sobre a necessidade urgente de atualização. A versão 5.7 atingiu o fim do suporte e, para continuar utilizando-a, você precisará pagar uma taxa adicional. Este guia apresenta tudo que você precisa saber para planejar e executar essa migração com sucesso.
Por que a mudança é urgente?
A Microsoft implementou uma política de cobranças para versões não suportadas:
- 1º de março de 2026: Início automático do extended support (período de graça)
- 1º de abril de 2026: Início da cobrança ($0.07 por vCore/hora)
- Impacto financeiro: Para uma instância com 2 vCores, isso significa ~R$ 3.000+ por mês em custos adicionais
A recomendação clara da Microsoft é: atualize para MySQL 8.0 antes de 31 de março de 2026 para evitar cobranças.
Principais diferenças: MySQL 5.7 vs 8.0
✅ Melhorias no MySQL 8.0
1. Performance e Velocidade
- Mais rápido: Melhorias significativas no execution plan e query optimization
- InnoDB melhorado: Buffer pool mais eficiente, locking reduzido
- JSON: Suporte nativo para operações JSON muito mais otimizado
2. Segurança Aprimorada
- MySQL 5.7: Suporte para criptografia, mas com limitações
- MySQL 8.0: Criptografia de dados em repouso e em trânsito mais robusta
- Gerenciamento de credenciais: Melhor isolamento e controle de senhas
- Autenticação: SHA2 como padrão (mais seguro que MySQL Native Password)
3. Funcionalidades Novas
- Window Functions: Análises avançadas sem subconsultas complexas
- Common Table Expressions (CTE): Queries mais legíveis e eficientes
- Generated Columns: Colunas calculadas automaticamente
- Partial Revokes: Controle de acesso mais granular
- Expression Indexes: Índices em expressões, não apenas colunas
4. Compatibilidade e Conformidade
- SQL Standard: Melhor conformidade com padrões ANSI SQL
- Deprecações: Remoção de sintaxes obsoletas (que podem afetar seu código)
⚠️ Funções Removidas no MySQL 8.0:
RAND() - Não pode ser usado em índices gerados. Alternativa: usar UUIDs ou sequências.
-- ❌ MySQL 5.7 - Funciona
CREATE INDEX idx_random ON tabela(RAND());
-- ✅ MySQL 8.0 - Use UUID
CREATE INDEX idx_id ON tabela(id);
SCHEMA() e DATABASE() - Comportamento mudou com contextos diferentes.
-- MySQL 5.7 - Retornava schema atual
SELECT SCHEMA();
-- MySQL 8.0 - Pode retornar NULL em certos contextos
-- Recomendado: USE database_name ou database().schema_name
SQL_CALC_FOUND_ROWS e FOUND_ROWS() - Removidas completamente.
-- ❌ MySQL 5.7 - Funciona
SELECT SQL_CALC_FOUND_ROWS * FROM usuarios LIMIT 10;
SELECT FOUND_ROWS(); -- Retorna total de registros
-- ✅ MySQL 8.0 - Use duas queries
SELECT COUNT(*) as total FROM usuarios;
SELECT * FROM usuarios LIMIT 10;
INTO OUTFILE/INFILE - Restrições de segurança aumentadas.
-- MySQL 5.7 - Mais permissivo
SELECT * INTO OUTFILE '/tmp/usuarios.txt' FROM usuarios;
-- MySQL 8.0 - Requer variável secure_file_priv configurada
-- Recomendado: usar ferramentas externas como mysqldump
GROUP BY sem agregação - Agora obrigatório usar ONLY_FULL_GROUP_BY.
-- ❌ MySQL 5.7 - Funciona (comportamento indefinido)
SELECT id, nome, email FROM usuarios GROUP BY id;
-- ✅ MySQL 8.0 - Erro! Deve agregar ou usar GROUP_CONCAT
SELECT id, GROUP_CONCAT(nome), GROUP_CONCAT(email)
FROM usuarios GROUP BY id;
📚 Referências Oficiais:
| Feature | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| Performance InnoDB | Base | +50% melhor |
| Window Functions | ❌ | ✅ |
| Common Table Expressions | ❌ | ✅ |
| Criptografia padrão | MySQL Native | SHA2 |
| Suporte Microsoft | ❌ Pago | ✅ Gratuito |
Principais Desafios da Migração
🔴 Desafio 1: Incompatibilidades de Código SQL
Problema: MySQL 8.0 removeu suporte para certos sintaxes e comportamentos do 5.7.
Exemplos comuns:
OUTER JOIN com USING sem compatibilidadeQueries com GROUP BY e colunas não agregadasAlgumas funções de string descontinuadas- Mudanças em
CAST()e type coercion
Solução: Teste todas as queries em um ambiente de staging antes da migração. Utilize ferramentas como MySQL Workbench para identificar problemas.
🔴 Desafio 2: Mudanças em Funções e Variáveis
Problema: Algumas funções foram removidas ou tiveram comportamento alterado.
Exemplos:
RAND()em índices não é mais permitido- Variáveis de sistema como
sql_modecom novo padrão - Alterações em como
DATE()eDATETIME()funcionam
Solução: Revise a documentação oficial de "deprecated features" e adapte seu código incrementalmente.
🔴 Desafio 3: Performance Inicial
Problema: Após atualizar, o MySQL 8.0 pode executar queries de forma diferente (às vezes mais lento no início).
Causa: O Query Optimizer do 8.0 é mais agressivo e pode fazer escolhas diferentes no execution plan.
Solução:
- Reconstrua índices:
OPTIMIZE TABLE nome_tabela; - Atualize estatísticas:
ANALYZE TABLE nome_tabela; - Monitore queries lentas com Performance Schema
🔴 Desafio 4: Downtime e Dados em Movimento
Problema: A migração requer um período onde o banco estará em manutenção ou com acesso limitado.
Impacto: Aplicações conectadas podem desconectar durante o upgrade.
Solução:
- Planeje a migração para horários de baixa atividade
- Use Azure Database Migration Service para minimizar downtime
- Implemente circuit breakers na aplicação para reconexão automática
- Teste o restore de backups antes da migração
🔴 Desafio 5: Autenticação e Segurança
Problema: O MySQL 8.0 usa SHA2 como padrão (mais seguro) em vez de MySQL Native Password.
Impacto: Aplicações antigas podem ter dificuldade em conectar.
Solução:
- Atualize drivers/conectores da aplicação
- Configure usuários com SHA2 antes da migração
- Teste conectividade da aplicação em um ambiente clone
Passo a Passo: Como Fazer a Migração
Passo 1: Backup Completo
Primeiro, faça um backup completo do seu banco atual:
az mysql flexible-server backup create \
--resource-group <seu-rg> \
--server-name <seu-servidor> \
--backup-name mysql57-backup-$(date +%Y%m%d)
Passo 2: Teste em Ambiente de Staging
Clone seu servidor Azure para um ambiente de teste:
az mysql flexible-server create \
--resource-group <seu-rg> \
--name <seu-servidor-test> \
--restore-from-server <seu-servidor> \
--version 8.0
Passo 3: Validar Compatibilidade
Execute seus testes de aplicação contra o servidor MySQL 8.0:
- Teste todas as queries críticas
- Verifique relatórios e scripts
- Monitore performance por 24-48 horas
- Valide conectividade com sua aplicação
Passo 4: Atualizar Servidor Produção
Após validação bem-sucedida, atualize seu servidor em produção:
az mysql flexible-server update \
--resource-group <seu-rg> \
--name <seu-servidor> \
--version 8.0
Passo 5: Otimização Pós-Migração
Após a atualização, execute:
-- Conectar ao seu servidor MySQL 8.0
mysql -h <seu-servidor>.mysql.database.azure.com -u <seu-usuario> -p
-- Executar otimizações
OPTIMIZE TABLE sua_tabela;
ANALYZE TABLE sua_tabela;
-- Verificar status
SHOW ENGINE INNODB STATUS;
Checklist: Antes da Migração
- ☐ Identifique a data de vencimento (31 de março de 2026)
- ☐ Faça backup completo do banco em produção
- ☐ Crie servidor de staging com MySQL 8.0
- ☐ Execute suite de testes da aplicação
- ☐ Verifique compatibilidade de queries no log de erros
- ☐ Atualize drivers/conectores (se necessário)
- ☐ Planeje janela de manutenção
- ☐ Comunique com stakeholders sobre o downtime estimado
- ☐ Prepare rollback plan (restaurar backup)
- ☐ Realize dry-run completo antes do dia D
- ☐ Monitore após migração (performance, erros, conectividade)
Impacto Financeiro de Não Migrar
Se você não migrar até 31 de março de 2026, as cobranças começarão:
| Configuração | Custo/Mês (USD) | Custo/Ano (USD) | Custo/Ano (BRL)* |
|---|---|---|---|
| 1 vCore | ~$50 | ~$600 | ~R$ 3.000 |
| 2 vCores | ~$100 | ~$1.200 | ~R$ 6.000 |
| 4 vCores | ~$200 | ~$2.400 | ~R$ 12.000 |
*Conversão aproximada (1 USD = R$ 5,00). Preços podem variar por região. Consulte Azure Pricing para valores exatos.
Conclusão
A migração de MySQL 5.7 para 8.0 no Azure é urgente e necessária até 31 de março de 2026. As boas notícias são:
- O MySQL 8.0 é mais rápido, mais seguro e mais poderoso
- O processo de migração no Azure é relativamente simples
- Você pode testar em um ambiente clone antes de fazer alterações em produção
- O Microsoft Azure fornece documentação e suporte completo
Nossa recomendação: Comece o planejamento imediatamente. Se sua equipe não tem experiência com migrações de banco de dados, considere contratar um especialista para evitar problemas inesperados.
💡 Dica: Se você é cliente da Okeh, entre em contato conosco! Oferecemos serviços especializados em migrações de infraestrutura Azure, incluindo banco de dados. Podemos ajudá-lo a fazer essa transição com segurança e eficiência.