うめぼしジョイスティック - ivoice

CakePHP、JavaScript、jQuery等のプログラミングについて書いていきます 思考は、うめぼしのように硬く、そして柔らかく。

さくらインターネットでCRONを用いてシェルスクリプトを実行し、SQL文でバッチ処理を行う方法(MySQL)

自分の作ったMySQLのデータベースに対して、定期的(一日一回、など)にSQLクエリを実行したい、という場合があると思います。 ランキングサイトを作っている場合や、スコア計算などを行う必要がある場合などです。 年度や年が変わったときにSQLクエリを実行して再計算をしたい場合なども考えられます。

ここではCRONという自動実行プロセスを用いた方法を紹介します。 さくらインターネットではスタンダードプランからCRONが使えます。

バッチ処理で設定した時刻にSQL文を実行します。

まず、cron.shというファイルを作ります。 (名前は .sh という拡張子ならなんでもいいです)

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

最初の2行はこのように書いて下さい。 そのあと、MySQLにログインするコマンドを書きます。

以下のようになります。

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

mysql -u ユーザ名 -h ホスト名 -pデータベースパスワード(pのあとに空白は空けない) --default-character-set=utf8 << EOF
use データベース名;

SQLクエリ文1;
SQLクエリ文2;
SQLクエリ文3;
SQLクエリ文4;

EOF

最後にSQLクエリ文をかきましょう。; を忘れないで下さい。 クエリは実行する順番に何個でも書けます。

一番最後に EOF と記述し、スクリプトの記述を終了します。

これを wwwと同列の階層にアップロードします。 アップロードしたら、『ファイルのパーミッション設定』(FileZillaなら右クリック) で、「数値」の部分を700に設定しましょう。

そして、「さくらインターネットコントロールパネル」→「アプリケーションの設定」の 中にある【CRONの設定】を選びます。

CRON設定一覧の右下にある >>新規項目の追加 をクリックして、実行するシェルファイルを設定します。

『実行コマンド』は

sh /home/ドメイン名/cron.sh

と入力しましょう。cron.shが、実行するシェルスクリプトファイルです。

あとは、実行日時を入力します。 『送信』を押して、実行できるか確認してみましょう。

(データベースのテーブルをエクスポートしてバックアップをとり、 テストをしてみることをオススメします。 もしくは適当なカラムを追加して そのカラムのみ変更をしてみましょう。)

これで、任意の時間にMySQLのクエリ文をデータベースで実行して、様々なバッチ処理をすることができます。

以上です。