Redirect output mysqldump ke scp

13

Saya bekerja dengan linux pro tahun lalu yang melakukan trik bagus ini. Dia bisa melakukan mysqldump tetapi mengarahkan output ke koneksi scp / ssh daripada menulis ke disk . Kami memanfaatkan ketenangan ini sedikit di mana saya dulu bekerja tetapi saya tidak ingat bagaimana melakukan ini lagi.

Saya sekarang dihadapkan dengan masalah di mana hard drive saya di server saya berada di kaki terakhirnya dan, untuk tujuan intensif, dipasang secara permanen sebagai hanya baca.

Saya berharap untuk menggunakan tipuan baris perintah ini untuk tetap dapat membuat cadangan database saya ke server baru, karena menulis dump ke diska lokal dan mentransfernya jelas bukan pertanyaan.

Apakah ini sebenarnya trik kecil yang mungkin dilakukan? Jika demikian apa sintaksinya?

Sejak saya menyadari karena masalah sistem file read only saya mengalami saya bahkan tidak dapat terhubung ke mysql untuk melakukan dump. Tapi umpan balik Anda bagus dan mudah-mudahan bermanfaat bagi orang lain di masa depan

xzyfer
sumber
1
"maksud dan tujuan"
Ignacio Vazquez-Abrams

Jawaban:

11

mysqldump dbname | ssh [email protected] "mysql -D dbname"

itu seharusnya bekerja :-)

Atur kunci antar sistem juga sehingga Anda dapat melakukannya tanpa membutuhkan login / pass :-)

Glenn Kelley
sumber
Ini benar-benar bagus, menyalurkan dump langsung ke mysql di server jauh, pada dasarnya kloning database adalah satu perintah. Apakah saya benar?
xzyfer
1
Anda mendapatkannya ;-) tentu saja Anda selalu bisa hanya mendorong ke file namun saya suka kesedihan karena mereka memungkinkan Anda untuk menggulung ke cadangan jika diperlukan :-) secara real time hanya dengan mengubah lebih dari satu ip dalam file konfigurasi Anda ... Manfaat besar. Kami melakukan ini berulang kali pada hal-hal linode kami
Glenn Kelley
Saya merasa mungkin ada masalah penyangga pipa di sini?
Phil Hollenback
10
mysqldump ... | ssh ... "cat > out.dmp"
Ignacio Vazquez-Abrams
sumber
Yang ini sangat bagus untuk saya. Saya mengatur otentikasi kunci publik pada laptop Mac OS X saya dan menjalankan mysqldump -p <dbname> | ssh <user>@<ip_address> "cat > <filename>.sql" apa yang saya butuhkan.
harperville
2

Saya suka jawaban @ GlennKelley, tetapi ingin menunjukkan yang berikut:

Kami memiliki database yang 450GB, tetapi hanya 500GB yang disediakan pada host. Kami tidak dapat mengekspor secara lokal, jadi kami mengekspor dari jarak jauh. Kami memvalidasi output dan ada ratusan contoh di mana output rusak karena masalah buffering pipa.

Solusi terbaik di sini, adalah, dari host target di mana Anda ingin dump Anda berakhir, jalankan mysqldumptetapi gunakan -hopsi untuk host. Arahkan host ke server MySQL dan ekspor data menggunakan a >.

mysqldump -u root -p -h 10.1.1.199 --all-databases ...<more options>... > dump.sql
Mike Mackintosh
sumber