c0d3man52

Webサイト制作

macOSのAutomatorアプリでDBサーバーを自動バックアップする

macOSのAutomatorアプリでDBサーバーを自動バックアップする方法を作ったので、まとめました。

公開日: 2025.1.20

流れ

MySQL DBサーバーのバックアップとしては、通常サーバー自体でmysqldumpを実行して、どこからに保存をすることが多いですが、今回はシンプルにMacBookでmysqldumpをして、iCloudドライブにクラウド保存する方法にしました。

MySQLデータベースは200MB程度の小さなDBですが、圧縮すると1/10程度まで小さくなるため、5GBと小さなiCloudドライブでも十分にバックアップストレージとして役に立ちます。

流れとしては、

  1. Automatorアプリでmysqldump & Gzip & 直近7日以外のファイルを削除するスクリプトを作る
  2. カレンダーアプリで提示実行

という感じです。簡単で、プログラムの知識があまりなくてもできるのがメリットです。

Automatorでアプリを作成

まずは、Automatorでアプリを作ります。

  1. Automatorアプリを開く
  2. アプリケーションをクリック
  3. 左カラムの「ライブラリ」からユーティリティ -> シェルスクリプトを実行を選択
  4. 以下のコードを挿入して、保存
#!/bin/bash

# MySQL 接続情報
DB_HOST=""
DB_USER=""
DB_PASSWORD=""
DB_NAME=""
DB_PORT=""
DATE=$(date +'%Y-%m-%d_%H-%M-%S')

# iCloudドライブの書類フォルダをバックアップ先に指定
BACKUP_DIR="$HOME/Documents/Backups/directus-db"

# バックアップディレクトリが存在しない場合は作成
if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p "$BACKUP_DIR"
fi

# mysqldumpを使ったバックアップ実行
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$DATE.sql"
mysqldump -h"$DB_HOST" -P "$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_FILE"

# 実行結果を確認
if [ $? -eq 0 ]; then
    echo "Backup successful: $BACKUP_FILE"

    # 圧縮処理
    gzip "$BACKUP_FILE"
    if [ $? -eq 0 ]; then
        echo "Backup compressed: ${BACKUP_FILE}.gz"
    else
        echo "Failed to compress the backup file."
        exit 1
    fi
else
    echo "Backup failed. Please check your credentials or connection."
    exit 1
fi

# 7日前を超えた圧縮ファイルを削除
find "$BACKUP_DIR" -type f -name "${DB_NAME}_backup_*.sql.gz" -mtime +7 -exec rm {} \;

mysqldumpが必要になるので、brewでインストールしておきましょう。

brew install mysql

iCloudドライブ の書類はローカル書類と同期しているので、そこに保存すれば自動でiCloudドライブに保存されます。

Automatorファイルをカレンダーアプリで提示実行

macOS標準のカレンダーアプリは、ファイルの実行も可能です。

  1. 実行したい時間に予定を作成
  2. 普通に予定を作る
  3. 「通知」を「カスタム」にして、「ファイルを開く」を選択

これで、cronと同じ感覚で実行ができます。


ということで、macOSのAutomatorアプリでDBサーバーを自動バックアップする方法を開設しました。

AutomatorもカレンダーアプリもどちらもmacOSの標準アプリで、使いこなすと非常に強力なアプリです。

ぜひ使ってみてください。