Eu tenho esse imenso despejo de SQL de 32 GB que preciso importar para o MySQL. Eu não tive que importar um dump SQL tão grande antes. Eu fiz o de sempre:
mysql -uroot dbname < dbname.sql
Está demorando muito. Há uma tabela com cerca de 300 milhões de linhas, que chegou a 1,5 milhão em cerca de 3 horas. Parece que tudo levaria 600 horas (24 dias) e é impraticável. Então, minha pergunta é: existe uma maneira mais rápida de fazer isso?
Mais informações / descobertas
- As tabelas são todas do InnoDB e não há chaves estrangeiras definidas. Existem, no entanto, muitos índices.
- Como não tenho acesso ao servidor e ao banco de dados originais, não posso fazer um novo backup nem fazer uma cópia "quente" etc.
- Definir
innodb_flush_log_at_trx_commit = 2
como sugerido aqui parece não melhorar (claramente visível / exponencial). - Estatísticas do servidor durante a importação (do MySQL Workbench): https://imgflip.com/gif/ed0c8 .
- A versão do MySQL é a comunidade 5.6.20.
- innodb_buffer_pool_size = 16M e innodb_log_buffer_size = 8M. Preciso aumentar isso?
Respostas:
Vadim Tkachenko, da Percona, fez esta bela representação pictórica do InnoDB
Você definitivamente precisa alterar o seguinte
Por que essas configurações?
.ibd
arquivos. De acordo com a documentação do MySQLConfiguring the Number of Background InnoDB I/O Threads
, cada thread pode lidar com até 256 pedidos de E / S pendentes. O padrão para o MySQL é 4, 8 para o Percona Server. Max é 64.Reinicie o mysql assim
Isso desativa o buffer de gravação dupla do InnoDB
Importe seus dados. Quando terminar, reinicie o mysql normalmente
Isso reativa o buffer de gravação dupla do InnoDB
De uma chance !!!
NOTA LATERAL: Você deve atualizar para a 5.6.21 para obter os patches de segurança mais recentes .
fonte
Você realmente precisa que todo o banco de dados seja restaurado? Se não, meu 2c:
Você pode extrair tabelas específicas para fazer sua restauração em "chunks". Algo assim:
Fiz isso uma vez e demorou 10 minutos para extrair a tabela de que precisava - minha restauração completa levou 13 a 14 horas, com um dump de 35 GB (gziped).
O parâmetro
/pattern/,/pattern/p
with-n
faz uma fatia "entre os padrões" - incluindo-os.De qualquer forma, para restaurar os 35 GB, usei uma máquina AWS EC2 (c3.8xlarge), instalei o Percona via yum (Centos) e apenas adicionei / alterei as seguintes linhas
my.cnf
:Eu acho que os números são muito altos, mas funcionaram para minha configuração.
fonte
A maneira mais rápida de importar seu banco de dados é copiar os arquivos (.frm, .MYD, .MYI) se MyISAM, diretamente para o / var / lib / mysql / "nome do banco de dados".
Caso contrário, você pode tentar:
mysql > use database_name; \. /path/to/file.sql
Essa é outra maneira de importar seus dados.
fonte
Uma maneira de ajudar a acelerar a importação é bloquear a tabela durante a importação. use a opção --add-locks no mysqldump.
ou você pode ativar alguns parâmetros úteis com --opt, isso ativa várias coisas úteis para o despejo.
Se você tiver outro dispositivo de armazenamento no servidor, use-o - copiar de um dispositivo para outro é uma maneira de acelerar as transferências.
você também pode filtrar tabelas que não são necessárias com --ignore-table
fonte