Quero copiar um banco de dados de produção ao vivo no meu banco de dados de desenvolvimento local. Existe uma maneira de fazer isso sem bloquear o banco de dados de produção?
Atualmente, estou usando:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
Mas está bloqueando cada tabela enquanto é executada.
Respostas:
A
--lock-tables=false
opção funciona?De acordo com a página do manual , se você estiver descartando tabelas do InnoDB, poderá usar a
--single-transaction
opção:Para o innodb DB :
fonte
Isso é muito tarde, mas bom para quem está pesquisando o tópico. Se você não está no innoDB e não está preocupado com o bloqueio enquanto despeja, basta usar a opção:
fonte
--single-transaction
.FLUSH TABLES WITH READ LOCK
coisas.A resposta varia dependendo do mecanismo de armazenamento que você está usando. O cenário ideal é se você estiver usando o InnoDB. Nesse caso, você pode usar o
--single-transaction
sinalizador, que fornecerá uma captura instantânea coerente do banco de dados no momento em que o despejo começa.fonte
--skip-add-locks
ajudou para mimfonte
--skip-add-locks
tornaria a restauração do dump mais rápida. Esta não é uma resposta correta.Para despejar tabelas grandes, você deve combinar a opção --single-transaction com --quick.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
fonte
Para tabelas do InnoDB, use flag
--single-transaction
DOCS do MySQL
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
fonte
--skip-lock-tables
.Honestamente, eu configuraria a replicação para isso, como se você não bloqueie tabelas, obterá dados inconsistentes do dump.
Se o despejo demorar mais tempo, as tabelas que já foram despejadas podem ter sido alteradas, juntamente com alguma tabela que está prestes a ser despejada.
Portanto, bloqueie as tabelas ou use replicação.
fonte
Isso é tão tarde em comparação com o cara que disse que estava atrasado quanto a resposta original, mas no meu caso (MySQL via WAMP no Windows 7), eu tive que usar:
fonte
fonte
Ao usar o MySQL Workbench, na Data Export, clique em Opções Avançadas e desmarque as opções "lock-tables".
fonte
Como nenhuma dessas abordagens funcionou para mim, eu simplesmente fiz:
Ele excluirá os comandos
LOCK TABLE <x>
eUNLOCK TABLES
.Nota: Espero que seus dados não contenham essa string!
fonte
Devido a https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables :
fonte
Outra resposta tardia:
Se você está tentando fazer uma cópia quente do banco de dados do servidor (em um ambiente Linux) e o mecanismo de banco de dados de todas as tabelas é MyISAM, você deve usar
mysqlhotcopy
.De acordo com a documentação:
O
LOCK TABLES
tempo depende do tempo em que o servidor pode copiar arquivos MySQL (não faz um despejo).fonte
Hoje mesmo eu enfrentei o mesmo problema, mas não tinha acesso à linha de comando.
então eu importei para o meu ambiente de desenvolvimento. espero que ajude alguém
fonte