Chciałbym napisać skrypt powłoki (obecnie używający bash), aby automatycznie wykonać kopię zapasową zawartości kilku schematów MySQL na zdalnym serwerze. Serwer zdalny jest zablokowany, aby umożliwić dostęp tylko przez SSH, więc muszę utworzyć tunel SSH przed uruchomieniem mysqldump
w różnych schematach.
Mogę utworzyć tunel bez żadnego problemu, jednak chciałbym mieć możliwość automatycznego zamknięcia go po zakończeniu zrzutu bazy danych.
Obecnie mój skrypt robi to:
/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
Jeśli połączenie jest utrzymywane otwarte przez 600 sekund, oczywiście jeśli jedno z pierwszych zrzutów zajmie więcej czasu, wówczas połączenie zostanie zamknięte przed zakończeniem pozostałych zrzutów. Chciałbym zachować osobne pliki dla każdej kopii zapasowej schematu (więc na razie --databases
uniknę mysqldump).
Jakieś sugestie?
źródło
$ ssh user@host "mysqldump foobar | gzip -9" | gzip -d > foobar.sql
Dodaj opcję -N, opcję -f i tryb uśpienia 600, spowoduje to otwarcie tunelu bez uruchamiania go w tle. Następnie możesz uruchomić polecenie za pomocą &, uzyskać PID, a następnie zabić proces ssh po zakończeniu zadań.
(Przetestowałem to za pomocą bash - może być konieczna zmiana rzeczy dla innej powłoki)
źródło
Niewielka różnica w sugestii sleske, możesz przesłać wyjście mysqldump przez gzip w celu skompresowania przed przesłaniem:
źródło
Jak powiedział Śleske, po co zawracać sobie głowę tym szczególnym przypadkiem? Istnieje jednak rozwiązanie do sterowania tunelem ssh w ogólnym przypadku: użyj nazwanego potoku. Najpierw utwórz fajkę w ten sposób:
Następnie piszesz (blokowanie do potoku) w ssh, aby utworzyć tunel:
Kiedy chcesz zamknąć tunel, po prostu przeczytaj potok:
Zrobione!
źródło
Tak bym to napisał
Gdzie jest skrypt
Wreszcie archiwum można
scp
przywrócić za pomocą innego polecenia.Tak, nie prowadziłem rur ani tunelu.
źródło