Подождите, пока SSH туннель, прежде чем продолжить сценарий

0

У меня есть сценарий, который удаляет данные из облачного литейного db, и он работает следующим образом:

cf ssh -L 33001:db.host:3306 --skip-remote-execution App &
TUNNEL_PID=$!

mysqldump --protocol TCP --port= 33001 ..... db_name > /tmp/my-db-dump.sql

kill $TUNNEL_PID

Проблема в том, что mysqldump не работает с

mysqldump: получена ошибка: 2003: невозможно подключиться к серверу MySQL на "localhost" (61) при попытке подключения

Я ожидаю, что проблема в том, что туннель еще не установлен. Когда я sleep 5 перед mysqldump, все работает. Но я не хочу полагаться на случайные 5 секунд. Можно ли дождаться начала туннеля?

Теги:
ssh
cloudfoundry
tunnel

1 ответ

1

Можете ли вы запустить mysqldump через команду ssh вместо открытия туннеля?

Mysqldump напишет на его stdout, который будет передан обратно на ваш клиентский хост через команду ssh.

ssh App "mysqldump db_name" > /tmp/my-db-dump.sql

Или вы даже можете сбросить сжатый файл на сервере, а затем извлечь файл дампа с помощью scp. Это поможет ускорить передачу.

ssh App "mysqldump db_name | gzip -c > /tmp/my-db-dump.sql.gz"
scp App:/tmp/my-db-dump.sql.gz .
ssh App "rm /tmp/my-db-dump.sql.gz"

Это непроверено, но я надеюсь, что это дает вам некоторые идеи для экспериментов.

  • 1
    С cf ssh вы делаете это немного иначе, чем стандартный SSH. Вместо ssh <host> "command" , это cf ssh <app-name> -c "command" . В качестве альтернативы вы можете использовать стандартный ssh / scp / sftp , но команды немного запутаны -> github.com/cloudfoundry/…
  • 0
    Спасибо за подсказку @DanielMikusa, я оставлю свои примеры как «псевдокод». :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню