2014-01-17 15 views
17

私は1週間以上経過したすべてのエントリーから自分のSQLデータベースを削除したいと思います。夜間にそれをやりたいのですが。だから、私はcronの仕事を設定するつもりです。毎回パスワードを手動で入力しなくても、mySQLにどのように問い合わせることができますか?次のようにmySQLクエリをcronジョブとして実行しますか?

PHPでの問合せは、次のとおりです。

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

は、シェルスクリプトとしてこれを実行する方法はありますか?そうでなければ、cronをPHPファイルにする方法がありますか?

答えて

31

は、以下のいずれかのようなシェルスクリプトを作成してみてください:

#!/bin/bash 

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

あなたはそれがあなたのシステム上でのcronを実行するかに依存しますが、あなたが持っているすべてをに行うためにはcron

+2

この回答は私のものとまったく同じです。それはちょうどあなたがPHPを介してそれをしたいかどうかに依存します。 – miyasudokoro

+1

また、データベース資格情報を必要以上の場所に分散するかどうかによって異なります。 'event_scheduler'オプションは、データベース内に格納されており、インストールが完全にバージョン管理されているので、この点で改善点です。 – kungphu

8

にこれを追加することができますcronからphpスクリプトを実行するのは、phpインストールの場所とスクリプトの場所を指定することです。 crontabファイルは毎時間実行している例:、あなたが使用するべきではない別のノートで

00 * * * * php /home/path/script.php 

:私のシステムでは

# crontab -e 
00 * * * * /usr/local/bin/php /home/path/script.php 

は、私もPHPのインストールにパスを配置する必要はありませんPHPの古いインストールを使用している場合を除き、非推奨です。比較のためRead here

44

私は個人的には、cronよりもMySQLイベントスケジューラを使いやすくなっています。

SET GLOBAL event_scheduler = ON; 

でそれを有効にして、このようなイベントを作成します:

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

を、それはそれです。

詳細については、herehereを参照してください。

0

これは、有効期限が<今日であるmySQLテーブルからレコードを削除する必要があるので、非常に便利なページでした。

私は共有ホスト上にあり、CRONはAndrewKDayの提案を好まなかった。このようにパスワードを公開するとセキュリティが損なわれる可能性があると私は同意しました。

次に、phpMyAdminでイベントをオンにしてみましたが、再び共有ホスト上にありましたが、これはno noでした。申し訳ありません。

SQLスクリプトをPHPファイルに埋め込むことに変わりました。私はここの例を使用しました[1]

[1]:https://www.w3schools.com/php/php_mysql_create_table.asp安全な場所にサブフォルダを保存し、空のindex.phpを追加しました。私は、このPHPファイル(と私のSQLスクリプト)がブラウザのURL行から動作していることをテストできました。

これまでのところすべて良いです。 CRONに。上記の例に従えば、ほぼ成功しました。私は* .phpファイルのパスの前にPHPを呼び出すことになりました。さもなければ、CRONはそのファイルで何をすべきかを知らなかった。

私のcronは1日に1回実行するように設定されており、セキュリティのためにこのように変更されています。

00 * * * * php mywebsiteurl.com/wp-content/themes/ForteChildTheme/php/DeleteExpiredAssessment.php

はCRONでの最終テストのために私は、最初は毎分実行するように設定して、電子メールアラートがオンになっていました。これは、計画どおりに実行されていることをすぐに確認し、1日に1回に戻しました。

これが役に立ちます。

関連する問題