如何在Bash中捕获MySQL错误

4
我有一个bash脚本,可以从一个数据库导出表并将其导入另一个数据库。非常顺利。
但是,由于我想让它作为cron作业运行,如果因任何原因出现错误,我希望它能发送电子邮件通知我。但是如何找出是否存在错误,例如:
ERROR 1045 (28000): Access denied for user 'importuser'@'192.168.xxx.xxx' (using password: YES)

有什么想法如何做到这一点吗?以下是关键段落:
mysql --user=$rep_user --password=$rep_password --host=$rep_host --database=$rep_name < /tmp/${i}.sql

我已经尝试过

    result=`mysql --user=$rep_user --password=$rep_password --host=$rep_host --database=$rep_name < /tmp/${i}.sql`
    echo $result >> $EMAILMESSAGE

但是在我的$EMAILMESSAGE中没有显示出来。

有人有什么想法可以实现这个吗?

2个回答

7
我假设你的$EMAILMESSAGE变量已经初始化并保存了一个文件的位置。如果是这样,你应该能够按照以下方式将结果传递给它(仅当命令失败时):
result=$(mysql --user=$rep_user --password=$rep_password --host=$rep_host --database=$rep_name < /tmp/${i}.sql 2>&1 )
[ $? = 0 ] || echo $result >> $EMAILMESSAGE

4

mysql 像任何其他Unix命令行工具一样运作,你可以使用命令的退出状态。

因此,你可以在 if 中使用它,使用短路运算符 ||&&,或直接检查 $?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接