Despejo do MySQL por consulta

220

É possível fazer mysqldumppor solteiro SQL query?

Quero despejar todo o banco de dados, como phpmyadminacontece quando você exporta paraSQL

Jakub Arnold
fonte

Respostas:

285

não mysqldump, mas mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

você pode redirecioná-lo para um arquivo, se desejar:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Atualização: a postagem original perguntou se ele poderia despejar do banco de dados por consulta. O que ele perguntou e o que ele quis dizer eram diferentes. Ele realmente queria apenas mysqldump todas as tabelas.

mysqldump --tables myTable --where="id < 1000"
Zak
fonte
22
como restaurar este arquivo txt despejado?
Vivek S
3
para aqueles que tentam a abordagem mysql -e. Eu tive que personalizar um pouco o script para trabalhar para mim. Este requer que você digite a senha do sql ao executar. mysql -e "selecione * da tabela WHERE query = 'asdasd'" -u raiz -p --database = DBNAME> text.txt
text.txt RichardW11 7/12/12
13
você pode apenas criar uma nova tabela para a consulta (CREATE TABLE SELECT) e depois despejar essa tabela com o mysqldump. Dessa forma, você pode restaurá-lo facilmente mais tarde.
quano
1
para quem quer usar mysqldump e restaurar o arquivo, dê uma olhada aqui: stackoverflow.com/a/2431936/411786
Syco
2
Para importar dados que são exportados com o mysql -e com a opção -B para saída como delimitado por tabulações, execute mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'. Veja: stackoverflow.com/a/17071108/1676044
Kevin Borders
259

Isso deve funcionar

mysqldump --databases X --tables Y --where="1 limit 1000000"
Thomas Ahle
fonte
4
Um exemplo melhor pode ser algo que realmente se parece com uma cláusula onde, como --where = "MyColumn <1000" - o primeiro milhão de linhas de cada mesa parece ser uma coisa estranha ao pedido;)
IJW
@ijw Se o que você deseja fazer é fazer um backup facilmente reinserível da sua tabela, você provavelmente não precisará de uma cláusula where para nada além de limites.
Thomas Ahle
3
@Sagotharan: Bem, não é uma consulta. Provavelmente é por isso.
Lightness Races em órbita
79
!!AVISO!! O mysqldump adiciona um comando 'DROP TABLE' na parte superior do arquivo exportado. Isso significa que se você fizer uma exportação parcial e depois reimportá-la, perderá todo o resto. Bem, eu fiz.
Tamlyn
34
Sim, para não excluir todos os dados da sua tabela ao restaurar a partir do arquivo de dados salvo, adicione a --no-create-infoopção. Veja minha resposta para um exemplo.
Gary
71

Você pode despejar uma consulta como csv assim:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Cara
fonte
8
E se eu quiser despejar várias tabelas.
SIFE
10
Isso cria um arquivo na máquina na qual o banco de dados MySQL está sendo executado. Portanto, se você estiver consultando em um console remoto, esse método falhará. Se houver uma maneira de fazê-lo a partir de um console remoto, informe-me.
dknight
2
onde ele salva o arquivo?
precisa saber é o seguinte
1
@dknight Estou assumindo que você quer dizer um console remoto por meio de um console de terminal. Nesse caso, você pode recuperar o arquivo despejado scpapós a conexão ser encerrada. aqui está um exemplo scp [email protected]:/tmp/querydump.csv ~/local.csv
Luke
Parece inseguro: # 1290 - O servidor MySQL está sendo executado com a opção --secure-file-priv, portanto não pode executar esta instrução #
mikep
64

Despejar uma tabela usando uma consulta where:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Despejar uma tabela inteira:

mysqldump mydatabase mytable > data.sql

Notas:

  • Substituir mydatabase , mytableeo onde declaração com os valores que desejar.
  • Por padrão, mysqldumpincluirá DROP TABLEe CREATE TABLEinstruções em sua saída. Portanto, se você não deseja excluir todos os dados da sua tabela ao restaurar a partir do arquivo de dados salvo, use o--no-create-info opção
  • Você pode precisar adicionar as apropriadas -h, -ue -popções para os comandos de exemplo acima, a fim de especificar o seu desejado host do banco, usuário e senha, respectivamente.
Gary
fonte
38

Você pode usar a opção --where no mysqldump para produzir uma saída que você está esperando:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

No máximo 100 linhas de test.t1 serão descartadas da tabela do banco de dados.

Saúde, WB

Wagner Bianchi
fonte
6

Se você deseja exportar sua última quantidade de registros para um arquivo, execute o seguinte:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

O exemplo acima salvará os últimos 100 registros no arquivo export_file.sql, assumindo que a tabela da qual você está exportando tenha uma coluna de ID incrementada automaticamente.

Você precisará alterar os valores de usuário, host local, banco de dados e tabela. Opcionalmente, você pode alterar a coluna de identificação e exportar o nome do arquivo.

aullah
fonte
5

O MySQL Workbench também possui esse recurso na GUI. Basta executar uma consulta, clique no ícone Salvar ao lado de Exportar / Importar:

insira a descrição da imagem aqui

Em seguida, escolha "Instruções SQL INSERT (* .sql)" na lista.

insira a descrição da imagem aqui

Digite um nome, clique em Salvar, confirme o nome da tabela e você terá seu arquivo de despejo.

MPelletier
fonte
3

Combinando grande parte do exposto aqui, está o meu exemplo prático real, selecionando registros com base no meterid e no timestamp. Eu preciso desse comando há anos. Executa muito rapidamente.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql
zzapper
fonte
-1

mysql Exportar a linha de comando dos resultados da consulta:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt
lanni654321
fonte
está funcionando para mim no ubuntu, comando: mysql -h localhost -u raiz -p dbname -e "selecione * de usuários onde id = 1; selecione * de equipes onde id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh