Como copiar o banco de dados MySQL inteiro entre dois servidores?

2

Existe uma conexão muito boa entre as duas máquinas (MySQL 5.5.28):

mysqldump -u root -p'password' --all-databases | ssh root@SERVERNAME mysql -u root -p'password' --all-databases

Então AFAIK este oneliner é como fazer um dump do MySQL no servidor # A e depois copiar o dump para o servidor # B e depois "importá-lo no servidor # B.

Q1 : nada mais fica no banco de dados? Esta é a maneira mais rápida de fazer isso? :) ou há algum mais rápido? Alguma coisa pode dar errado quando isso acontece?

Q2 : como posso testar se o envio foi bem-sucedido no servidor # B? Como verificar se os dois DBs são "bit-a-bit" iguais?

    
por gasko peter 12.03.2013 / 08:18

1 resposta

1

Em primeiro lugar, você deve estar ciente de que é muito importante usar os mecanismos de armazenamento que você usa.

Vamos supor que ambos os seus servidores mysql possuem a mesma versão. Então você poderia usar mysqlhotcopy para tabelas MyISAM. Isso deve ser muito rápido, mas essa abordagem é restrita a tabelas MyISAM. Como o mysqlhotcopy copia os arquivos diretamente, você pode responder com facilidade a sua pergunta, se os dois bancos de dados forem "bit-by-bit" iguais, com a ajuda de diff .

INNODB é o mecanismo de armazenamento padrão da versão 5.5.5. Se você usar o mecanismo de armazenamento INNODB, a situação será diferente. Nesse caso, você não pode usar mysqlhotcopy e você fica com mysqldump .

Algumas coisas podem dar errado se você usar mysqldump . Por exemplo, se o banco de dados no servidor # A tiver uma visualização para uma tabela inexistente, o mysql tentará criar uma visualização para uma tabela inexistente no lado direito do seu canal e falhará. Você pode evitar um aborto em tais casos usando a opção --force .

mysql --force ...

Eu copiei um banco de dados mysql inteiro com mysqldump e comparei dumps de ambos os servidores e descobri que os dumps diferem apenas no time stamp. Isso pode ser uma solução para você.

Você também deve dar uma olhada nas outras opções de mysqldump . Por exemplo eu penso em

--add-drop-database
--add-drop-table
--single-transaction    ( for transactional tables only (like INNODB))
    
por 18.04.2013 / 14:58

Tags