マイクラサーバーのバックアップは「サーバーを停止してからコピーする」のが従来の基本形です。 ただしJava版記事で推奨しているDocker構成(itzg/minecraft-server)なら、もっとよい方法があります。バックアップ専用のサイドカーコンテナ「itzg/mc-backup」を1つ足すだけで、サーバーを止めずに、整合性のあるバックアップを自動で取り続けられます。当サイトの運営者も実際にこの構成で運用しています。この記事では、この推奨構成の導入と復元手順を解説します。

mc-backupの仕組み(なぜ止めずに取れるのか)

稼働中のワールドをそのままコピーすると、書き込み途中のデータが混ざってチャンクエラーの原因になります。mc-backupはこの問題をRCON(サーバーへの遠隔コマンド)で解決します。

  1. save-offでワールドの自動保存を一時停止する
  2. save-all flushで現在の状態をディスクへ書き切る
  3. その状態でアーカイブ(tar.gz)を作成する
  4. save-onで自動保存を再開する

RCON自体の設定はRCONの使い方にまとめています。

導入手順

Java版記事のcompose.yamlに、backupsサービスを追記するだけです。全体は次のようになります。

cat <<'EOF' > compose.yaml
services:
  minecraft:
    image: itzg/minecraft-server:java25
    container_name: mc-server
    restart: unless-stopped
    ports:
      - "25565:25565"
    environment:
      EULA: "TRUE"
      MEMORY: "2G"
    volumes:
      - ./data:/data

  backups:
    image: itzg/mc-backup
    container_name: mc-backup
    restart: unless-stopped
    environment:
      BACKUP_INTERVAL: "24h"
      RCON_HOST: minecraft
    volumes:
      - ./data:/data:ro
      - ./backups:/backups
EOF

ポイントは2つです。

  • サーバーと同じ./dataを読み取り専用(:ro)でマウントする(バックアップ側からワールドを壊せない)
  • RCON_HOSTにサーバーのサービス名(ここではminecraft)を指定する(save-off等のコマンドを送るため)

RCONまわりの補足です。 バニラのサーバーはRCONが既定で無効ですが、itzgのサーバーイメージはコンテナ内でRCONが既定で有効になっており、mc-backupはこれを利用します。 25575番ポートをコンテナネットワークの外部に公開していないため、外部からRCONに対してアクセスできません。 パスワードも両イメージの既定値が一致しているため設定不要です。パスワードを変更している場合は、それぞれに対して変更してください。

主な環境変数は次のとおりです。

環境変数既定値意味
BACKUP_INTERVAL24hバックアップの間隔
INITIAL_DELAY2m起動から初回バックアップまでの待ち時間
PRUNE_BACKUPS_DAYS7この日数より古いバックアップを自動削除
PAUSE_IF_NO_PLAYERSfalsetrueでプレイヤー不在時はバックアップを休止

起動して確認します。

sudo docker compose up -d
sudo docker logs mc-backup

./backupsにworld-日時.tgzの形式でファイルが作られていれば成功です。 サーバーの起動が終わる前はmc-backupのログにUnable to execute rcon-cliのエラーが数回出ますが、リトライして自動的に成功するので心配いりません。

復元の手順

復元は「停止→退避→展開→起動確認」の4ステップです。

sudo docker compose down
mv data data_old
mkdir data
tar -xzf backups/world-復元したい日時.tgz -C data
sudo docker compose up -d

起動してワールドを確認できたら、退避したdata_oldを削除します。

よくある質問

サーバーを動かしたままバックアップしてもいいですか

mc-backup経由なら問題ありません。RCONで保存を一時停止してから取るため、整合性が保たれます。 手動でコピーする場合は必ず停止してから行ってください。

どのくらいの頻度で取ればいいですか

既定の24時間間隔を基本に、何かしらのイベントの直前直後は手動でも1回取っておくと安心です。手動実行はmc-backupコンテナの再起動でも代用できます(起動時に初回バックアップが走ります)。

とくにサーバーのバージョンを上げる直前は必ず1回取ってください。 バージョン26.1以降で一度開いたワールドは以前のバージョンに戻せないため、更新前のバックアップが唯一の戻り道です。

バックアップには何が含まれますか

/dataの中身が丸ごと入ります。

古いバックアップでディスクが埋まりませんか

既定で7日より古いものは自動削除されます(PRUNE_BACKUPS_DAYS)。保持期間は環境変数で調整できます。

まとめ

  • Docker構成ならmc-backupサイドカーが推奨。compose.yamlにサービスを1つ足すだけ
  • RCON連携(save-off→save-all→tar→save-on)で、無停止でも整合性のあるバックアップになる

参考リンク