在bash脚本中使用mySQL检查两个条件


Checking two conditions using mySQL in a bash script

我正在使用mySql维护数据库。我已经设置了一个使用Percona不断检查死锁的脚本。我想做的是让我的脚本只在出现新事件时向我们的管理员发送电子邮件。我设置了一个切换列"emailSent"来区分新旧死锁。我想检查的是死锁表是否为空,如果不是,是否已将电子邮件发送给我们的管理员。我的"else"脚本运行良好,但我对初始的"if"有问题:

if [ "a$(mysql --skip-column-names -h -u -p -e  "SELECT * from deadlocks WHERE lock_mode= 'X' AND emailSent = '0';")" = "NULL" ]
then 
echo There are currently no new deadlocks active.

当所有行的lock_mode为'X',emailSent='1'(或者表为空)时,我基本上想打印"当前没有新的死锁活动"。如果他们的emailSent='0'和lock_mode为'X',我希望我的else执行。

如有任何帮助,我们将不胜感激。

您可以执行以下

MYSQL_HOST=10.20.30.40
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-h${MYSQL_HOST} -u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT COUNT(1) from deadlocks WHERE lock_mode='X' AND emailSent='0'"
DEADLOCKS_FOUND=`mysql ${MYSQL_CONN} -ANe "${SQL}"`
if [ ${DEADLOCKS_FOUND} -gt 0 ]
then
    echo "Deadlocks Detected"
fi

或者如果您在本地工作

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT COUNT(1) from deadlocks WHERE lock_mode='X' AND emailSent='0'"
DEADLOCKS_FOUND=`mysql ${MYSQL_CONN} -ANe "${SQL}"`
if [ ${DEADLOCKS_FOUND} -gt 0 ]
then
    echo "Deadlocks Detected"
fi