我在 shell 脚本中有以下命令,在其中执行 mysql 转储
,然后通过 ssh 将该 SQL 文件加载到远程数据库中,然后更新时间戳。
1. mysqldump -u root files path | gzip -9 > $SQL_FILE
2. cat $SQL_FILE | ssh -i ~/metadata.pem <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b9ccdbccd7cdccf988978b978a978d" rel="noreferrer noopener nofollow">[email protected]</a>
"zcat | mysql -u 'root' -h 1.2.3.4 metadata"
3. TIMESTAMP=`date "+%Y-%m-%d-%T"`
4. mysql -u 'root' -h 1.2.3.4 metadata -e "UPDATE path_last_updated SET timestamp=DEFAULT"
有没有办法改进上述命令。例如,如果第 2 行失败(例如,由于连接问题),但第 4 行成功,会发生什么情况?
如何使第 4 行以第 2 行成功为条件运行?
最佳答案
您可以将所有内容链接到一个 block 中:
mysqldump -u root files path |
gzip -9 |
ssh -i ~/metadata.pem <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="077265726973724736293529342933" rel="noreferrer noopener nofollow">[email protected]</a> "zcat |\
mysql -u 'root' -h 1.2.3.4 metadata" &&
mysql -u 'root' -h 1.2.3.4 metadata -e "
UPDATE path_last_updated SET timestamp=DEFAULT"
因此,如果之前发生故障,最后一条 mysql 命令将不会被执行。
关于mysql - ssh & shell & mysql 中的条件命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677966/