mysql - ssh & shell & mysql 中的条件命令

标签 mysql linux bash shell unix

我在 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/

相关文章:

macos - 使用 sed 命令从多个文件中删除行

mysql - 如何使用 group by 或不使用 group by 来修复我的 mysql 请求?

php - PHP 注册表出现错误

mysql - 如何处理MySQL中auto_increment ID列的碎片

c# - 如何在后台以单声道运行exe

linux - 如何查看edgenodes的数量?

bash - 如何在每个 "exec"命令处执行 Docker 镜像的入口点?

string - 删除变量开头和结尾的子字符串匹配模式

mysql - 改进MySQL相关文章查询

android - 无法启动 Android 模拟器