Descrição do Ambiente:
Servidor Linux Debian 5 com MySQL 5.0.51 para aplicações web (Servidor de produção antigo)
Servidor Linux Debian 6 com MySQL 5.5.30 para aplicações web (Servidor de produção novo)
Vamos ao procedimento de migração:
1. Verifique quais os Schemas que serão migradas
Para verificar os Schemas existentes num banco de dados MySQL, digite o comando abaixo:
1 |
mysql> show databases; |
Logo após isso verificar quais as bases que serão migradas, verifique a coleção de caracteres que é utilizada nos Schemas, com o comando abaixo:
1 |
mysql> select schema_name, default_collation_name, default_character_set_name from information_schema.schemata; |
2. Faça o Backup/Dump dos Schemas
Para fazer o backup dos schemas listados no primeiro passo, execute os comandos abaixo:
1 2 |
root # mysqldump --user=root --password=teste --host=127.0.0.1 --port=3306 --routines --triggers --default-character-set=utf8 joomla > backup_joomla_migraca.sql root # mysqldump --user=root --password=teste --host=127.0.0.1 --port=3306 --routines --triggers --default-character-set=utf8 joomla2 > backup_joomla2_migraca.sql |
3. Depois de efetuado o Backup dos Schemas no Servidor antigo de produção, iremos no Servidor novo de produção, verificar quais schemas ele possui e criar os schemas que iram ser importados para o novo servidor:
Conforme feito no antigo servidor antigo anteriormente, vamos listar os schemas deste novo servidor e depois criar os schemas que serão importados. Segue abaixo os comandos utilizados:
1 2 3 |
mysql> show databases; mysql> CREATE DATABASE `joomla` DEFAULT CHARACTER SET utf8; mysql> CREATE DATABASE `joomla2` DEFAULT CHARACTER SET utf8; |
4. Crie os usuários no novo servidor que iram ser utilizados pelas aplicações web:
Segue abaixo, comandos utilizado para criação dos usuários que iram acessar o banco de dados pelas aplicações:
1 2 |
mysql> GRANT ALL PRIVILEGES ON joomla.* TO 'joomla'@'localhost' IDENTIFIED BY 'teste123'; mysql> GRANT ALL PRIVILEGES ON joomla2.* TO 'joomla2'@'localhost' IDENTIFIED BY 'teste123'; |
5. Depois que criarmos no novo servidor de produção que irá receber os dados do antigo servidor, precisamos transferir os arquivos que foram backpeados no antigo servidor para o novo servidor. Para o exemplo aqui utilizado utilizei o utilitário SCP , mais poderíamos transferir através de FTP ou outro meio de compartilhamento de arquivos.
Segue abaixo, comando utilizado:
1 |
root # scp backup_joomla_migracao.sql backup_joomla2_migracao.sql turbo@192.168.1.68:/home/turbo/ |
6. Agora no novo servidor de produção, faça o importe o arquivo de backup transferido para o mesmo.
Segue abaixo, os comandos utilizados para importar as bases de dados:
1 2 |
root # mysql -u root -p joomla < /home/turbo/backup_joomla_migracao.sql root # mysql -u root -p joomla2 < /home/turbo/backup_joomla2_migracao.sql |
7. Verifique se os dados estão validos e consistentes , verifique o numero de tabelas, índices ou procedimentos armazenados caso sua aplicação utilize.
Servidor antigo de produção:
Servidor novo de produção:
Como verificamos, o numero de objetos do nosso banco de dados no novo servidor de produção está igual ao antigo servidor de produção. Para fazer está verificação utilize o select abaixo, depois de conectado no servidor MySQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SET @nome_do_schema = 'joomla'; Select (select schema_name from information_schema.schemata where schema_name=@nome_do_schema) as "Nome do Banco de dados", (SELECT Round( Sum( data_length + index_length ) / 1024 / 1024, 3 ) FROM information_schema.tables WHERE table_schema=@nome_do_schema GROUP BY table_schema) as "Tamanho do Banco de dados em Mega Bytes", (select count(*) from information_schema.tables where table_schema=@nome_do_schema and table_type='base table') as "Quant. Tabelas", (select count(*) from information_schema.statistics where table_schema=@nome_do_schema) as "Quant. Índices", (select count(*) from information_schema.views where table_schema=@nome_do_schema) as "Quant. Views", (select count(*) from information_schema.routines where routine_type ='FUNCTION' and routine_schema=@nome_do_schema) as "Quant. Funções", (select COUNT(*) from information_schema.routines where routine_type ='PROCEDURE' and routine_schema=@nome_do_schema) as "Quant. Procedimentos", (select count(*) from information_schema.triggers where trigger_schema=@nome_do_schema) as "Quant. Triggers", (select default_collation_name from information_schema.schemata where schema_name=@nome_do_schema)"Default collation do Banco de dados", (select default_character_set_name from information_schema.schemata where schema_name=@nome_do_schema)"Default charset do Banco de dados", (select sum((select count(*) from information_schema.tables where table_schema=@nome_do_schema and table_type='base table')+(select count(*) from information_schema.statistics where table_schema=@nome_do_schema)+(select count(*) from information_schema.views where table_schema=@nome_do_schema)+(select count(*) from information_schema.routines where routine_type ='FUNCTION' and routine_schema=@nome_do_schema)+(select COUNT(*) from information_schema.routines where routine_type ='PROCEDURE' and routine_schema=@nome_do_schema)+(select count(*) from information_schema.triggers where trigger_schema=@nome_do_schema))) as "Total de Objetos do Banco de dados" LIMIT 0, 1000\G |
Bom pessoal, espero que esse procedimento de migração possa ajudar a Desenvolvedores e DBAs para migrar suas aplicações para ambientes melhores. Lembrando que este procedimento também se aplica em outros ambientes como Windows ou FreeBSD/Unix. Qualquer dúvida na utilização dos passos do post, favor comentar. Que a Graça e Paz estejam com todos.