Cronで、MySQLのSQLクエリを定期的に実行する

Cronを使ってMySQLのSQLクエリを自動実行する方法

MySQLのDBのメンテンナンスで定期的にupdate, delete分を実行したい場合があります。
そのようなケースではMySQLのSQL文を実行するシェルスクリプトを作成してCronで実行すると便利ですのでその方法を紹介します。

具体的な流れは以下となります

  1. 実行するSQL文をテキストファイルに書き出す
  2. SQLファイルを実行するシェルスクリプトを作成
  3. Cronに登録する

実行するSQLをテキストファイルに書き出す

実行するSQL文をテキストファイルに保存します。今回はサンプルとして、my_databaseデータベースのlogsテーブルから30日以上前のレコードを削除するクエリを実行する下記のようなSQL分です

# 実行するSQL文
DELETE FROM logs WHERE log_date < NOW() - INTERVAL 30 DAY;

上記のSQL文をテキストファイルに保存します

$ echo "DELETE FROM logs WHERE log_date < NOW() - INTERVAL 30 DAY;" > /home/admin/script/script.sql

SQLファイルを実行するシェルスクリプトを作成

SQLファイルを実行するシェルスクリプトを作成します。MySQLのユーザー名・パスワード・DB名を以下となります

  • ユーザー名=“db_admin"
  • PASSWORD=“dercv034m1"
  • DATABASE=“my_database"
$ vim /home/admin/script/run_query.sh

#!/bin/bash

# データベースの認証情報
# ユーザー名
USER="db_admin"
# パスワード
PASSWORD="dercv034m1"
# データベース
DATABASE="my_database"

# SQLクエリの実行
mysql -u $USER -p$PASSWORD $DATABASE < /home/admin/script/script.sql

シェルスクリプトを作成したら、実行権限を付与します

$ chmod +x /home/admin/script/run_query.sh

Cronに登録する

Cronで深夜2時に作成したシェルスクリプトを実行するように設定します

$ crontab -e
0 2 * * * /home/admin/script/run_query.sh >/dev/null 2>&1