2026年10月2日

2026年10月2日

UpdraftPlusのバックアップエラーを解決する方法

はじめに

UpdraftPlusでバックアップが途中で止まる・Google DriveやDropboxへのアップロードが「認証エラー」になる・バックアップファイルが作成されるのに復元できない・WP-CRONが動かないためスケジュールバックアップが実行されないといった問題は、タイムアウト・認証トークンの期限切れ・サーバーの制限が原因です。

症状・原因

  • バックアップを開始しても数分で「バックアップ失敗」になる
  • Google Driveの接続テストは成功するのにアップロードが失敗する
  • バックアップファイルをダウンロードして復元しようとするとエラーになる
  • スケジュールバックアップが設定した時刻に実行されない

解決手順

ステップ1:UpdraftPlusの状態を確認する

# UpdraftPlusのバージョンとバックアップ履歴を確認
wp eval "
if (class_exists('UpdraftPlus')) {
    global \$updraftplus;
    echo 'UpdraftPlus version: ' . \$updraftplus->version . PHP_EOL;
}

// バックアップ履歴を確認
\$backups = UpdraftPlus_Options::get_updraft_option('updraft_backup_history', []);
echo 'Backup history count: ' . count(\$backups) . PHP_EOL;
foreach (array_slice(\$backups, 0, 3, true) as \$timestamp => \$backup) {
    printf('  %s | DB: %s | Files: %s' . PHP_EOL,
        date('Y-m-d H:i', \$timestamp),
        isset(\$backup['db']) ? 'YES' : 'NO',
        isset(\$backup['plugins']) ? 'YES' : 'NO'
    );
}
"

# WP-CRONスケジュールを確認
wp eval "
\$events = _get_cron_array();
foreach (\$events as \$time => \$crons) {
    foreach (\$crons as \$hook => \$data) {
        if (str_contains(\$hook, 'updraft')) {
            printf('Hook: %s | Next: %s' . PHP_EOL,
                \$hook,
                date('Y-m-d H:i', \$time)
            );
        }
    }
}
"

# バックアップを手動で開始
wp eval "
global \$updraftplus;
\$updraftplus->boot_backup(true, true, false, true);
echo 'Manual backup initiated' . PHP_EOL;
"

ステップ2:バックアップの設定とタイムアウトを修正する

// functions.php: UpdraftPlusの設定カスタマイズ

// ① バックアップのタイムアウトを延長
add_filter('updraft_backup_timeout', function(int $timeout): int {
    return 1200; // 20分に延長(デフォルト300秒)
});

// ② バックアップ除外パターンを設定
add_filter('updraft_exclude_from_backup', function(array $excludes, string $type): array {
    if ($type === 'uploads') {
        // 動画ファイルと一時ファイルを除外
        $excludes[] = '*.mp4';
        $excludes[] = '*.avi';
        $excludes[] = 'tmp/';
        $excludes[] = '.cache/';
    }
    if ($type === 'others') {
        // WP Rocketのキャッシュを除外
        $excludes[] = 'cache/';
    }
    return $excludes;
}, 10, 2);

// ③ バックアップ完了時の通知をカスタマイズ
add_action('updraft_backup_complete', function(array $backup_data): void {
    $admin_email = get_option('admin_email');
    $site_name   = get_bloginfo('name');

    wp_mail(
        $admin_email,
        "[$site_name] バックアップ完了",
        sprintf(
            "バックアップが正常に完了しました。\n\n完了時刻: %s\n含まれるファイル: %s",
            current_time('Y-m-d H:i:s'),
            implode(', ', array_keys($backup_data))
        )
    );
});

ステップ3:クラウドストレージの認証を修正する

# Google Drive認証状態を確認
wp eval "
\$options = UpdraftPlus_Options::get_updraft_option('updraft_googledrive', []);
echo 'Google Drive settings:' . PHP_EOL;
echo '  Client ID: ' . (empty(\$options['clientid']) ? 'NOT SET' : substr(\$options['clientid'], 0, 20) . '...') . PHP_EOL;
echo '  Token: ' . (empty(\$options['token']) ? 'NOT SET' : 'SET (expires check needed)') . PHP_EOL;
"

# ストレージ接続テスト
wp eval "
global \$updraftplus;
\$service = 'googledrive'; // or 'dropbox', 's3', etc.
\$instance_id = '';
\$result = \$updraftplus->storage_can_use(\$service);
echo 'Storage test (' . \$service . '): ' . (\$result ? 'OK' : 'FAILED') . PHP_EOL;
"
// functions.php: UpdraftPlusストレージ設定

// ① S3互換ストレージを使用する場合の設定確認
add_filter('updraft_s3_options', function(array $options): array {
    // エンドポイントを明示的に設定(S3互換サービス用)
    if (empty($options['endpoint'])) {
        $options['endpoint'] = 'https://s3.ap-northeast-1.amazonaws.com';
    }
    return $options;
});

// ② FTPバックアップのパッシブモードを強制
add_filter('updraft_ftp_passive', '__return_true');

// ③ バックアップファイルを分割するサイズを調整
add_filter('updraft_upload_chunksize', function(int $size): int {
    // 2MBチャンクでアップロード(低速回線対応)
    return 2 * 1024 * 1024;
});

ステップ4:WP-CRONとスケジュールを修正する

// functions.php: UpdraftPlusスケジュール管理

// ① WP-CRONが動かない場合の代替スケジュール設定
add_action('init', function(): void {
    // UpdraftPlusのバックアップスケジュールが消えていたら再登録
    if (!wp_next_scheduled('updraft_backup')) {
        // 毎日深夜2時にバックアップ
        $next_run = strtotime('tomorrow 02:00:00');
        wp_schedule_event($next_run, 'daily', 'updraft_backup');
        error_log('[UpdraftPlus] Rescheduled daily backup');
    }

    if (!wp_next_scheduled('updraft_backup_database')) {
        $next_run = strtotime('tomorrow 02:30:00');
        wp_schedule_event($next_run, 'daily', 'updraft_backup_database');
        error_log('[UpdraftPlus] Rescheduled daily DB backup');
    }
});

// ② バックアップ失敗時のリトライ
add_action('updraft_backup_failed', function(string $message): void {
    error_log('[UpdraftPlus] Backup failed: ' . $message);

    // 30分後に再試行
    if (!wp_next_scheduled('updraft_backup_retry')) {
        wp_schedule_single_event(time() + 1800, 'updraft_backup_retry');
    }
});

add_action('updraft_backup_retry', function(): void {
    global $updraftplus;
    error_log('[UpdraftPlus] Retrying backup...');
    $updraftplus->boot_backup(true, true, false, true);
});

ステップ5:バックアップの復元とデバッグ

# バックアップファイルの整合性確認
wp eval "
\$backup_dir = UpdraftPlus_Options::get_updraft_option('updraft_dir', WP_CONTENT_DIR . '/updraft');
echo 'Backup directory: ' . \$backup_dir . PHP_EOL;

if (is_dir(\$backup_dir)) {
    \$files = glob(\$backup_dir . '/*.zip');
    echo 'Backup files: ' . count(\$files) . PHP_EOL;
    foreach (array_slice(\$files, -5) as \$file) {
        printf('  %s | %.1f MB' . PHP_EOL,
            basename(\$file),
            filesize(\$file) / 1024 / 1024
        );
    }
}
"

# データベースバックアップのみ手動実行
wp eval "
global \$updraftplus;
\$updraftplus->boot_backup(false, true, false, true);
echo 'Database-only backup initiated' . PHP_EOL;
"
// functions.php: UpdraftPlusデバッグ設定

// ① UpdraftPlusのデバッグログを有効化
add_filter('updraft_debug_level', function(int $level): int {
    return 2; // 詳細ログを出力
});

// ② バックアップログをカスタムファイルに出力
add_action('updraft_backup_log', function(string $message, int $level): void {
    if ($level >= 2) {
        error_log('[UpdraftPlus] ' . $message);
    }
}, 10, 2);

注意事項

  • UpdraftPlusのバックアップはWP-CRONに依存しています。wp-config.phpにdefine('DISABLE_WP_CRON', true);が設定されている場合はスケジュールバックアップが動きません。システムCRONでwget -q -O - https://your-site.com/wp-cron.php?doing_wp_cronを定期実行する設定を推奨します
  • Google Driveの認証トークンは定期的に更新が必要です。「UpdraftPlus → 設定 → Google Drive」でトークンを再認証してください。認証が切れると「invalid_grant」エラーでアップロードが失敗します
  • 大規模サイトのバックアップはメモリとディスク容量を大量消費します。バックアップ前にサーバーの空き容量を確認し、updraft_exclude_from_backupフィルターで大容量ファイル(動画等)を除外設定してください

まとめ

UpdraftPlus修復は①UpdraftPlus_Options::get_updraft_option('updraft_backup_history')でバックアップ履歴確認・WP-CRONスケジュール診断、②updraft_backup_timeoutフィルターでタイムアウトを20分に延長・updraft_exclude_from_backupで動画・キャッシュを除外、③updraft_upload_chunksizeフィルターで2MBチャンクアップロードに変更、④wp_schedule_event()でバックアップスケジュールを再登録・updraft_backup_failedフックで30分後リトライを設定、⑤updraft_debug_levelフィルターで詳細ログを有効化して原因を特定する手順で解決します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲