MySQL Cron ジョブ

Salman Mehmood 2023年6月20日
  1. MySQL Cron ジョブ
  2. テーブルのバックアップを作成する
  3. Cron ジョブを作成する
MySQL Cron ジョブ

この記事の主な目的は、MySQL で記述されたクエリをスケジュールし、Cron ジョブを使用して一定時間後に実行する方法を示すことです。

MySQL Cron ジョブ

大量のデータを扱う場合、特定のタスクが繰り返されることがあります。

それは何でもかまいませんし、タスクのコンテキストに依存します。 例としては、一定量が経過した後にテーブルからエントリを削除することや、データベースのコピーをローカル マシンに保存して時限バックアップを作成することが含まれます。可能性は無限です。

次の表を検討してください。

+------+---------------+-------------+----------------------+------------+
| ID   | Name          | CountryCode | District             | Population |
+------+---------------+-------------+----------------------+------------+
|    1 | Kabul         | AFG         | Kabol                |    1780000 |
|    2 | Qandahar      | AFG         | Qandahar             |     237500 |
|    3 | Herat         | AFG         | Herat                |     186800 |
|    4 | Mazar-e-Sharif| AFG         | Balkh                |     127800 |
|    5 | Amsterdam     | NLD         | Noord-Holland        |     731200 |
|    . | . . . . . . . | . . . . . . | . . . . . . . . . .  |  . . . . . |
|    . | . . . . . . . | . . .  < OUTPUT REDACTED >  . . .  |  . . . . . |
|    . | . . . . . . . | . . . . . . | . . . . . . . . . .  |  . . . . . |
| 4075 | Khan Yunis    | PSE         | Khan Yunis           |     123175 |
| 4076 | Hebron        | PSE         | Hebron               |     119401 |
| 4077 | Jabaliya      | PSE         | North Gaza           |     113901 |
| 4078 | Nablus        | PSE         | Nablus               |     100231 |
| 4079 | Rafah         | PSE         | Rafah                |      92020 |
+------+---------------+-------------+----------------------+------------+

簡単にするために、世界中のさまざまな都市に関するデータを格納する次のテーブルが定期的に更新されると仮定します。 この状況では、テーブルが定期的に更新される前に、テーブルのバックアップがローカル マシンに存在する必要があります。

これを実現するために、cron ジョブを使用してクエリを実行できます。これにより、定期的にテーブルのバックアップが作成されます。 cron ジョブを使用してそれを実現する方法を見てみましょう。

テーブルのバックアップを作成する

スケジュール部分にジャンプする前に、この特定のテーブルをバックアップできるようにするクエリを作成しましょう。

次のクエリを検討してください。

mysql --user=[user] --password=[pass] --database=world --execute="SELECT * from world.city INTO OUTFILE 'D:\\a.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n'"

クエリで何が起こっているかの概要は次のとおりです。

  1. mysql - データベースにアクセスするために実行する MySQL バイナリ
  2. --user=[user - ユーザー名
  3. --password=[pass] - パスワード
  4. --database=world - アクセスして処理するデータベース名、この場合は world
  5. --execute="..." - 実行するクエリ
    5.1. Select * from world.city* - データベース名 world に存在するテーブル world からすべてのエントリを選択します。
    5.2. INTO OUTFILE 'PATH\.csv' - クエリの結果を上記のファイルに書き込みます。
    5.3. FIELDS TERMINATED BY ',' - 各フィールドをコンマで終了します (CSV のような構造の場合)
    5.4. ENCLOSED BY '' - 各フィールドを '' で囲みます
    5.5. LINES TERMINATED BY '\n' - 各行を改行文字で終了します

できれば .sh の形式で、このクエリを任意の場所に保存します。

クエリを作成したので、スケジュールされたタスクとしてクエリを実装することに進むことができます。

Cron ジョブを作成する

スケジュールされたクエリを作成する前に、cron ジョブの一般的な構文を見てみましょう。

一般的な構文は次のとおりです。

a b c d e /path/script result
  1. abcd、および e は、ジョブの時刻、日付、および繰り返しを指定します。
  2. /path/script は、実行する必要があるスクリプトを指定します
  3. result は、ジョブの完了についてユーザーに通知する方法を指定します (オプション)

cron ジョブの時刻形式

cron ジョブが従う時刻形式を見てみましょう。

  1. [a] - 1 分を表し、0 から 59 の範囲で指定できます
  2. [b] - 1 時間を表し、0 から 23 の範囲で指定できます
  3. [c] - 曜日を表し、0 から 31 の範囲で指定できます
  4. [d] - 月を表し、0 (なし) から 12 (12 月) の範囲で指定できます。
  5. [e] - 曜日を表し、0 (なし) から 7 (日曜日) の範囲で指定できます。

Cron ジョブを設定する

cron ジョブを作成するには、お好みのテキスト エディターで crontab 構成ファイルを開きます。

構成ファイルを開くには、ターミナルで次のように記述します。

crontab -e

そこにあなたの仕事を追加してください。 この場合、構文は次のようになります。

0 7 * * * /tmp/back.sh

上記の cron ジョブは毎日午前 7 時に実行され、city テーブルのバックアップが作成され、目的の場所に保存されます。

cron ジョブを追加したら、ファイルを保存して完了です。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn