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.cnf
和test_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 伺服器互動的腳本也應該由非特權使用者執行。