MYSQL Dump apenas algumas linhas

96

Estou tentando fazer um dump do mysql de algumas linhas em meu banco de dados. Posso então usar o dump para fazer upload dessas poucas linhas em outro banco de dados. O código que tenho está funcionando, mas despeja tudo. Como posso fazer com que o mysqldump descarregue apenas certas linhas de uma tabela?

Aqui está o meu código:


mysqldump --opt --user=username --password=password lmhprogram myResumes  --where=date_pulled='2011-05-23' > test.sql
Shattuck
fonte

Respostas:

142

Apenas corrija sua --whereopção. Deve ser uma cláusula SQL WHERE válida, como:

--where="date_pulled='2011-05-23'"

Você tem o nome da coluna fora das aspas.

AJ.
fonte
1
Obrigado fez exatamente o que eu precisava. Obrigado pela ajuda!
Shattuck de
@AJ, ótima informação! Obrigado!
Roman Newaza
2
Para a condição IN , podemos simplesmente usar --where="id IN(1,2,6,10)". Onde id é a coluna da tabela. Ref --where
Yogesh
9
Apenas uma nota para alguém como eu usando isso para canalizar um grande datadump para outro servidor que quebrou no meio, se você não especificar --no-create-infojunto com sua cláusula where, o novo dump recriará a tabela e excluirá os dados já transferidos! Pode ser óbvio, mas já me pegou duas vezes.
georgiecasey de
Observe que o problema não era que o nome da coluna estivesse fora das aspas. Este é um comando shell, portanto, você precisa escrever a sintaxe shell para a string date_pulled='2011-05-23'. Isso significa que você precisa colocar aspas ou escapar dos caracteres de aspas simples, então eles são incluídos na string em vez de serem interpretados como aspas na sintaxe do shell. Adicionar aspas duplas ao redor da coisa toda faz isso, mas também faria --where=date_pulled="'2011-05-23'"(ou --where=date_pulled=\'2011-05-23\', ou até mesmo --where=date_pulled"'"2011-05-23"'").
Ben
32

Você precisa citar a cláusula "where".

Experimentar

mysqldump --opt --user=username --password=password lmhprogram myResumes  --where="date_pulled='2011-05-23'" > test.sql
Neville Kuyt
fonte
1
Isso era exatamente o que eu precisava. Outra pessoa respondeu logo antes de você e eu selecionei sua resposta, mas eu votei contra você pela ajuda.
Shattuck de
1
Existe outra maneira de usar a consulta como esta: CREATE TABLE new_table AS (SELECT * FROM myResumes WHERE where = date_pulled = '2011-05-23'); Então você pode simplesmente exportar esta tabela via mysqldump.
Vinayagam de
1

Use este código para linhas específicas da tabela, usando a condição LIKE.

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
Rokonz Zaz
fonte