Pergunta

Duplicate possíveis:
Acelerar lixeiras MySQL e importações

mysqldump é razoavelmente rápido, mas despeja de um banco de dados de tamanho médio (20-30 megas) levar vários minutos para carregar usando mysql my_database < my_dump_file.sql

Existem algumas configurações mysql eu posso sintonizar acelerar a carga? Existe uma maneira melhor para carregar dados salvos?

Eu experimentei usando o utilitário mysqlimport com lixeiras baseados em CSV. Estes carga um pouco - mas não significativamente - mais rápido. Estou tentado a simplesmente copiar arquivos de banco de matérias-volta, mas que parece ser uma má idéia.

Foi útil?

Outras dicas

Assumindo que você está usando InnoDB ...

Eu estava na situação de ter uma pilha de arquivos de saída mysqldump existentes que eu queria importar em um tempo razoável. As tabelas (uma por arquivo) eram cerca de 500MB e continha cerca de 5.000.000 de linhas de dados cada. Utilizando os seguintes parâmetros I foi capaz de reduzir o tempo de inserção a partir de 32 minutos para menos de 3 minutos.

innodb_flush_log_at_trx_commit = 2 | innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT

Você também precisa ter uma razoavelmente grande ajuste innodb_buffer_pool_size.

Porque meus inserções fosse um one-off I reverteu as configurações depois. Se você estiver indo para continuar usando-os de longo prazo, verifique se você sabe o que está fazendo.

Eu encontrei a sugestão de utilizar estas definições sobre o Cedric Nilly blogue a explicação detalhada para cada uma das configurações podem ser encontradas na documentação do MySQL .

Certifique-se de que você está usando a opção --opt ao mysqldump quando o dumping. Isto irá usar a granel inserção de sintaxe, adiar atualizações de chave, etc ...


Se você está apenas usando tabelas MyISAM , você pode seguramente copiá-los, parando o servidor, copiando-os para um servidor parado, ea partir disso.

Se você não quer parar o servidor de origem, você pode seguir este:

  1. Obter um bloqueio de leitura em todas as tabelas
  2. Lave todas as tabelas
  3. Copie os arquivos
  4. desbloquear as tabelas

Mas eu tenho certeza que sua cópia-servidor precisa ser interrompido quando você colocá-los no lugar.

Você tem certeza dos dados é sã, e não há quaisquer problemas de desempenho do sistema de arquivos ou do sistema? Vários minutos para um banco de dados meg 20-30 é muito tempo. Eu estou em um MacBook com 2 GB de RAM, um HD de 320 GB eo processador 2.1GHz padrão. Peguei um dos meus bancos de dados para uma referência rápida:

gavinlaking$ du -sm 2009-07-12.glis
74  2009-07-12.glis
gavinlaking$ mysql -pxxx -e "drop database glis"
gavinlaking$ mysql -pxxx -e "create database glis"
gavinlaking$ time mysql -pxxx glis < 2009-07-12.glis 

real    0m17.009s
user    0m2.021s
sys 0m0.301s

17 segundos para um arquivo 74 megabyte. Isso parece bastante ágil para mim. Mesmo que foi 4 vezes maior (tornando-o apenas tímido de 300 megabytes), termina em pouco menos de 70 segundos.

Experimente https://launchpad.net/mydumper - de backup mysql de multi-threaded / restore que é 3x 10x vezes mais rápido que mysqldump http://vbtechsupport.com/1695/

Há um método para usar instantâneos LVM para backup e restauração que pode ser uma opção interessante para você.

Em vez de fazer um mysqldump, considere usar LVM para tirar instantâneos de seus diretórios de dados MySQL. Usando instantâneos LVM permitir que você tenha a capacidade quase em tempo real backup, suporte para todos os mecanismos de armazenamento e recuperação incrivelmente rápido. Para citar o link abaixo,

"O tempo de recuperação é tão rápido como colocar de volta dados e recuperação de acidente MySQL padrão, e pode ser reduzida ainda mais."

http: //www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top