mcpField
T
tigris-backup-export

tigris-backup-export

github.com/tigrisdataクラウド・DevOps275 回インストール14 週間前に更新
リポジトリ

tigris-backup-export について

データベースのバックアップ、アプリケーションデータのエクスポート、ファイルの Tigris への保管を扱うスキルです。複数の主要フレームワークを使う開発者向けに、定期実行、保持ポリシー、復元手順と実装例を示します。

主な機能

  1. 01データベースダンプの圧縮とアップロード
  2. 02スケジュールに沿ったバックアップ実行
  3. 03ライフサイクルルールによる旧バックアップ削除
  4. 04指定バックアップのダウンロードと復元
  5. 05複数フレームワークの実装例

活用シーン

  1. 01データベースの定期バックアップ設定
  2. 02保持期間に応じた古いファイルの削除
  3. 03Tigris のバックアップからのデータベース復元
  4. 04Rails、Django、Laravel へのバックアップ導入

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tigrisdata/skills --skill tigris-backup-export

インストール後、Claude Code で/tigris-backup-exportを入力して読み込まれたか確認します。

同梱ファイルmetadata.jsonREADME.md

詳細

Tigris のバックアップとエクスポート

データベースをバックアップし、アプリケーションデータをエクスポートして、ファイルを Tigris にアーカイブします。主要なフレームワークすべてに対応した、自動バックアップパイプライン、保持ポリシー、復元ワークフローを扱います。

前提条件

ほかの作業を始める前に、まだ利用できない場合は Tigris CLI をインストールしてください。

tigris help || npm install -g @tigrisdata/cli

インストールが必要な場合は、ユーザーに次のように伝えてください。「Tigris オブジェクトストレージを利用できるように、Tigris CLI(@tigrisdata/cli)をインストールしています。」

概要

コンポーネント目的
バックアップスクリプトデータベースをダンプし、圧縮して Tigris にアップロードします
スケジューラーcron スケジュールでバックアップを実行します
保持古いバックアップを自動的に削除します(ライフサイクルルール)
復元特定のバックアップをダウンロードして復元します

命名規則: backups/db/YYYY-MM-DDTHH:MM:SSZ.sql.gz


一般的なパターン

#!/bin/bash
# scripts/backup.sh
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
BACKUP_FILE="backup-${TIMESTAMP}.sql.gz"
BUCKET="my-app-backups"

# Dump and compress
pg_dump "$DATABASE_URL" | gzip > "/tmp/$BACKUP_FILE"

# Upload to Tigris
tigris cp "/tmp/$BACKUP_FILE" "t3://$BUCKET/backups/db/$BACKUP_FILE"

# Clean up local file
rm "/tmp/$BACKUP_FILE"

echo "Backup uploaded: backups/db/$BACKUP_FILE"

MySQL の場合:

mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "/tmp/$BACKUP_FILE"

Next.js / Express(Node.js)

import { exec } from "child_process";
import { promisify } from "util";
import { createReadStream } from "fs";
import { unlink } from "fs/promises";
import { put } from "@tigrisdata/storage";

const execAsync = promisify(exec);

async function backupDatabase() {
  const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
  const filename = `backup-${timestamp}.sql.gz`;
  const localPath = `/tmp/${filename}`;

  // Dump and compress
  await execAsync(
    `pg_dump "${process.env.DATABASE_URL}" | gzip > "${localPath}"`,
  );

  // Upload to Tigris
  const stream = createReadStream(localPath);
  const result = await put(`backups/db/${filename}`, stream, {
    contentType: "application/gzip",
    multipart: true,
    config: { bucket: "my-app-backups" },
  });

  // Clean up
  await unlink(localPath);

  if (result.error) throw result.error;
  return result.data?.path;
}
node-cron でスケジュールする
import cron from "node-cron";

// Daily at 2 AM UTC
cron.schedule("0 2 * * *", async () => {
  try {
    const path = await backupDatabase();
    console.log(`Backup complete: ${path}`);
  } catch (error) {
    console.error("Backup failed:", error);
  }
});

Rails

Rake タスク

注: Tigris のネイティブな Ruby SDK はまだありません。Tigris を指定した aws-sdk-s3 を使用します。

# lib/tasks/backup.rake
namespace :db do
  desc "Backup database to Tigris"
  task backup: :environment do
    require "aws-sdk-s3"

    timestamp = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
    filename = "backup-#{timestamp}.sql.gz"
    local_path = "/tmp/#{filename}"

    # Dump and compress
    db_config = ActiveRecord::Base.connection_db_config.configuration_hash
    system("pg_dump '#{db_config[:url] || build_pg_url(db_config)}' | gzip > '#{local_path}'")

    # Upload to Tigris
    s3 = Aws::S3::Client.new(
      endpoint: "https://t3.storage.dev",
      region: "auto",
      access_key_id: ENV["AWS_ACCESS_KEY_ID"],
      secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
    )

    File.open(local_path, "rb") do |file|
      s3.put_object(
        bucket: ENV["TIGRIS_BACKUP_BUCKET"],
        key: "backups/db/#{filename}",
        body: file,
        content_type: "application/gzip",
      )
    end

    File.delete(local_path)
    puts "Backup uploaded: backups/db/#{filename}"
  end
end
whenever でスケジュールする
# config/schedule.rb (whenever gem)
every 1.day, at: "2:00 am" do
  rake "db:backup"
end

Django

管理コマンド

tigris-boto3-ext を使用します(インストール:pip install tigris-boto3-ext)。Python/Django の全般的な対応については、tigris-python-sdk スキルを参照してください。

# myapp/management/commands/dbbackup.py
import gzip
import subprocess
from datetime import datetime, timezone
from django.core.management.base import BaseCommand
from django.conf import settings
import boto3
from botocore.client import Config

class Command(BaseCommand):
    help = "Backup database to Tigris"

    def handle(self, *args, **options):
        timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
        filename = f"backup-{timestamp}.sql.gz"
        local_path = f"/tmp/{filename}"

        # Dump and compress
        db = settings.DATABASES["default"]
        dump_cmd = (
            f'pg_dump "postgresql://{db["USER"]}:{db["PASSWORD"]}'
            f'@{db["HOST"]}:{db["PORT"]}/{db["NAME"]}"'
        )
        with gzip.open(local_path, "wb") as f:
            result = subprocess.run(dump_cmd, shell=True, capture_output=True)
            f.write(result.stdout)

        # Upload to Tigris
        s3 = boto3.client(
            "s3",
            endpoint_url="https://t3.storage.dev",
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
            region_name="auto",
            config=Config(s3={"addressing_style": "virtual"}),
        )
        s3.upload_file(
            local_path,
            settings.TIGRIS_BACKUP_BUCKET,
            f"backups/db/{filename}",
        )

        import os
        os.unlink(local_path)
        self.stdout.write(f"Backup uploaded: backups/db/{filename}")
python manage.py dbbackup
celery-beat でスケジュールする
# settings.py
CELERY_BEAT_SCHEDULE = {
    "daily-backup": {
        "task": "myapp.tasks.backup_database",
        "schedule": crontab(hour=2, minute=0),
    },
}

Laravel

Artisan コマンド
// app/Console/Commands/BackupDatabase.php
namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;

class BackupDatabase extends Command
{
    protected $signature = 'db:backup';
    protected $description = 'Backup database to Tigris';

    public function handle()
    {
        $timestamp = now()->utc()->format('Y-m-d\TH:i:s\Z');
        $filename = "backup-{$timestamp}.sql.gz";
        $localPath = "/tmp/{$filename}";

        // Dump and compress
        $dbUrl = config('database.connections.pgsql.url')
            ?? sprintf('postgresql://%s:%s@%s:%s/%s',
                config('database.connections.pgsql.username'),
                config('database.connections.pgsql.password'),
                config('database.connections.pgsql.host'),
                config('database.connections.pgsql.port'),
                config('database.connections.pgsql.database'),
            );

        exec("pg_dump \"{$dbUrl}\" | gzip > \"{$localPath}\"");

        // Upload to Tigris
        Storage::disk('tigris')->put(
            "backups/db/{$filename}",
            file_get_contents($localPath),
        );

        unlink($localPath);
        $this->info("Backup uploaded: backups/db/{$filename}");
    }
}
Kernel でスケジュールする
// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('db:backup')->dailyAt('02:00');
}

または、spatie/laravel-backup を使用します:

composer require spatie/laravel-backup
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

config/backup.php で tigris ディスクを設定します。


復元

# List backups
tigris ls t3://my-app-backups/backups/db/

# Download and restore
tigris cp t3://my-app-backups/backups/db/backup-2026-03-18T02:00:00Z.sql.gz /tmp/restore.sql.gz
gunzip /tmp/restore.sql.gz
psql "$DATABASE_URL" < /tmp/restore.sql

保持ポリシー

古いバックアップを自動削除するには、Tigris のライフサイクルルールを使用します:

tigris buckets lifecycle set my-app-backups --config lifecycle.json
{
  "Rules": [
    {
      "ID": "delete-old-backups",
      "Filter": { "Prefix": "backups/db/" },
      "Status": "Enabled",
      "Expiration": { "Days": 30 }
    }
  ]
}

推奨する保持期間:

種類保持期間
日次バックアップ30 日
週次バックアップ90 日
月次バックアップ1 年

重要なルール

必ず行うこと: アップロード前に圧縮する(gzip) | ファイル名にタイムスタンプを含める | 保持/ライフサイクルルールを設定する | 定期的に復元をテストする | バックアップバケットの認証情報をアプリの認証情報とは別に保管する

行ってはいけないこと: バックアップをアプリケーションデータと同じバケットに保存する | データベースダンプの圧縮を省略する | アップロード後にローカルの一時ファイルを削除し忘れる


関連スキル

  • tigris-lifecycle-management — 古いバックアップを自動削除します
  • tigris-security-access-control — バックアップ用認証情報を分離します
  • file-storage — CLI の設定とアクセスキーの管理

公式ドキュメント

コメント