Migrando um banco de dados MySQL grande de um servidor para outro (via shell linux)

1

Eu tenho um grande banco de dados Mysql (acima de 10gb). Estou mudando de um provedor de hospedagem para outro (ambos no CentOS).

Minha ideia era fazer isso:

Servidor antigo:

tar -cvf backup.tar backup.sql

Novo servidor:

wget oldserver.com/backup.tar
tar -xvf backup.tar

A minha pergunta é, como posso gerar o arquivo backup.sql para que possa ser facilmente restaurado no novo servidor via ssh?

    
por Andres SK 22.11.2010 / 23:14

3 respostas

3

Use o mysqldump .

The mysqldump client is a backup program originally written by Igor Romanenko. It can be used to dump a database or a collection of databases for backup or transfer to another SQL server (not necessarily a MySQL server). The dump typically contains SQL statements to create the table, populate it, or both. However, mysqldump can also be used to generate files in CSV, other delimited text, or XML format.

    
por 22.11.2010 / 23:18
1

Se todas as suas tabelas forem MyISAM, você pode simplesmente copiar todo o diretório (através de rsync ou algum outro utilitário de transferência de arquivos) e você não precisa descarregar e tar qualquer coisa. Você poderia usar o algoritmo de compressão do rsync:

rsync -avz mysql_dir user@remotehost:~/

    
por 22.11.2010 / 23:35
1

Se um tempo de inatividade muito pequeno for um problema e você tiver um banco de dados muito ativo, convém considerar a configuração do novo servidor como escravo do servidor antigo. Siga a documentação de replicação do MySQL , configurando o novo servidor como escravo. Então, quando você estiver pronto para fazer a mudança, você apenas começará a ter seus aplicativos acessando o novo servidor em vez do antigo - talvez colocando o endereço IP em um para o outro, reconfigurando seu aplicativo para o novo servidor endereço, etc ...

No entanto, isso geralmente é um exagero para a maioria dos sites. Normalmente você pode levar alguns minutos de inatividade para fazer o movimento, usando um mecanismo como o que segue ...

Comece apenas com a cópia inicial enquanto o MySQL está sendo executado no servidor de origem (e no destino), com algo como:

rsync -avzP --delete /var/lib/mysql/ root@destination:/var/lib/mysql.source/

Eu o executo em um destino de "mysql.source" para ter certeza de que, se cometer um erro, não estou sobrescrevendo o servidor ativo com dados do novo servidor. Dependendo da velocidade da rede, isso pode levar muito tempo (digamos, se você estiver passando de um provedor para outro em um link de 1 mbps).

Quando isso terminar, execute-o novamente para transferir os arquivos alterados. Isso deve ser muito mais rápido.

Depois de voltar a executá-lo algumas vezes, provavelmente será algo muito pequeno, talvez alguns segundos.

Neste ponto, você está pronto para o rsync final. Para fazer isso:

ON OLD SERVER:
/etc/init.d/mysql stop
rsync -avzP --delete /var/lib/mysql/ root@destination:/var/lib/mysql.source/

ON NEW SERVER:
cd /var/lib
mv mysql mysql.orig
mv mysql.source mysql
/etc/init.d/mysql start

Claro, isso pressupõe que você já copiou o seu my.cnf e fez os ajustes apropriados se o sistema for maior ou menor que o antigo (alterando os tamanhos do cache e coisas do tipo).

Se um tempo de inatividade muito pequeno for um problema e você tiver um banco de dados muito ativo, convém considerar a configuração do novo servidor como escravo do servidor antigo. Siga a documentação de replicação do MySQL , configurando o novo servidor como escravo. Então, quando você estiver pronto para fazer a mudança, você apenas começará a ter seus aplicativos acessando o novo servidor em vez do antigo - talvez colocando o endereço IP em um para o outro, reconfigurando seu aplicativo para o novo servidor endereço, etc ...

    
por 23.11.2010 / 04:00