1週間以上前のSQLデータベースをすべて削除したいのですが、毎晩実行したいと思います。そこで、cronジョブをセットアップします。パスワードを毎回手動で入力することなく、mySQLを照会するにはどうすればよいですか?
PHPのクエリは次のとおりです。
mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7");
これをシェルスクリプトとして実行する方法はありますか?そうでない場合、cronにphpファイルを実行させる方法はありますか?
以下のようなシェルスクリプトを作成してみてください。
#!/bin/bash
mysql --user=[username] --password=[password] --database=[db name] --execute="DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7"
これをcronに追加できます
システムでcronを実行するものに依存しますが、cronからphpスクリプトを実行するために必要なことは、phpインストールの場所に続いてスクリプトの場所を呼び出すことだけです。 crontabを1時間ごとに実行する例:
# crontab -e
00 * * * * /usr/local/bin/php /home/path/script.php
私のシステムでは、PHPインストールへのパスを入れる必要さえありません。
00 * * * * php /home/path/script.php
別の注意として、古いPHPのインストールを使用している場合を除き、mysql拡張機能は非推奨であるため使用しないでください。 ここを読む 比較のため。
有効期限が<TodayであるmySQLテーブルからレコードを削除する必要があるため、これは非常に便利なページでした。
私は共有ホストを使用しており、CRONはAndrewKDayの提案を好まなかった。また、この方法でパスワードを公開することは安全でない可能性があると述べました(そして私も同意します)。
それからphpMyAdminでイベントをONにしようとしましたが、共有ホスト上で再びこれを行うことはできませんでした。すみません、fancyPants。
そこで、SQLスクリプトをPHPファイルに埋め込むことにしました。例を使用しました[ここ] [1]
[1]: https://www.w3schools.com/php/php_mysql_create_table.asp 安全な場所のサブフォルダーに保存し、適切な測定のために空のindex.phpを追加しました。その後、このPHPファイル(および私のSQLスクリプト)がブラウザのURL行から機能しているかどうかをテストできました。
これまでのところすべて良い。 CRONへ。上記の例に従うと、ほとんど機能しました。 * .phpファイルのパスの前にPHPを呼び出しました。
私のcronは1日に1回実行されるように設定されており、このように見えますが、セキュリティのために変更されています。
00 * * * * php mywebsiteurl.com/wp-content/themes/ForteChildTheme/php/DeleteExpiredAssessment.php
CRONでの最終テストでは、最初に毎分実行するように設定し、電子メールアラートをオンにしました。これにより、計画どおりに実行されていることがすぐに確認され、1日1回に変更しました。
お役に立てれば。