Sorguya göre MySQL dökümü


220

mysqldumpTek başına yapmak mümkün mü SQL query?

Tüm veritabanını dökmek demek , phpmyadminihracat yaptığınızda olduğu gibiSQL

Yanıtlar:


285

mysqldump değil, mysql cli ...

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

isterseniz bir dosyaya yeniden yönlendirebilirsiniz:

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

Güncelleme: Orijinal gönderi sorgudan veritabanından döküp dökemeyeceğini sordu. Sorduğu ve kastettiği farklıydı. Gerçekten tüm tabloları mysqldump istedim.

mysqldump --tables myTable --where="id < 1000"

22
nasıl bu dökümü txt dosyayı geri?
Vivek S

3
mysql -e yaklaşımını deneyenler için. Benim için çalışmak için senaryoyu biraz özelleştirmek zorunda kaldım. Bu, çalıştırıldığında sql şifresini girmenizi gerektirir. MySQL -e "tablosundan * seçmek WHERE sorgu = 'dsa'" -u root -p --database = DBNAME> text.txt
RichardW11

13
yalnızca sorgu için yeni bir tablo oluşturabilir (TABLO SEÇİMİ OLUŞTUR) ve mysqldump ile bu tabloyu dökebilirsiniz. Bu şekilde daha sonra kolayca geri yükleyebilirsiniz.
quano

1
mysqldump kullanmak ve dosyayı geri yüklemek isteyenler için buraya bir göz atın: stackoverflow.com/a/2431936/411786
Syco

2
Sekme ile ayrılmış olarak çıktı almak için -B seçeneğiyle mysql -e ile dışa aktarılan verileri içe aktarmak için mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t' komutunu çalıştırın. Bakınız: stackoverflow.com/a/17071108/1676044
Kevin Borders

260

Bu çalışmalı

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
Daha iyi bir örnek aslında - where = "myColumn <1000" gibi bir nerede cümlesine benzeyen bir şey olabilir - her tablonun ilk milyon satırı talep etmek için garip bir şey gibi görünüyor;)
ijw

@ijw Yapmak istediğiniz şey tablonuzun kolayca yeniden yerleştirilebilen bir yedeğini almaksa, büyük olasılıkla sınırlardan başka bir şey için nerede deyimine ihtiyacınız yoktur.
Thomas Ahle

3
@Sagotharan: Bu bir sorgu değil. Muhtemelen nedeni budur.
Orbit'te Hafiflik Yarışları

80
!!UYARI!! mysqldump, dışa aktarılan dosyanın üstüne bir 'DROP TABLE' komutu ekler. Bu, kısmi bir dışa aktarma yapar ve ardından yeniden içe aktarırsanız, diğer her şeyi kaybedersiniz. İyi ben yaptım.
Tamlyn

35
Evet, kaydedilen veri dosyasından geri yüklerken tablonuzdaki tüm verileri silmemek için --no-create-infoseçeneği eklediğinizden emin olun . Bir örnek için cevabımı görün .
Gary

71

Bir sorguyu şu şekilde csv olarak atabilirsiniz:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

8
Birden çok tabloyu dökmek istersem ne olur?
SIFE

11
Bu, MySQL veritabanının çalıştığı makinede bir dosya oluşturur. Bu nedenle, uzak bir konsoldan sorgu yapıyorsanız bu yöntem başarısız olur. Uzak bir konsoldan da yapmanın bir yolu varsa, lütfen bana bildirin.
dknight

2
dosyayı nereye kaydeder?
Techlord

1
@dknight Bir terminal konsolu aracılığıyla uzak bir konsol anlamına geldiğini varsayıyorum, bu durumda scpbağlantı sona erdikten sonra dökülen dosyayı alabilirsiniz . işte bir örnek. scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Luke

Güvensiz gibi görünüyor: # 1290 - MySQL sunucusu --secure-file-priv seçeneğiyle çalışıyor, bu yüzden bu ifadeyi
yürütemiyor

64

Where sorgusunu kullanarak tabloyu dökümü:

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

Tüm tabloyu dök:

mysqldump mydatabase mytable > data.sql

Notlar:

  • Değiştir mydatabase, mytableve istediğiniz değerlerle nerede beyanı.
  • Varsayılan olarak, mysqldumpiçerecektir DROP TABLEve CREATE TABLEçıktısı bildirimler. Bu nedenle, kaydedilen veri dosyasından geri yüklerken tablonuzdaki tüm verileri silmek istemiyorsanız , --no-create-infoseçeneği kullandığınızdan emin olun .
  • İstediğiniz veritabanı ana bilgisayarını, kullanıcısını ve parolasını sırasıyla belirtmek için yukarıdaki örnek komutlara uygun -h, -uve -pseçenekleri eklemeniz gerekebilir .

38

Beklediğiniz bir çıktıyı üretmek için mysqldump'ta --where seçeneğini kullanabilirsiniz:

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

Test.t1 dosyasından en fazla 100 satır veritabanı tablosundan atılacaktır.

Şerefe, WB


6

Son n kayıt miktarınızı bir dosyaya vermek istiyorsanız, aşağıdakileri çalıştırabilirsiniz:

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

Yukarıdakiler, dışa aktardığınız tablonun otomatik olarak artırılan bir kimlik sütununa sahip olduğunu varsayarak, son 100 kaydı export_file.sql dosyasına kaydeder.

Kullanıcı, localhost, veritabanı ve tablo değerlerini değiştirmeniz gerekecektir. İsteğe bağlı olarak id sütununu değiştirebilir ve dosya adını dışa aktarabilirsiniz.


5

MySQL Workbench ayrıca GUI'de düzgün bir şekilde bu özelliğe sahiptir. Bir sorgu çalıştırın, Dışa Aktar / İçe Aktar'ın yanındaki kaydet simgesini tıklayın:

resim açıklamasını buraya girin

Sonra listeden "SQL INSERT deyimleri (* .sql)" seçin.

resim açıklamasını buraya girin

Bir ad girin, kaydet'i tıklayın, tablo adını onaylayın ve döküm dosyanızı alacaksınız.


3

Yukarıdakilerin çoğunu birleştirmek benim gerçek pratik örneğim, hem metre hem de zaman damgasına dayalı kayıtları seçmek. Yıllardır bu komuta ihtiyacım var. Gerçekten hızlı çalışır.

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

-1

mysql Sorgu sonuçları komut satırını dışa aktar :

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

Ubuntu'da benim için çalışıyor, komut: mysql -h localhost -u root -p dbname -e "id * 1 olan kullanıcılardan * seçin; id = 1 olan personelden * seçin" --xml> / var / www / html / project / backups / db.xml
Ramesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.