Recentemente, desenvolvi um script que gera vários processos para importar tabelas em paralelo usando mysqlimport e um --tab type mysqldump export. No servidor de desenvolvimento ele funciona muito bem e comparado a um tipo de importação padrão mysql db_name < backup.sql, ele reduz o tempo de cerca de 15 minutos para 4 ou 5 minutos.
O problema é que em nosso servidor de produção esse script parece estar bloqueando tabelas em todo o sistema. Ou seja, estou importando um backup para um banco de dados completamente diferente, mas nossas tabelas de aplicativos ativos ainda acabam bloqueadas. Um SHOW PROCESSLIST confirma que as tabelas em nosso banco de dados ativo estão realmente bloqueadas, mas nenhuma consulta INSERT ou UPDATE está sendo executada em nenhuma tabela desse banco de dados.
Por que isso está acontecendo? Existe uma variável de configuração/configuração que eu possa ajustar para evitar que esse bloqueio aconteça?
Se você começar
mysqlimport
com--lock-tables=0
, então não haverá bloqueios.mysqlimport
usaLOAD DATA
em vez deINSERT
/UPDATE
.(A pergunta é sobre
mysqlimport
, e foi respondida. Esta 'Resposta' é sobre o objetivo subjacente, que vou reafirmar.)Como clonar rapidamente um único banco de dados (para um banco de dados com outro nome) em uma única instância do MySQL?
Um pensamento é ter
dev_db
criado e vazio, então faça algo comoRessalvas:
CREATEs
eeDROPs
"bloqueia".FOREIGN KEY
problemas.Ao usar um pipe, o arquivo intermediário não precisa tocar no disco (pelo menos não para *nix OS).