MySQL membuang berdasarkan permintaan

220

Apakah mungkin dilakukan mysqldumpsendiri SQL query?

Maksud saya membuang seluruh database, seperti phpmyadminhalnya ketika Anda mengeksporSQL

Jakub Arnold
sumber

Jawaban:

285

bukan mysqldump, tapi mysql ...

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

Anda dapat mengalihkannya ke file jika Anda ingin:

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

Pembaruan: Posting asli ditanya apakah ia dapat membuang dari database dengan permintaan. Apa yang dia tanyakan dan apa maksudnya berbeda. Dia benar-benar ingin hanya mysqldump semua tabel.

mysqldump --tables myTable --where="id < 1000"
Zak
sumber
22
cara mengembalikan file txt yang dibuang ini?
Vivek S
3
bagi mereka yang mencoba pendekatan mysql -e. Saya harus menyesuaikan skrip agar berfungsi untuk saya. Yang ini mengharuskan Anda untuk memasukkan kata sandi sql saat dijalankan. mysql -e "select * from table WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11
13
Anda bisa membuat tabel baru untuk kueri (CREATE TABLE SELECT), dan lalu buang tabel itu dengan mysqldump. Dengan begitu Anda dapat dengan mudah mengembalikannya nanti.
quano
1
untuk yang ingin menggunakan mysqldump dan mengembalikan file, lihat di sini: stackoverflow.com/a/2431936/411786
Syco
2
Untuk mengimpor data yang diekspor dengan mysql -e dengan opsi -B untuk output sebagai tab-delimited, jalankan mysqlimport --ignore-lines = 1 --fields dihentikan oleh-oleh = '\ t'. Lihat: stackoverflow.com/a/17071108/1676044
Kevin Borders
259

Ini seharusnya bekerja

mysqldump --databases X --tables Y --where="1 limit 1000000"
Thomas Ahle
sumber
4
Contoh yang lebih baik mungkin adalah sesuatu yang benar-benar terlihat seperti klausa di mana, seperti --where = "myColumn <1000" - juta baris pertama dari setiap tabel sepertinya hal yang aneh untuk diminta;)
ijw
@ijw Jika yang ingin Anda lakukan adalah mengambil cadangan yang bisa dimasukkan kembali dengan mudah dari tabel Anda, Anda mungkin tidak perlu klausa mana untuk hal lain selain batas.
Thomas Ahle
3
@ Sagagaran: Ya, itu bukan permintaan. Mungkin itu sebabnya.
Lightness Races di Orbit
79
!!PERINGATAN!! mysqldump menambahkan perintah 'DROP TABLE' di bagian atas file yang diekspor. Itu berarti jika Anda melakukan ekspor sebagian kemudian mengimpornya kembali, Anda akan kehilangan segalanya. Ya saya lakukan.
Tamlyn
34
Ya, agar tidak menghapus semua data di tabel Anda saat memulihkan dari file data yang disimpan, pastikan Anda menambahkan --no-create-infoopsi. Lihat jawaban saya sebagai contoh.
Gary
71

Anda dapat membuang kueri sebagai csv seperti ini:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Orang
sumber
8
Bagaimana jika saya ingin membuang beberapa tabel.
SIFE
10
Ini membuat file pada mesin yang menjalankan database MySQL. Jadi, jika Anda meminta dari konsol jarak jauh metode ini gagal. Jika ada cara melakukannya dari konsol jarak jauh juga, beri tahu saya tentang itu.
dknight
2
di mana itu menyimpan file?
Techlord
1
@ dknight Saya berasumsi maksud Anda konsol jarak jauh melalui terminal konsol, dalam hal ini Anda dapat mengambil file yang dibuang melalui scpsetelah koneksi diakhiri. ini sebuah contoh. scp [email protected]:/tmp/querydump.csv ~/local.csv
Luke
Tampaknya tidak aman: # 1290 - Server MySQL berjalan dengan opsi --secure-file-priv sehingga tidak dapat menjalankan pernyataan ini
mikep
64

Buang tabel menggunakan kueri tempat:

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

Dump seluruh tabel:

mysqldump mydatabase mytable > data.sql

Catatan:

  • Ganti mydatabase,, mytabledan pernyataan di mana dengan nilai yang Anda inginkan.
  • Secara default, mysqldumpakan menyertakan DROP TABLEdan CREATE TABLEpernyataan dalam outputnya. Oleh karena itu, jika Anda ingin tidak menghapus semua data di tabel Anda saat memulihkan dari file data yang disimpan, pastikan Anda menggunakan --no-create-infoopsi.
  • Anda mungkin perlu menambahkan yang sesuai -h,, -udan -popsi ke contoh perintah di atas untuk menentukan host database, pengguna, dan kata sandi yang Anda inginkan, masing-masing.
Gary
sumber
38

Anda bisa menggunakan opsi --di mana di mysqldump untuk menghasilkan output yang Anda tunggu:

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

Paling banyak 100 baris dari test.t1 akan dibuang dari tabel database.

Cheers, WB

Wagner Bianchi
sumber
6

Jika Anda ingin mengekspor jumlah rekaman terakhir ke file, Anda dapat menjalankan yang berikut ini:

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

Di atas akan menyimpan 100 catatan terakhir ke export_file.sql, dengan asumsi tabel tempat Anda mengekspor memiliki kolom id yang ditambahkan secara otomatis.

Anda perlu mengubah nilai pengguna, localhost, database dan tabel. Anda dapat mengubah kolom id dan mengekspor nama file secara opsional.

aullah
sumber
5

MySQL Workbench juga memiliki fitur ini dengan rapi di GUI. Cukup jalankan kueri, klik ikon simpan di sebelah Ekspor / Impor:

masukkan deskripsi gambar di sini

Kemudian pilih "pernyataan SQL INSERT (* .sql)" di daftar.

masukkan deskripsi gambar di sini

Masukkan nama, klik simpan, konfirmasi nama tabel dan Anda akan memiliki file dump Anda.

MPelletier
sumber
3

Menggabungkan banyak hal di atas di sini adalah contoh praktis saya yang sebenarnya, memilih catatan berdasarkan meterid & cap waktu. Saya membutuhkan perintah ini selama bertahun-tahun. Menjalankan sangat cepat.

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
sumber
-1

mysql Mengekspor baris perintah hasil permintaan :

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt
lanni654321
sumber
itu berfungsi untuk saya di ubuntu, perintah: mysql -h localhost -u root -p dbname -e "pilih * dari pengguna di mana id = 1; pilih * dari staf di mana id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh