que é mais rápido mysqldump / restore ou alter table?

2

Eu tenho bancos de dados InnoDB e eles estão usando o mesmo arquivo ibdata, o tamanho deste ibdata é de cerca de 250G. Agora eu tenho um desses DBs em torno de 100G. Meu gerente me pediu para mover este banco de dados para outro servidor e usar innodb_file_per_table.
agora eu não posso deixar o sistema desligado por um longo tempo. então eu preciso do seu conselho, por favor, o que é mais rápido:

  • mysqldump -username -pmypassword –extended-insert ––disable-keys ––dick MyDb > Mydb.sql e, em seguida, no segundo servidor mysql -ususername -ppass mydb
  • OU para copiar o arquivo ibdata para meu outro servidor e passar por cima de todas as tabelas e fazer isso:
    1. ALTER TABLE nome_da_tabela DESATIVAR TECLAS;
    2. ALTER TABLE mecanismo table_name = myisam;
    3. ALTER TABLE mecanismo table_name = innodb;
    4. ALTER TABLE table_name ativa as TECLAS;

se você tiver uma idéia melhor, por favor, compartilhe conosco!
Obrigado pela sua ajuda

    
por Alaa Alomari 26.09.2011 / 13:22

2 respostas

2

Copiar arquivos ibdata está repleto de perigos. Importantes bits de metadados podem ser armazenados em outros arquivos, como ib_logfile0 e ib_logfile1 (essa não é uma lista abrangente) e as configurações no novo servidor (como o tamanho desses dois arquivos de log) precisam ser exatamente iguais às do servidor antigo . Se você errar ou errar copiando um dos arquivos, o novo servidor não será iniciado e você terá que lidar com as mensagens de erro úteis do MySQL no log de erros.

Xtrabackup lida com tudo isso para você. Depois que você usá-lo para despejar seus dados e "preparar", você pode fazer uma cópia de arquivo direto para o novo servidor e iniciá-lo com o novo arquivo ibdata. A etapa "preparar" leva um tempo significativo.

No entanto, desde que você mencionou que o banco de dados que você está movendo é apenas 100GB do arquivo ibdata de 250GB, eu suspeito que ele será mais rápido usando o método mysqldump simplesmente porque ele só precisa transferir 100GB de dados em vez de 250GB. >

Você pode canalizar a saída do mysqldump diretamente para o mysql para evitar ter que salvar o dump em disco assim:

mysqldump -uusername -pmypassword MyDB | mysql -h server2 -uusername -pmypassword MyDB

O cliente mysql tem uma opção -C que ativa a compactação se ambas as extremidades o suportarem. Basta colocá-lo antes da opção -h. A transferência pela rede provavelmente será a parte mais lenta de toda a operação. Se o seu servidor não suporta compressão, você pode fazer a transferência via ssh com a opção -C:

mysqldump -uusername -pmypassword MyDB | ssh -C server2 "mysql -uusername -pmypassword MyDB"

Último pensamento: O tempo que levei para escrever isso provavelmente é mais longo do que os dois métodos juntos, a menos que você tenha uma rede de 10MB / s. Começar. : -)

    
por 26.09.2011 / 18:26
0

Copiar os arquivos de dados físicos é sempre mais rápido do que exportar / importar os dados reais; o primeiro requer apenas E / S de disco, enquanto o segundo também requer que os dados sejam processados pelo mecanismo do banco de dados.

Além disso, os dados exportados (em formato de texto) geralmente são muito maiores que os arquivos de dados binários, e transferi-los para o novo servidor exigirá mais tempo (e largura de banda, se você estiver fazendo isso pela rede).

    
por 26.09.2011 / 13:29