2015-12-02 30 views
4

我正在爲使用mySql工作的數據庫做一些維護工作。我已經建立了一個腳本來不斷使用Percona檢查死鎖。我試圖做的是讓我的腳本只在發生新的事件時才發送電子郵件給我們的管理員。我設置了一個開關列「emailSent」來區分新舊僵局。我想檢查的是死鎖表是否爲空,如果沒有,則將該電子郵件發送給我們的管理員。我的「其他人」的劇本工作正常,但我有最初的「如果」的問題:在bash腳本中使用mySQL檢查兩個條件

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'和'X'的lock_mode,我希望我的其他人執行。

任何幫助將不勝感激。

+0

您可能希望使用'[ 「stuff1」 == 「stuff2」]]'。如果結果爲空,則可能希望與「」對比?請參閱[this](http://stackoverflow.com/questions/12262696/using-unset-vs-setting-a-variable-to-empty)。 – sjsam

回答

3

你可以做以下

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 
+0

太棒了,謝謝! – Downwithopp