サーバレスのサムネイル

サーバレス

Cloudfalre D1データベースを自動で定時バックアップする方法

Cloudfalre D1データベースの本番データベースを、Bashスクリプトで自動かつ定時バックアップする方法をご紹介。

編集ノート:SERVERSUSでは、パートナーリンクからコミッションを得ています。コミッションが記事の意見や、サービスの評価に影響を与えることはありません。

Cloudfalre D1データベースはwranglerコマンドでダウンロードが可能

Cloudfalre D1で展開中のデータベースは、wranglerコマンドでダウンロードやアップロードができます1

都度ダウンロードするのも良いですが、バックアップを取るなら定時で自動で行うのがベストです。

Cloudfalre D1データベースを提示バックアップする

今回は、シェルスクリプトで実行させます。

#!/bin/bash

# npxのフルパス (anyenvを使っている場合)
NPX_PATH="$HOME/.anyenv/envs/nodenv/shims/npx"

# Cloudflare D1 のデータベース一覧を JSON 形式で取得
echo "Fetching database list..."
DB_LIST=$($NPX_PATH wrangler d1 list --json | jq -r '.[].name')

# バックアップディレクトリ(ユーザーホームのデスクトップ)
BACKUP_DIR="$HOME/Desktop"

# データベース一覧が空でないか確認
if [ -z "$DB_LIST" ]; then
    echo "No databases found. Exiting."
    exit 1
fi

# 各データベースをバックアップ
for DB_NAME in $DB_LIST; do
    OUTPUT_FILE="$BACKUP_DIR/$DB_NAME.sql"
    echo "Backing up database: $DB_NAME → $OUTPUT_FILE"

    # エクスポートコマンドの実行
    $NPX_PATH wrangler d1 export "$DB_NAME" --remote --output="$OUTPUT_FILE"

    # 成功・失敗のチェック
    if [ $? -eq 0 ]; then
        echo "✅ Backup completed: $OUTPUT_FILE"
    else
        echo "❌ Backup failed for: $DB_NAME"
    fi
done

echo "🎉 All backups completed."

やってることは簡単で、

  1. wranglerでデーターベース一覧を取得
  2. データベースごとにexportを実行

だけです。

今回は、デスクトップに保存する形ですが、BACKUP_DIRの場所を任意の場所にすれば、好きな場所に保存ができます。DropboxやGoogle Driveのフォルダに指定しておけば、クラウドへも自動バックアップができます。

あとは、このスクリプトをcronなどで定時実行すれば、自動でバックアップを取ることができます。

Footnotes

  1. Import and export data | Cloudflare

価格は記載がある場合を除き、すべて税込みです。

関連キーワード

サーバレスの新着記事