Я хотел бы написать скрипт оболочки (в настоящее время использующий bash) для автоматического резервного копирования содержимого нескольких схем MySQL на удаленном сервере. Удаленный сервер заблокирован, чтобы разрешить только SSH-доступ, поэтому мне нужно создать SSH-туннель, прежде чем запускать mysqldump
различные схемы.
Я могу создать туннель без каких-либо проблем, однако я хотел бы иметь возможность автоматически закрывать его после завершения дампа базы данных.
В настоящее время мой скрипт делает это:
/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
Если соединение остается открытым в течение 600 секунд, очевидно, однако, если один из первых дампов занимает больше времени, то соединение закрывается до завершения других дампов. Я хотел бы сохранить отдельные файлы для каждой резервной копии схемы (поэтому пока не буду использовать --databases
mysqldump).
Какие-либо предложения?
источник
$ ssh user@host "mysqldump foobar | gzip -9" | gzip -d > foobar.sql
Добавьте опцию -N, опцию -f и спящий режим 600, это откроет туннель, не запуская его в фоновом режиме. Затем вы можете запустить команду с помощью &, получить PID, а затем завершить процесс ssh после завершения задания.
(Я проверял это с помощью bash - возможно, вам придется изменить что-то для другой оболочки)
источник
Небольшое изменение в предложении sleske, вы можете передать вывод mysqldump через gzip для сжатия перед передачей:
источник
Как сказал Слеске, зачем беспокоиться в данном конкретном случае? Однако в общем случае есть решение для управления ssh-туннелем: используйте именованный канал. Сначала создайте трубу так:
Затем вы пишете (блокируя канал) в своем SSH для создания туннеля:
Если вы хотите закрыть туннель, просто прочитайте канал:
И вуаля!
источник
Вот как бы я это написал,
Где сценарий,
Наконец, архив может быть
scp
возвращен другой командой.Да я не труба или туннель.
источник