マイクラサーバーのバックアップは「サーバーを停止してからコピーする」のが従来の基本形です。 ただしJava版記事で推奨しているDocker構成(itzg/minecraft-server)なら、もっとよい方法があります。バックアップ専用のサイドカーコンテナ「itzg/mc-backup」を1つ足すだけで、サーバーを止めずに、整合性のあるバックアップを自動で取り続けられます。当サイトの運営者も実際にこの構成で運用しています。この記事では、この推奨構成の導入と復元手順を解説します。
mc-backupの仕組み(なぜ止めずに取れるのか)
稼働中のワールドをそのままコピーすると、書き込み途中のデータが混ざってチャンクエラーの原因になります。mc-backupはこの問題をRCON(サーバーへの遠隔コマンド)で解決します。
save-offでワールドの自動保存を一時停止するsave-all flushで現在の状態をディスクへ書き切る- その状態でアーカイブ(tar.gz)を作成する
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_INTERVAL | 24h | バックアップの間隔 |
| INITIAL_DELAY | 2m | 起動から初回バックアップまでの待ち時間 |
| PRUNE_BACKUPS_DAYS | 7 | この日数より古いバックアップを自動削除 |
| PAUSE_IF_NO_PLAYERS | false | trueでプレイヤー不在時はバックアップを休止 |
起動して確認します。
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)で、無停止でも整合性のあるバックアップになる