Pages

quarta-feira, 15 de janeiro de 2014

Copiando uma base MySQL de um servidor para outro. Clonar (duplicar) base de dados

Aqui vai uma dica das minhas horas “brincando” como sysadmin. Normalmente para gerar uma cópia do seu banco de dados mysql, você usa o mysqldump:

$ mysqldump -u usuario -p banco > copia_do_banco.sql

Para passar o arquivo copia_do_banco.sql para outro servidor basta usar sftp/ssh:

$ scp copia_do_banco.sql usuario@outro_server.com:/backup

Para subir:

$ mysql -u usuario -p banco < copia_do_banco.sql

Se você estiver no console do mysql pode optar por:

mysql> USE banco;
SOURCE copia_do_banco.sql


Creio que todo DBA ou Sysadmin sabe disso. Mas temos outros formas de se fazer isto, basta usarmos alguns recursos disponível no shell *nix.
Podemos executar estes mesmo comando em uma só linha, esta forma só deve ser usada em VPN ou redes seguras:

$ mysqldump -u usuario -p banco | mysql -h outro_server banco -u usuario -p

Se você não tem acesso remoto ao banco de dados, podemos usar o ssh:

$ mysqldump -u usuario -p banco | ssh usuario@outro_server.com mysql -u usuario -p banco

Você ainda pode copiar apenas uma tabela do banco para um servidor remoto:
$ mysqldump -u usuario -p banco tabela | ssh usuario@outro_server.com mysql -u usuario -p banco

Estes são alguns exemplos que dá pra fazer com o shell *nix. Prefiro o velho shell e indispensável à sistemas que prometem o mundo.




Imagine que vc possua dois servidores MySQL, sendo que um deles chamaremos de ORIGEM (onde estão os dados de origem) e o outro que chamaremos de DESTINO (onde os dados serão copiados).

Para clonar uma base de dados MySQL localizado num servidor de ORIGEM para um servidor DESTINO, basta digitar o comando no servidor de DESTINO:

mysqladmin create NOME_DO_BANCO_DESTINO -u USUARIO_DESTINO --password=SENHA_DESTINO && mysqldump -h SERVIDOR_ORIGEM -u USUARIO_ORIGEM --password=SENHA_ORIGEM NOME_DO_BANCO_ORIGEM --add-drop-table --add-locks --extended-insert --single-transaction --quick --lock-tables=false | mysql -u USUARIO_DESTINO --password=SENHA_DESTINO NOME_DO_BANCO_DESTINO

Obviamente, se houver necessidade de duplicar a base de dados num mesmo servidor MySQL, basta que o SERVIDOR_ORIGEM e SERVIDOR_DESTINO sejam omitidos, e que o nome do banco de dados DESTINO seja diferente do de ORIGEM. O primeiro trecho do código, onde inicia com mysqladmin e termina em && deverá ser eliminado se o servidor de DESTINO já contiver o banco a ser criado, caso contrário ocorrerá um erro e todo o script será interrompido.

Referência:

http://stackoverflow.com/questions/25794/mysql-copy-duplicate-database

0 comentários:

Postar um comentário