cronjob が mysql を実行していて、ルートアクセスが拒否される

cronjob が mysql を実行していて、ルートアクセスが拒否される

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)

mysql のログイン資格情報は /root/.my.cnf に保存されているため、コマンド ラインからスクリプトを root として正常に実行できます。何が問題なのでしょうか? 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 サーバーと対話するスクリプトの実行も、権限のないユーザーで実行する必要があります。

関連情報