Fork me on GitHub
Você esta em:Home » Implementação » Saiba como migrar um grande volume de dados para o RDS

Saiba como migrar um grande volume de dados para o RDS

Tutorial passo a passo de como migrar um banco de dados Mysql com mais de 150MB via SSH para o RDS da Amazon

How do you transfer AWS RDS bank Mysql to a different AWS account

Olá pessoal, depois de uns 3 dias consegui migrar um banco de dados com mais de 150MB para o RDS da Amazon rs.

Primeiro tentei fazer da forma normal, fazendo backup do bando e enviando pelo Mysql Administrator, mas foi frustante pois já se tinham passado 2 dias rs e eu não havia conseguido enviar um banco 100% para o RDS, além do processo ter demorado umas 7h ficaram faltando tabelas no RDS, possivelmente devido a algum problema de transmissão. Dai fui para o Google pesquisar outros meios, pois tinha que existir outra maneira para enviar essa porra! rs

Bem depois de ler alguns tutos e dicas descrevo abaixo passo a passo de como enviar um banco de dados de um servidor para o EC2 e depois enviar do EC2 para o RDS. O processo todo demorou uns 20min e o processo de envio do banco não durou mais que 7min rs brincadeira né!

Requisitos básicos

Possuir conhecimentos de administração Linux e Mysql e ter acesso ao SSH do site que irá ser migrado.

Etapa 1 (Criação do SQL e compactação)

Primeiramente entre via SSH no site que contém o Mysql instalado com o banco a ser transportado. No meu caso caso sair do IDC Alog, nesse meu servidor da Alog possuía além do LAMP o WHM, mas nem utilizei o WHM nesse tuto.

Após logado fui dentro da minha pasta public_html e criei uma pasta chamada /migrar(Esta pasta precisa ficar dentro da public para que no EC2 eu possa dar um wget e fazer download do mesmo, mas vi que existem outros métodos que descreveria mais embaixo no final desse artigo!), dentro dessa pasta já tendo posse do nome do banco, usuário do banco, e senha do usuário do banco, executei o seguinte comando para gerar o sql com os dados do banco.

mysqldump -h EnderecoHost -u UsuarioBanco -p – -single-transaction NomeBanco > data.sql

PS: Os traços acima do single são juntos, mas editor esta add um ponto. Outra coisa, você pode executar o comando acima já na instancia que ele ira ficar caso vc permita no security groups de sua instancia a permissão de acessar o banco por essa instancia.

Ao executar esse comando o mysql irá solicitar a senha do usuário do banco de dados e irá rodar o processo que dentro dessa mesma pasta irá criar o arquivo data.sql com todos os dados do banco de dados.

Você pode ver o arquivo gerado e seu tamanho executando o comando ls -lh 

Agora vamos compactar esses dados executando dentro dessa mesma pasta o comando:

tar -zcvf NomDoZip.tar.gz data.sql
A opção “z” (zipped) do tar funciona tanto na criação quanto na extração. Com essa opção criamos o arquivo Tar.GZ

Pronto! O processo no servidor antigo já foi! Agora vamos ao outro servidor(EC2) para executar um wget para realizar o download do mesmo!

Etapa 2 (transferencia e descompactação)

Bem já nesse servidor(EC2) após logado no SSH precisamos criar uma pasta que irá conter o banco de dados que será feito o download.

Atenção!!!!! Leia abaixo!

obs: Essa pasta não precisa ficar em endereço público como feito no outro server, na verdade aconselho fortemente que vc add um pasta abaixo do public_html ou como no meu caso utilizo o Nginx, coloco abaixo da pasta html. Assim ninguém terá acesso a esse arquivo publicamente! Já no caso do outro server o seu bkp do banco esta em um endereço público para que vc possa realizar o download dele aqui nesse servidor. É fortemente recomendável que você apos baixe o arquivo, volte a servidor antigo e exclua o banco de dado da pasta /migrar, pois senão o Google pode indexa-lo e vc estará exporto a invasões com o seu banco aberto a todos para download!

Antes de excluir o banco do servidor antigo vamos criar a pasta em /usr/share/nginx/migrar e dentro dessa pasta executar o comando:

wget www.seusite.com.br/migrar/data.tar.gz

Com isso você estará fazendo o download do arquivo para o seu EC2.

Feito o download vc pode executar o ls -lh para ver se o banco bate com o mesmo tamanho do que esta em seu outro server. Tudo certo? Se sim vamos continuar e fazer a descompactação do arquivo data.tar.gz executando:

tar -vzxf data.tar.gz 

Feito isso o arquivo já se encontra descompactado em sua pasta atual. Se vc executar ls -lh verá que existem 2 arquivos o data.tar.gz e agora o data.sql

E assim vamos partir para nossa última etapa que é o levantamento do banco que se encontra como arquivo em nosso EC2 para o RDS.

Etapa 3 (Envio para o RDS)

Caso vc não tenha instalado o Mysql nessa sua instancia do EC2, vamos instala-lo somente para termos acesso a execução do comando dele executando o comando:

sudo yum install mysql

Após instalado não esquece de subir o serviço de Mysql com o comando:

/etc/init.d/mysqld start   ou   service mysqld start

obs: (Após vc reiniciar o servidor EC2 o Mysql não irá subir automaticamente e nem precisa, pois iremos usar o RDS e não o Mysql local em nosso EC2. Em meus teste o RDS é muito melhor do que usar no EC2 o mysql instalado e configurado, na verdade é até uma questão de segurança manter o banco de dados fora do servidor da aplicação. Mas esse tutorial server também para caso vc queira usar no Mysql localmente, para isso basta mudar dos dados de conexão abaixo de importação do sql)

Agora estamos chegando ao final, execute o comando abaixo para importar o banco de dados para o RDS

mysql -u user -p -h dominioRDSamazon.dasd5s5sd5.sa-east-1.rds.amazonaws.com nomedobanco < data.sql

Ou também caso o banco esteja em localhost, pode-se executar dessa forma

shell> mysql -uuser -ppassword -e “create database NOME_Banco”
shell> mysql -uuser -ppassword db_name < db_name.sql

Caso tenha sucesso, aguarde que o banco já será levantando.

OBS: Verifique se no security groups do RDS ele possua acesso, você pode em security groups do RDS importar os mesmos critérios de segurança que você criou para o EC2, pois caso contrário vc não conseguira acesso nem pelo Mysql Query Browser e nem pelo seu Magento.

Agora configure os dados em seu arquivo local.xml do Magento e veja se funcionou! Caso não tenha funcionado verifique o seguinte:

  • Seu RDS esta tendo acesso pelo Mysql Query Browser?
  • Você editou as urls básicas do Magento na tabela core_config_data? As colunas são web/unsecure/base_url e a web/secure/base_url

Outras dicas

1 – Reindexar os Magento pelo SSH

Após tudo ok, reindexe suas urls do Magento, dentro da pasta do Magento execute o comando:

php shell/indexer.php reindexall

Ao executar a saida será +/- assim em seu console
Product Attributes index was rebuilt successfully
Product Prices index was rebuilt successfully
Catalog URL Rewrites index was rebuilt successfully
Product Flat Data index was rebuilt successfully
Category Flat Data index was rebuilt successfully
Category Products index was rebuilt successfully
Catalog Search Index index was rebuilt successfully
Stock Status index was rebuilt successfully
Tag Aggregation Data index was rebuilt successfully
Default Values index was rebuilt successfully

2 – Aceite <?= no seu php.

Por default acho que o php não esta pronto para rodar um echo assim <?=”olá mundo”?> pois necessariamente precisa add o <?php. Para aceitar o encurtamento altere no seu php.ini(mesmo que esteja usando o Nginx) em /etc/php.ini, adicione ou altere ele para

short_open_tag=On

Leia mais em: http://php.net/manual/pt_BR/ini.core.php

3 – Erro no novo Magento importado

Verifique se a compilação esta ativa e desative-a veja mais em: http://www.deivison.com.br/blog/2012/11/05/como-tratar-erros-no-magento/

4 – Permissões no Magento.

Execute as permissões corretas.

Para mudar a permissão dos arquivos: $ find . -type f -exec chmod 644 {} \;
Para mudar a permissão das pastas: $ find . -type d -exec chmod 755 {} \;

$chmod -R o+w media var
$chmod o+w app/etc

Outras observações:

Sobre como foi feito a passagem do arquivo de um server para o outro, eu escolhi add o bkp numa pasta aberta ao público no servidor antigo (A proposito se vc fez isso, vc já excluiu ela?)

Existem outros meios como pegar por SCP

Utilizando o comando scp

O comando scp é muito utilizado quando você quer copiar dados entre servidores. Por exemplo: eu tenho o servidor X, estou logado nele e preciso copiar a pasta /var/lib/arquivos para o servidor Y. Como fazer isso!?Aqui vai uma dica:$ scp /var/lib/arquivos root@192.168.100.1:/home/damascenoExplicação:Estou copiando a pasta /var/lib/arquivos, do servidor que estou logado, para o servidor com IP 192.168.100.1, utilizando neste servidor o login de root. Estou definindo a pasta de destino /home/damasceno, onde será copiada a pasta arquivos.

Este comando é bem interessante. Caso se interesse, dê uma olhada no manual dele com o comando:

$ man scp

OBS: Existe a possibilidade de vc já passar o senha no scp, seria +/- assim:
root:senhadoroot@seusite.com.br
Espero ter ajudado!
Fontes:

Sobre o Autor

Designer, Web Developer & Linux Administrator

Meu nome é Deivison Arthur, tenho 29 anos, sou Administrador Linux, Analista de Sistema, Webdesigner e Pesquisador. há mais de dez anos. Nasci no Rio de Janeiro, atualmente trabalho como Gerente de Tecnologia e E-commerce at Grupo FFernandes e Freelancer nas horas vagas. Desenvolvimento em Joomla, Wordpress, Drupal, Magento e outros GPLs...

Quantidade de Artigos : 114

Comentários (3)

Enviar Comentário

© 2012 Powered By Wordpress, Deivison Arthur

Ir para cima