- Início
- Migrar do MySQL 8.0 para o MySQL 8.4
Migrar do MySQL 8.0 para o MySQL 8.4
Regiões
Este recurso está disponível nas seguintes regiões:O MySQL 8.0 atinge seu End of Life (EOL) em 21 de abril de 2026, conforme o anúncio oficial da Oracle. A partir dessa data, a Oracle não disponibiliza mais patches de segurança, correções de bugs ou qualquer tipo de suporte oficial para essa versão da engine.
Sua instância em MySQL 8.0 continuará disponível e funcionando normalmente na Magalu Cloud durante o período de suporte estendido descrito na Política de Versões, porém recomendamos fortemente a migração para o MySQL 8.4, versão LTS (Long-Term Support) atual, que continua recebendo patches de segurança e suporte oficial.
Consulte a Política de Versões para ver as datas de início e final de suporte de cada versão do MySQL na Magalu Cloud.
Esta página descreve o processo recomendado de migração, dividido em três etapas:
- Verificação de compatibilidade
- Criação da nova instância MySQL 8.4
- Migração dos dados com mydumper/myloader
Se a sua instância de origem ou de destino for um cluster Multi-AZ, leia com atenção a seção Migrar para um cluster Multi-AZ antes de iniciar a carga dos dados. Executar o mydumper/myloader da mesma forma que em uma instância single-instance pode deixar as réplicas stand-by do cluster fora de sincronia.
Verificar a compatibilidade
Antes de iniciar a migração, é necessário verificar se o seu banco de dados possui itens incompatíveis com a versão 8.4. Algumas mudanças relevantes entre as versões incluem:
- Remoção da terminologia antiga de replicação (
MASTER/SLAVE). - Substituição do plugin de autenticação
mysql_native_passwordpelocaching_sha2_passwordcomo padrão. - Alterações em privilégios de usuário e variáveis de sistema removidas ou renomeadas.
Para identificar automaticamente os pontos do seu banco que precisam de ajuste, utilize a Upgrade Checker Utility do MySQL Shell (util.checkForServerUpgrade()), executada a partir de uma Máquina Virtual ou outro host com acesso à sua instância. O usuário utilizado precisa ter os privilégios RELOAD, PROCESS e SELECT:
mysqlsh usuario@ip_privado_da_instancia_80:3306 -- util check-for-server-upgrade --target-version=8.4.0
- Substitua
usuariopelo usuário administrador da instância de origem. - Substitua
ip_privado_da_instancia_80pelo IP privado da instância MySQL 8.0.
A saída lista os itens verificados em três categorias:
- Errors: precisam ser corrigidos obrigatoriamente antes do upgrade.
- Warnings: podem impactar o funcionamento da aplicação após o upgrade e devem ser avaliados.
- Notices: pontos informativos que exigem checagem manual (não são detectados automaticamente).
Corrija todos os itens reportados como Error — e avalie os Warnings — antes de seguir para a etapa de migração.
Sempre que possível, execute a verificação de compatibilidade e um teste de migração completo em um ambiente de homologação antes de aplicar o processo na sua instância de produção.
Criar a nova instância MySQL 8.4
Crie uma nova instância MySQL na versão 8.4 na Magalu Cloud. Essa instância receberá os dados migrados da sua instância atual em 8.0.
Você pode criar a instância pelo Console ou pela CLI:
mgc dbaas instances create \
--availability-zone="br-se1-a" \
--instance-type-id="b9f1e3a0-3081-4c62-87b9-0ea56aec65dd" \
--name="dbaas-name-84" \
--password="dbaas-password" \
--user="dbaas-user" \
--volume.size=20 \
--volume.type="CLOUD_NVME15K" \
--engine-id="e1db7c95-83bf-40c4-aaee-9e1d35659a0a"
Substitua:
- o valor de
namepelo nome que deseja dar à nova instância. - os valores de
userepasswordpelas credenciais do usuário administrador da nova instância. - o valor de
instance-type-idpelo ID do tipo de instância desejado. - o valor de
engine-idpelo ID da engine MySQL 8.4 (veja como encontrá-lo logo abaixo).
Para mais detalhes sobre os parâmetros disponíveis, consulte Criar uma instância MySQL. Você pode encontrar o engine-id correspondente à versão 8.4 com o comando:
mgc dbaas engines list --status=ACTIVE
Se a sua instância 8.0 utiliza um grupo de parâmetros customizado, crie e associe um grupo equivalente à nova instância 8.4 antes de iniciar a carga dos dados, já que alguns parâmetros podem ter nomes ou comportamentos diferentes entre as versões.
Se a sua instância de origem é um cluster Multi-AZ (ou se você deseja alta disponibilidade na nova versão), crie o destino também como um cluster, usando mgc dbaas clusters create no lugar de mgc dbaas instances create:
mgc dbaas clusters create \
--instance-type-id="9595d737-78be-4eaf-af96-7bed88f7edc2" \
--name="dbaas-cluster-name-84" \
--password="dbaas-password" \
--user="dbaas-user" \
--volume.size=20 \
--volume.type="CLOUD_NVME15K" \
--engine-id="e1db7c95-83bf-40c4-aaee-9e1d35659a0a"
Substitua os mesmos valores indicados acima. Para mais detalhes, consulte a seção Cluster (multi-zonas) da página de criação de instâncias. Se este for o seu caso, siga também as orientações da seção Migrar para um cluster Multi-AZ mais adiante nesta página.
Migrar os dados com mydumper/myloader
Recomendamos o uso do mydumper/myloader, ferramenta open-source de backup lógico multi-thread para MySQL, que costuma ser significativamente mais rápida que o mysqldump tradicional em bases de maior volume.
Pré-requisitos
Instale o mydumper (o pacote já inclui o myloader) em uma Máquina Virtual ou outro host com acesso de rede às duas instâncias — a de origem (8.0) e a de destino (8.4).
wget -qO- 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1D357EA7D10C9320371BDD0279EA15C0E82E34BA&exact=on' | sudo tee /etc/apt/keyrings/mydumper.asc
echo "deb [signed-by=/etc/apt/keyrings/mydumper.asc] https://mydumper.github.io/mydumper/repo/apt/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mydumper.list
sudo apt update && sudo apt install -y mydumper
wget -O GPG-KEY-MyDumper "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x79EA15C0E82E34BA"
sudo rpm --import GPG-KEY-MyDumper
sudo tee /etc/yum.repos.d/mydumper.repo <<'EOF'
[mydumper]
name=MyDumper
baseurl=https://mydumper.github.io/mydumper/repo/yum/$releasever
enabled=1
gpgcheck=1
EOF
sudo yum install -y mydumper
Para outras distribuições, containers ou compilação a partir do código-fonte, consulte a documentação oficial de instalação.
Exportar os dados da instância 8.0
Execute o mydumper apontando para a instância de origem. Inclua as flags --triggers, --events e --routines para garantir que triggers, events e stored procedures/functions também sejam exportados:
mydumper \
--host=ip_privado_da_instancia_80 \
--user=usuario \
--ask-password \
--outputdir=./backup-mysql80 \
--threads=4 \
--triggers \
--events \
--routines \
--compress
Substitua:
ip_privado_da_instancia_80pelo IP privado da instância de origem.usuariopelo usuário administrador da instância de origem.
Ajuste --threads de acordo com a quantidade de vCPUs disponíveis na máquina cliente e na instância de origem. Para bases grandes, prefira executar a exportação em um horário de baixo tráfego, já que a leitura de grandes volumes de dados consome I/O e rede da instância de origem.
Para mais opções (filtragem por banco/tabela, chunking de tabelas grandes, compressão, etc.), consulte a documentação oficial de uso do mydumper.
Restaurar os dados na instância 8.4
Com o backup gerado, utilize o myloader apontando para a nova instância 8.4:
myloader \
--host=ip_privado_da_instancia_84 \
--user=usuario \
--ask-password \
--directory=./backup-mysql80 \
--threads=4
Substitua:
ip_privado_da_instancia_84pelo IP privado da nova instância de destino.usuariopelo usuário administrador da nova instância.
Para mais opções — como lidar com tabelas já existentes na instância de destino (-o/--drop-table) ou restaurar em um banco com nome diferente (-B/--database) — consulte a documentação oficial de uso do myloader.
Acelerar a carga desabilitando o redo log
O myloader oferece a flag --disable-redo-log, que desabilita o redo log do InnoDB (via ALTER INSTANCE DISABLE INNODB REDO_LOG) durante a restauração. Como o myloader deixa de escrever no redo log e no doublewrite buffer, é comum observar uma carga de 3 a 4 vezes mais rápida.
myloader \
--host=ip_privado_da_instancia_84 \
--user=usuario \
--ask-password \
--directory=./backup-mysql80 \
--disable-redo-log
Só desabilite o redo log para a carga inicial de um banco vazio — nunca em uma instância que já contenha dados que você precisa manter, ou que esteja em produção. Segundo a documentação oficial do MySQL, com o redo log desabilitado qualquer interrupção inesperada do servidor (queda de energia, crash do processo, etc.) pode causar perda de dados e corrupção da instância. Em uma carga inicial isso é apenas um contratempo — se acontecer, basta recriar a instância e refazer a carga —, mas em um banco com dados relevantes o mesmo incidente destrói a base.
Como a instância 8.4 desta migração acabou de ser criada e ainda está vazia, usar essa flag é seguro neste contexto específico. Depois de concluída a restauração, o myloader reabilita o redo log automaticamente ao final do processo.
O número de threads recomendado depende de o redo log estar ativo ou não:
- Redo log desabilitado: o gargalo deixa de ser a escrita no redo log e passa a ser a vazão do disco, então não é necessário um número alto de threads.
- Redo log habilitado (caso da instância já conter dados, ou de qualquer restauração em produção): utilize
--threadsigual à quantidade de vCPUs da máquina que está executando omyloader.
Usar um arquivo de configuração (.cnf)
Em vez de repetir as opções em cada execução, você pode consolidá-las em um arquivo de configuração e reutilizá-lo com --defaults-file. Isso também é a forma recomendada de definir variáveis de sessão do mydumper/myloader — como manter o log binário ativo durante a carga, o que é obrigatório ao migrar para um cluster (veja a seção Migrar para um cluster Multi-AZ logo abaixo).
Crie um arquivo mydumper.cnf:
[mydumper]
host=ip_privado_da_instancia_80
user=usuario
threads=4
[myloader]
host=ip_privado_da_instancia_84
user=usuario
threads=4
[myloader_session_variables]
SQL_LOG_BIN=1
Substitua os valores de host e user de cada seção pelos dados da respectiva instância (origem em [mydumper], destino em [myloader]). E utilize o arquivo nos dois comandos:
mydumper --defaults-file=./mydumper.cnf --ask-password --outputdir=./backup-mysql80 --triggers --events --routines --compress
myloader --defaults-file=./mydumper.cnf --ask-password --directory=./backup-mysql80
Para a lista completa de seções e variáveis disponíveis, consulte a documentação oficial de configuração do mydumper.
Validar a migração
Após a restauração, valide a consistência dos dados entre a instância de origem (8.0) e a de destino (8.4):
- Compare a lista de bancos e tabelas em ambas as instâncias (
SHOW DATABASES;/SHOW TABLES;). - Compare a contagem de linhas por tabela (
SELECT COUNT(*) FROM nome_da_tabela;). - Compare o checksum das tabelas com o comando nativo do MySQL
CHECKSUM TABLE, executado em ambas as instâncias:
CHECKSUM TABLE nome_do_banco.nome_da_tabela;
Se os valores retornados forem iguais em ambas as instâncias, os dados foram migrados corretamente.
Migrar para um cluster Multi-AZ
Um cluster Multi-AZ do DBaaS Magalu Cloud é composto por 1 instância primária (leitura e escrita, porta 3306) e 2 réplicas stand-by (somente leitura, porta 3307), mantidas em sincronia via replicação em grupo (Group Replication), com failover automático.
Rodar o mydumper/myloader em um cluster exatamente como em uma instância single-instance pode deixar as réplicas stand-by inconsistentes ou fora de sincronia com a primária, comprometendo a alta disponibilidade do cluster. Siga os cuidados abaixo antes de migrar dados para um cluster.
O Group Replication propaga as transações entre os membros do grupo através do log binário e de GTIDs — por isso, a documentação oficial do MySQL sobre os requisitos do Group Replication exige que todos os membros operem com log_bin habilitado, gtid_mode=ON, enforce_gtid_consistency=ON e binlog_format=ROW. Isso já é garantido pelo DBaaS Magalu Cloud nas instâncias que compõem um cluster — o risco está em desabilitar o log binário durante a carga, uma otimização comum de performance em restaurações single-instance (por exemplo, definindo SQL_LOG_BIN=0 na sessão do myloader). Em um cluster, isso impede que as linhas inseridas pelo myloader na primária sejam certificadas e propagadas para as réplicas stand-by, deixando-as sem os dados restaurados.
Checklist para migrar para um cluster
- Aponte sempre para a instância primária. Execute o
myloadercontra a porta 3306 (leitura e escrita) do cluster de destino — nunca contra a porta 3307 (réplicas, somente leitura). - Mantenha o log binário ativo durante toda a carga. Se estiver usando um arquivo de configuração, garanta que a seção
[myloader_session_variables]não desabilite o log binário:Evite qualquer tutorial ou otimização de terceiros que sugira[myloader_session_variables]SQL_LOG_BIN=1SET SESSION SQL_LOG_BIN=0para acelerar a restauração — em uma instância single-instance isso é apenas um ganho de performance, mas em um cluster quebra a replicação para as réplicas stand-by. - Coloque o cluster em modo de importação antes da carga, usando o comando oficial da CLI Magalu Cloud:
Substituamgc dbaas clusters start-import-mode --cluster-id="id_do_cluster_84"
id_do_cluster_84pelo ID do cluster de destino. - Execute o
myloadernormalmente, conforme descrito nas seções anteriores. - Retorne o cluster ao modo normal de operação ao final da carga:
mgc dbaas clusters stop-import-mode --cluster-id="id_do_cluster_84"
- Valide também as réplicas, não só a primária. Conecte-se em cada réplica stand-by (porta 3307) e repita as checagens de contagem de linhas e
CHECKSUM TABLEdescritas na seção anterior, além de confirmar que não há atraso de replicação (lag) pendente antes de considerar a migração concluída.
Etapas pós-migração
- Atualize a connection string das suas aplicações para apontar para a nova instância MySQL 8.4;
- Monitore o desempenho e os logs de acesso da nova instância após a virada;
- Somente após validar que a aplicação está estável na nova instância, considere excluir a instância antiga em 8.0 — essa ação é irreversível.
Em caso de dúvidas
Se tiver qualquer dúvida durante o processo de avaliação ou migração, abra um Ticket de suporte e nossa equipe irá te auxiliar.