13 min de leitura · Guia técnico
Checklist para Migração de Banco de Dados MySQL é um guia essencial para garantir transferências seguras e sem perda de dados. A migração de bancos MySQL exige planejamento cuidadoso e verificações específicas para evitar erros comuns. Este checklist abrange desde o diagnóstico prévio até a validação pós-migração, minimizando riscos e tempo de inatividade.
Pré-requisitos
- Acesso SSH aos servidores de origem e destino
- Permissões de administrador no MySQL em ambos os servidores
- Espaço em disco suficiente no servidor de destino (pelo menos 1,5x o tamanho do banco atual)
- Cliente MySQL instalado em ambos os servidores
- Versões compatíveis do MySQL (verifique a matriz de compatibilidade)
- Janela de manutenção programada (para bancos em produção)
Diagnóstico pré-migração do banco MySQL
Antes de iniciar qualquer migração de banco de dados MySQL, é fundamental realizar um diagnóstico completo do ambiente atual. Esta etapa previne problemas durante a transferência e garante que você tenha todas as informações necessárias para uma migração bem-sucedida.
Verificando a versão e o tamanho do banco de dados
Identifique a versão exata do MySQL no servidor de origem e destino para garantir compatibilidade:
mysql -V
Verifique o tamanho total dos bancos de dados que serão migrados:
SELECT table_schema AS "Database Name",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.TABLES
GROUP BY table_schema;
Para verificar o tamanho de tabelas específicas em um banco de dados:
SELECT table_name AS "Table Name",
ROUND((data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.TABLES
WHERE table_schema = "nome_do_banco"
ORDER BY (data_length + index_length) DESC;
Verificando a integridade do banco de dados
Execute verificações de integridade nas tabelas para identificar problemas antes da migração:
mysqlcheck -u root -p --all-databases
Para verificar e reparar tabelas específicas:
mysqlcheck -u root -p --check --repair nome_do_banco
Verifique se há tabelas corrompidas que precisam de atenção especial:
SELECT table_schema, table_name
FROM information_schema.TABLES
WHERE engine='InnoDB' AND table_schema NOT IN
('mysql','information_schema','performance_schema');
Preparação do ambiente para migração MySQL
A preparação adequada do ambiente é crucial para uma transferência de banco de dados MySQL sem problemas. Esta fase envolve configurar corretamente os servidores de origem e destino, garantindo que todas as condições necessárias sejam atendidas.
Configurando o servidor de destino
Verifique se o servidor de destino tem as mesmas configurações de charset e collation:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
Ajuste os parâmetros de configuração no my.cnf do servidor de destino para comportar o tamanho do banco:
max_allowed_packet = 256M
innodb_buffer_pool_size = 1G # Ajuste para 50-70% da RAM disponível
innodb_log_file_size = 256M
tmp_table_size = 64M
max_heap_table_size = 64M
Após modificar o arquivo de configuração, reinicie o serviço MySQL:
systemctl restart mysql
Verificando permissões e acessos
Certifique-se de que o usuário MySQL tem permissões adequadas para exportar e importar dados:
SHOW GRANTS FOR 'usuario'@'localhost';
Se necessário, crie um usuário específico para a migração com privilégios adequados:
CREATE USER 'migracao'@'%' IDENTIFIED BY 'senha_segura';
GRANT ALL PRIVILEGES ON *.* TO 'migracao'@'%';
FLUSH PRIVILEGES;
Atenção: Após a migração, revogue esses privilégios amplos e configure permissões mais restritas.
Processo de backup e exportação do banco de dados
O processo de exportação é um passo fundamental na migração de bancos MySQL. Uma exportação correta garante que todos os dados, estruturas e procedimentos sejam transferidos adequadamente para o novo ambiente.
Criando backup completo com mysqldump
Para bancos com tabelas InnoDB, use a opção --single-transaction para evitar bloqueios:
mysqldump -u root -p --single-transaction --routines --triggers --events --all-databases > full_backup.sql
Para exportar um banco específico com todas as suas estruturas:
mysqldump -u root -p --single-transaction --routines --triggers --events --databases nome_do_banco > banco_backup.sql
Para bancos grandes, comprima o arquivo de backup para economizar espaço:
mysqldump -u root -p --single-transaction --routines --triggers --events nome_do_banco | gzip > banco_backup.sql.gz
Exportando com configurações específicas de charset
Para garantir que a codificação de caracteres seja preservada durante a migração:
mysqldump -u root -p --single-transaction --routines --triggers --events --default-character-set=utf8mb4 nome_do_banco > banco_backup_utf8mb4.sql
Para bancos que usam diferentes conjuntos de caracteres, especifique o charset correto:
mysqldump -u root -p --single-transaction --routines --triggers --events --default-character-set=latin1 nome_do_banco > banco_backup_latin1.sql
Transferência e importação segura dos dados
A transferência e importação dos dados MySQL requer cuidados específicos para garantir que o processo ocorra sem corrupção ou perda de informações. Esta etapa deve ser executada com atenção aos detalhes de configuração e monitoramento.
Transferindo arquivos de backup entre servidores
Use SCP para transferir o arquivo de backup de forma segura:
scp banco_backup.sql usuario@servidor_destino:/caminho/para/destino/
Para arquivos grandes compactados:
scp banco_backup.sql.gz usuario@servidor_destino:/caminho/para/destino/
Alternativamente, use rsync para transferências mais robustas que podem ser retomadas:
rsync -avz --progress banco_backup.sql usuario@servidor_destino:/caminho/para/destino/
Importando o banco de dados no servidor de destino
Crie o banco de dados no servidor de destino (se não existir):
mysql -u root -p -e "CREATE DATABASE nome_do_banco CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
Importe o backup não compactado:
mysql -u root -p nome_do_banco < banco_backup.sql
Para arquivos compactados:
gunzip < banco_backup.sql.gz | mysql -u root -p nome_do_banco
Para importações de bancos muito grandes, use o paginador pv para monitorar o progresso:
pv banco_backup.sql | mysql -u root -p nome_do_banco
Validação pós-migração e verificação de integridade
A validação pós-migração é essencial para garantir que todos os dados foram transferidos corretamente e que o banco de dados está funcionando conforme esperado no novo ambiente. Esta fase de verificação previne problemas futuros e confirma o sucesso da migração.
Verificando a integridade dos dados migrados
Compare o número de tabelas e registros entre os bancos de origem e destino:
-- No servidor de origem:
SELECT table_name, table_rows
FROM information_schema.tables
WHERE table_schema = 'nome_do_banco'
ORDER BY table_name;
-- No servidor de destino (execute o mesmo comando e compare os resultados)
Verifique a integridade das tabelas no servidor de destino:
mysqlcheck -u root -p --check nome_do_banco
Execute consultas de amostragem em tabelas críticas para verificar se os dados estão corretos:
-- Exemplo para uma tabela de usuários
SELECT COUNT(*) FROM usuarios;
SELECT * FROM usuarios ORDER BY id DESC LIMIT 10;
Testando funcionalidades e desempenho
Verifique se as stored procedures, triggers e eventos foram migrados corretamente:
-- Verificar procedures
SHOW PROCEDURE STATUS WHERE Db = 'nome_do_banco';
-- Verificar triggers
SHOW TRIGGERS FROM nome_do_banco;
-- Verificar eventos
SHOW EVENTS FROM nome_do_banco;
Compare o desempenho de consultas críticas entre os ambientes:
-- Ative o log de consultas lentas temporariamente
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
-- Execute suas consultas críticas e depois verifique o log
-- Normalmente em /var/log/mysql/mysql-slow.log
Problemas comuns e como resolver
Sintoma: Erro "ERROR 1153: Got a packet bigger than 'max_allowed_packet'"
Causa: O tamanho máximo de pacote configurado no MySQL é menor que o tamanho dos dados sendo transferidos.
Solução: Aumente o valor de max_allowed_packet no my.cnf do servidor de destino para 256M ou mais, e reinicie o MySQL. Alternativamente, use a opção --max_allowed_packet=256M ao executar o mysqldump.
Sintoma: Caracteres especiais aparecem corrompidos após a migração
Causa: Incompatibilidade de charset entre os servidores de origem e destino.
Solução: Verifique e ajuste os charsets usando as opções --default-character-set durante a exportação e importação. Se o problema persistir, você pode precisar converter as tabelas usando ALTER TABLE tabela CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Sintoma: Timeout durante a importação de bancos grandes
Causa: Configurações de timeout muito restritivas ou recursos insuficientes no servidor.
Solução: Aumente os valores de wait_timeout e interactive_timeout no my.cnf. Considere dividir o backup em partes menores usando a opção --where do mysqldump para exportar tabelas individualmente.
Sintoma: Stored procedures ou triggers não funcionam após a migração
Causa: Permissões insuficientes ou problemas na definição de DEFINER.
Solução: Verifique se o usuário tem o privilégio SUPER. Se necessário, atualize o DEFINER das rotinas usando mysqldump com --routines --triggers e depois edite o arquivo SQL para substituir o DEFINER antigo pelo novo antes de importar.
Sintoma: Erro "Access denied" durante a importação
Causa: O usuário MySQL não tem permissões suficientes no servidor de destino.
Solução: Verifique e conceda os privilégios necessários ao usuário com GRANT ALL PRIVILEGES ON nome_do_banco.* TO 'usuario'@'localhost'; FLUSH PRIVILEGES;
Perguntas frequentes sobre checklist para migração de banco de dados MySQL
Qual é o método mais seguro para migrar um banco de dados MySQL?
O método mais seguro é usar mysqldump com opções como --single-transaction para InnoDB, garantindo consistência dos dados. Sempre faça um backup completo antes da migração e teste o backup em um ambiente de homologação para validar a integridade dos dados.
Como evitar perda de dados durante a migração do MySQL?
Para evitar perda de dados, sempre crie backups completos antes de iniciar, use a opção --single-transaction para tabelas InnoDB, verifique a integridade do backup antes da restauração e implemente um período de manutenção para evitar modificações durante o processo.
Quais são os erros mais comuns na migração de bancos MySQL?
Os erros mais comuns incluem incompatibilidade de versões do MySQL, problemas de codificação de caracteres (charset), falta de espaço em disco no destino, timeout durante transferências grandes e problemas de permissão no servidor de destino.
É possível migrar um banco MySQL sem downtime?
Sim, é possível usando replicação master-slave. Configure o servidor de destino como slave do servidor de origem, aguarde a sincronização completa e depois faça o switch. Para bancos menores, o mysqldump com --single-transaction também minimiza o downtime.
Como resolver problemas de codificação (charset) após migração MySQL?
Para resolver problemas de charset, use as opções --default-character-set na exportação e importação, especificando o mesmo charset. Se já ocorreu o problema, você pode converter usando ALTER DATABASE e ALTER TABLE com CHARACTER SET e COLLATE para ajustar a codificação.
Conclusão
- Sempre realize um diagnóstico completo do banco de dados antes de iniciar qualquer processo de migração MySQL, verificando tamanho, integridade e configurações de charset.
- Utilize as opções corretas do mysqldump como --single-transaction, --routines e --triggers para garantir que todos os componentes do banco sejam migrados adequadamente.
- Implemente um processo de validação pós-migração rigoroso, comparando contagens de registros, testando funcionalidades críticas e verificando o desempenho no novo ambiente.
Precisa de ajuda com migração de bancos de dados MySQL?
A AviraHost oferece serviços especializados de migração de bancos de dados MySQL, garantindo transferências seguras e sem perda de dados para seus projetos. Nossa equipe técnica pode auxiliar em todo o processo, desde o planejamento até a validação final.