web-dev-qa-db-ja.com

cronジョブとしてmySQLクエリを実行しますか?

1週間以上前のSQLデータベースをすべて削除したいのですが、毎晩実行したいと思います。そこで、cronジョブをセットアップします。パスワードを毎回手動で入力することなく、mySQLを照会するにはどうすればよいですか?

PHPのクエリは次のとおりです。

mysql_query("DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7");

これをシェルスクリプトとして実行する方法はありますか?そうでない場合、cronにphpファイルを実行させる方法はありますか?

32
Paolo

以下のようなシェルスクリプトを作成してみてください。

#!/bin/bash

mysql --user=[username] --password=[password] --database=[db name] --execute="DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7"

これをcronに追加できます

41
Andy Day

個人的には、cronよりもMySQLイベントスケジューラを使用する方が簡単だと感じています。

で有効にする

SET GLOBAL event_scheduler = ON;

次のようなイベントを作成します。

CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2014-01-18 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) ,  timestamp ) >=7;

以上です。

構文について詳しく読む here および here は、より一般的な情報です。

79
fancyPants

システムで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拡張機能は非推奨であるため使用しないでください。 ここを読む 比較のため。

9
miyasudokoro

有効期限が<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回に変更しました。

お役に立てれば。

0
John Anderson