私のOpenBSDボックスには、ユーザー_mysql用の次のcrontabがあります。
0 4 * * * /backup/mysql_backup/mysql_backup.sh
0 9 * * 1 mysql -uroot -pMySQLpassword -e "purge master logs before date_sub(now(),interval 5 day);"
最初の目的は、このボックスの mysql データベースをバックアップすることでした。ユーザー _mysql が接続権限を拒否されたため、これらのジョブが実行されなかったことがわかりました (_mysql ユーザーのパスワードが正しいことを確認しました)。
そこで、これらのジョブを別のユーザーの crontab に置くべきだと考えていますが、どのユーザーの crontab に置くべきでしょうか (root の crontab には置くべきではないと思います)? そのため、これを構成する方法についての提案を探しています。 それとも、mysql の設定を変更する必要がありますか。
編集
スクリプトはデータベースと同じサーバー上にあります。これらのcrontabエントリはエラーで失敗します
connect(';host=localhost;mysql_read_default_group=mysqlhotcopy','',...) が失敗しました: ユーザー '_mysql'@'localhost' のアクセスが拒否されました (パスワード使用: YES) /usr/local/bin/mysqlhotcopy 行 178 aigaion_copy DBI
答え1
my.cnf で expire_logs_days=5 を使用すると、2 番目の cron ジョブと同じ機能を実行できます。おそらく、より信頼性が高いでしょう。
答え2
cronjob を実行しているシステム ユーザー (_mysql) は、データベースに接続しているユーザー (root) とは関係ありません。唯一重要なのは、スクリプトが接続しているサーバーのホスト名/IP です。
スクリプトはデータベースと同じサーバー上にありますか? コマンドを実行しようとしたときに表示されるエラーは正確には何ですか?
答え3
表示されたエラー メッセージによると、ユーザー '_mysql'@'localhost' には DB 内で必要な権限がありません。
このユーザーに必要な権限を付与するか、/backup/mysql_backup/mysql_backup.sh スクリプト内で別の資格情報を使用する必要があります。