cronjob 執行 mysql 並被拒絕 root 訪問

cronjob 執行 mysql 並被拒絕 root 訪問

cron 作業文件:

46 13 * * * 根 /home/tmp/test_mysql.sh

腳本:

執行查詢(){
    查詢=“$1”
     res=`mysql --skip-column-names -e "$query"`
    回顯“$res”
}

res=`execute_query「顯示資料庫」`
回顯$res

當 cron 作業成功執行腳本時出現錯誤:

錯誤 1045 (28000):使用者「root」@「localhost」的存取被拒絕(使用密碼:NO)

我可以以 root 身分從命令列成功執行腳本,因為 mysql 的登入憑證保存在 /root/.my.cnf 中,出了什麼問題? cronjob 不知何故不讀取 /root/.my.cnf 嗎?

答案1

您不應該依賴 MySQL 用戶端來選擇適當的 MySQL 設定文件,因為層疊性質客戶端如何讀取這些文件。相反,你應該把你的my.cnftest_mysql.sh放在裡面/home/tmp並使用--defaults-extra-file[關聯] 腳本中的參數。

請注意,--defaults-extra-file需要是第一的mysql 指令的參數,否則它將無法運作。

execute_query(){
    query="$1"
     res=`mysql --defaults-extra-file=/home/tmp/my.cnf --skip-column-names -e "$query"`
    echo "$res"
}

res=`execute_query "show databases"`
echo $res

/root不是一個放置東西(權限等)的好地方,應該避免。

運行與 MySQL 伺服器互動的腳本也應該由非特權使用者執行。

相關內容