在继续脚本之前等待SSH隧道

时间:2018-01-10 16:34:14

标签: mysql bash ssh cloudfoundry tunnel

我有一个从云代工厂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:尝试连接时无法连接到'localhost'(61)上的MySQL服务器

我预计问题是隧道尚未建立。当我在mysqldump之前做sleep 5时,一切正常。但我不想依赖随机5秒。是否可以等待隧道开始?

1 个答案:

答案 0 :(得分:1)

您可以通过ssh命令运行mysqldump,而不是打开隧道吗?

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"

这是未经测试的,但我希望它能为您提供一些实验的想法。