Saya ingin menulis skrip shell (saat ini menggunakan bash) untuk secara otomatis membuat cadangan konten beberapa skema MySQL di server jauh. Server jarak jauh dikunci untuk hanya mengizinkan akses SSH jadi saya harus membuat terowongan SSH sebelum berjalan mysqldump
melawan berbagai skema.
Saya dapat membuat terowongan tanpa masalah, namun saya ingin dapat menutupnya secara otomatis setelah dump database selesai.
Saat ini skrip saya sedang melakukan ini:
/usr/bin/ssh -T -f -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 sleep 600
/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db1 | gzip > /root/backups/snapshot/db1.sql.gz
/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db2 | gzip > /root/backups/snapshot/db2.sql.gz
/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db3 | gzip > /root/backups/snapshot/db3.sql.gz
Jika koneksi tetap terbuka selama 600 detik, namun jelas jika salah satu dump pertama membutuhkan waktu lebih lama dari itu maka koneksi ditutup sebelum dump lainnya selesai. Saya ingin menyimpan file terpisah untuk setiap skema cadangan (jadi akan menghindari --databases
mysqldump untuk saat ini).
Ada saran?
sumber
$ ssh user@host "mysqldump foobar | gzip -9" | gzip -d > foobar.sql
Tambahkan opsi -N, opsi -f dan sleep 600, ini akan membuka terowongan tanpa menjalankannya di latar belakang. Kemudian Anda dapat menjalankan perintah dengan &, dapatkan PID, lalu matikan proses ssh setelah pekerjaan selesai.
(Saya sudah menguji ini dengan bash - Anda mungkin perlu mengubah sesuatu untuk shell yang berbeda)
sumber
Sedikit variasi pada saran sleske, Anda dapat menyalurkan output mysqldump melalui gzip ke kompres sebelum transfer:
sumber
Seperti kata sleske, mengapa repot dalam kasus khusus ini? Namun ada solusi untuk mengontrol terowongan ssh dalam kasus umum: gunakan pipa bernama. Pertama buat pipa seperti ini:
Kemudian Anda menulis (memblokir ke pipa) di ssh Anda untuk membuat terowongan:
Saat Anda ingin menutup terowongan, baca saja pipa:
Dan lagi!
sumber
Ini adalah bagaimana saya akan menulisnya,
Di mana skrip berada,
Akhirnya, arsip dapat
scp
diedit kembali dengan perintah lain.Ya, saya tidak pipa atau terowongan.
sumber