Yedekleme amaçlı geçici SSH Tüneli


11

Uzak bir sunucuda birkaç MySQL şemasının içeriğini otomatik olarak yedeklemek için bir kabuk komut dosyası (şu anda bash kullanıyor) yazmak istiyorum. Uzak sunucu yalnızca SSH erişimine izin vermek için kilitlendi, bu yüzden mysqldumpçeşitli şemalara karşı çalıştırmadan önce bir SSH tüneli oluşturmam gerekiyor .

Herhangi bir sorun olmadan bir tünel oluşturabilirim, ancak veritabanı dökümü tamamlandıktan sonra otomatik olarak kapatmak istiyorum.

Şu anda benim senaryom bunu yapıyor:

/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

Bağlantının 600 saniye boyunca açık tutulduğu yerlerde, ancak ilk dökümlerden biri bundan daha uzun sürerse, diğer dökümler tamamlanmadan bağlantı kapatılır. Her şema yedekleme için ayrı dosyaları tutmak istiyorum (bu yüzden şimdilik --databasesmysqldump önleyecektir ).

Herhangi bir öneri?

Yanıtlar:


29

Tüm bu tünelleme ile uğraşmanıza gerek yok :-).

Sadece SSH bağlantısını kullanarak mysqldump'ın verilerini yayınlamasına izin verin:

ssh usr@host mysqldump -u dbuser -ppasswd my-database-name >dumpfile

1
Sorunu ortadan kaldırmak için +1. Bu, uzak ana bilgisayarda mysqldump kullanılabilir olmasını gerektirir ve uzak sunucu işlem listesindeki parolayı gösterdiğine inanıyorum, ancak bu şeylerin bir sorun olmadığını varsayarak, çok daha iyi bir çözüm gibi geliyor.
Mark

3
İşaretleri yorumuna yanıt olarak "Mark 6 6 '09 at 16:34" uzak sunucu işlem listesindeki parola hakkında (Yorum eklemek için yeterli üne sahip değilim): Kullanıcılar evinde bir .my.cnf dosyası oluşturabilirsiniz Uzak sunucudaki dizini girin ve oradaki parolayı belirtin: [client] password = "secret" Sonra mysqldump kullanın (burada veri aktarımını hızlandırmak için sıkıştırma ile):$ ssh user@host "mysqldump foobar | gzip -9" | gzip -d > foobar.sql
Thomas Schuster

5

-N seçeneğini, -f seçeneğini ve uyku 600'ü ekleyin, bu tüneli arka planda çalıştırmadan açar. Sonra komutu ile birlikte çalıştırabilir, PID'yi alabilir, ardından işler tamamlandıktan sonra ssh işlemini sonlandırabilirsiniz.

/usr/bin/ssh -T -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 &
PID=$!
do_stuff
kill $PID

(Bunu bash ile test ettim - farklı bir kabuk için bir şeyler değiştirmeniz gerekebilir)


4

Sleske'nin önerisinde hafif bir varyasyon, aktarımdan önce sıkıştırmak için mysqldump çıkışını gzip ile borulandırabilirsiniz:

ssh SSH-USER@SERVER mysqldump -u DB-USER -pDB-PASSWORD DB-NAME | gzip -c > DB-NAME.sql.gz

Bu komutun aktarımdan SONRA sıkıştırılmadığından şüpheleniyorum, "mysql ... | gzip" bitini alıntılamanız gerekebilir, böylece boru uzaktan değerlendirilir
Mighty Chris

3

Sleske'nin dediği gibi, bu durumda neden rahatsız oluyorsunuz? Bununla birlikte, genel durumda bir ssh tünelini kontrol etmek için bir çözüm vardır: adlandırılmış bir boru kullanın. İlk önce boruyu şu şekilde oluşturun:

ssh -l remoteuser 208.77.188.166 mkfifo /tmp/PIPO

Sonra tüneli oluşturmak için ssh'nize (boruya engelleme) yazarsınız:

/usr/bin/ssh -T -f -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 "echo T > /tmp/PIPO"

Tüneli kapatmak istediğinizde boruyu okuyun:

ssh -l remoteuser 208.77.188.166 cat /tmp/PIPO

Et voilà!


2

Ben böyle yazardım,

scp backup-db.sh remoteuser@208.77.188.166:/root/backups/
ssh remoteuser@208.77.188.166 exec /root/backups/backup-db.sh

Senaryo nerede,

#!/bin/sh
# backup-db.sh
DUMPARGS=--compress -h 127.0.0.1 -P 4444 -u user -ppassword
BACKUP_PATH=/root/backups/snapshot

/usr/bin/mysqldump $DUMPARGS db1 | bzip2 > $BACKUP_PATH/db1.sql.bz2
/usr/bin/mysqldump $DUMPARGS db2 | bzip2 > $BACKUP_PATH/db2.sql.bz2
/usr/bin/mysqldump $DUMPARGS db3 | bzip2 > $BACKUP_PATH/db3.sql.bz2

Son olarak, arşiv scpbaşka bir komutla yeniden düzenlenebilir.
Evet, boru veya tünel yapmadım.

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.