我有一个从云代工厂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秒。是否可以等待隧道开始?
答案 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"
这是未经测试的,但我希望它能为您提供一些实验的想法。