PythonでMongoDBのバックアップ・リストアを完全攻略!初心者でも安心のデータ保存術
生徒
「先生、もしパソコンが壊れたり、間違えてデータを全部消しちゃったりしたら、MongoDBに保存したデータはどうなっちゃうんですか?」
先生
「それは大変なことになりますね。でも大丈夫。万が一の時に備えてデータをコピーしておく『バックアップ』と、それを元に戻す『リストア』という方法がありますよ。」
生徒
「Pythonを使って、自動でバックアップを取ることもできるんですか?」
先生
「もちろんです!Pythonから専用の道具を呼び出すことで、人間が手作業をしなくても安全にデータを守ることができます。基本からじっくり学んでいきましょう!」
1. バックアップとリストアとは?データの避難訓練
プログラミングの世界でデータを扱うとき、最も恐ろしいのはデータの消失です。バックアップとは、今あるデータベースの内容を別の場所に「複製(コピー)」して保管しておくことです。パソコンを触ったことがない方に例えると、大切な日記をコピー機で複写して、火事や紛失に備えて別の金庫に預けておくようなイメージです。
そしてリストアとは、その保管しておいたコピーを使って、元の状態に「復元」する作業のことです。もし日記を失くしてしまっても、金庫からコピーを取り出せば、また読み書きができるようになりますよね。MongoDBには、この作業を効率的に行うための mongodump(モンゴダンプ)と mongorestore(モンゴリストア)という専用の道具が用意されています。これらをPythonから操ることで、最強のデータ保護環境を作ることができます。
2. MongoDBの標準ツール「mongodump」を理解しよう
MongoDBには、バックアップを作成するための mongodump というプログラムが最初から備わっています。これは、データベースの中身を「BSON(ビーソン)」という、コンピューターが読み書きしやすい特殊な形式のファイルに書き出す役割を持っています。
Python自体にはデータを丸ごと保存する機能はありませんが、Pythonの「subprocess(サブプロセス)」という仕組みを使うと、この mongodump を魔法の杖のように呼び出して、自動でバックアップを実行させることができます。これによって、毎日決まった時間にバックアップを取るような仕組みも簡単に作れるようになります。
3. Pythonでバックアップを実行する基本コード
それでは、実際にPythonからバックアップを指示してみましょう。ここでは subprocess.run という命令を使います。これは、Pythonの中からパソコン自体の別のプログラム(この場合は mongodump)を実行するための命令です。
以下のコードは、自分のパソコンで動いているMongoDBのデータを「backup_data」というフォルダに保存する例です。初心者の方は、まずこの「別のプログラムを呼び出す」という感覚を掴んでみてください。
import subprocess
# バックアップを保存する場所を指定します
output_dir = "my_mongodb_backup"
# mongodumpを実行するための命令文を作ります
# --out は「ここに保存してね」という指示です
command = ["mongodump", "--out", output_dir]
print("バックアップを開始します...")
# パソコンに命令を送ります
result = subprocess.run(command)
if result.returncode == 0:
print("バックアップが正常に完了しました!")
else:
print("バックアップに失敗しました。")
実行すると、指定したフォルダの中に、データベースと同じ名前のフォルダが作られ、その中に大切なデータが詰め込まれます。
4. 特定のデータベースだけをバックアップする方法
全てのデータをバックアップすると、容量をたくさん使ってしまいます。「このアプリのデータだけ保存したい」という時は、対象を絞り込むことができます。これには --db というオプション(追加の指示)を使います。
図書館にある全ての棚をコピーするのではなく、「料理の本の棚だけ」をコピーするようなイメージです。必要なものだけをバックアップすることで、時間も短縮できますし、保管場所も節約できます。Pythonのリストの中に、絞り込みたいデータベースの名前を書き加えるだけでOKです。
import subprocess
# 特定のデータベース「shop_db」だけをバックアップします
db_name = "shop_db"
backup_path = "specific_backup"
# --db の後に名前を指定するのがルールです
command = ["mongodump", "--db", db_name, "--out", backup_path]
subprocess.run(command)
print(f"{db_name} のバックアップが完了しました!")
5. データを元に戻す「リストア」の実行手順
さて、次は保存しておいたコピーを使ってデータを元に戻すリストアの番です。使う道具は mongorestore です。これは mongodump で作ったファイルを読み取って、MongoDBの中に再び書き込んでくれる頼もしい味方です。
パソコンを触ったことがない方は、バックアップを「録音」、リストアを「再生」だと考えると分かりやすいでしょう。録音しておいたテープを再生することで、当時の音が蘇るように、保存したファイルから当時のデータが再現されます。リストアを実行する際は、どのフォルダから読み込むかを指定するだけで、あとは自動でやってくれます。
import subprocess
# 以前バックアップしたフォルダを指定します
backup_folder = "my_mongodb_backup"
# mongorestore を呼び出して元に戻します
restore_command = ["mongorestore", backup_folder]
print("データの復元(リストア)を開始します...")
# 実行!
result = subprocess.run(restore_command)
if result.returncode == 0:
print("データの復元が成功しました。元通りです!")
6. 日付を付けて管理する!賢いバックアップ術
バックアップを毎回同じ名前のフォルダに上書きしてしまうと、昨日の状態に戻したいと思っても一昨日のデータしか残っていない、という事態になりかねません。そこで、フォルダ名に「日付」を入れるのがプロのやり方です。
Pythonの datetime(デートタイム)という機能を使えば、その時の日付や時間を自動で名前に組み込むことができます。これにより、「2026年2月25日のデータ」といった形で、アルバムのように過去のデータを整理して保管できるようになります。
import subprocess
from datetime import datetime
# 今日の日付を「2026-02-25」のような文字にします
today = datetime.now().strftime("%Y-%m-%d")
folder_name = f"backup_{today}"
# 日付入りのフォルダに保存する命令
command = ["mongodump", "--out", folder_name]
subprocess.run(command)
print(f"日付「{today}」を付けて保存しました。")
7. 圧縮して保存!容量を節約する「--gzip」
データが大きくなってくると、バックアップファイルも巨大になり、ハードディスクを圧迫します。そんな時に便利なのが --gzip(ジー・ジップ)という指示です。これは、データをぎゅっと押しつぶして小さくする「圧縮」の機能です。
布団圧縮袋のように、中身はそのままにサイズだけを小さくして保存できます。リストアするときも、自動で元の大きさに戻してくれるので手間はかかりません。Pythonからこの指示を一言付け加えるだけで、あなたのパソコンの空き容量を賢く守ることができます。
8. 認証がある場合のバックアップ設定
セキュリティのために合言葉(パスワード)を設定している場合、バックアップを取る際もその合言葉を教える必要があります。これを忘れると、「許可がないのでコピーできません」と断られてしまいます。
具体的には --username(ユーザー名)と --password(パスワード)という指示を使います。Pythonコードの中では、これらの情報を安全に扱わなければなりません。合言葉を知っている人だけがバックアップを取れるようにすることで、データの持ち出し(盗難)を防ぐことができます。これも立派なセキュリティ対策の一部です。
9. リストア時の注意!データの上書きに気をつけよう
リストアは非常に強力な操作ですが、一つ注意点があります。それは、今のデータベースに既にあるデータと同じものがあった場合、どう扱うかです。標準の設定では、今のデータを消さずに上書きしようとしますが、設定次第では今のデータを一度全部消してから復元することもできます。
初心者のうちは、リストアを実行する前に「本当に今のデータを書き換えてもいいか」を一度深呼吸して考えるようにしましょう。不安な場合は、今の状態も念のためバックアップを取ってから、古いデータをリストアするのが一番安全な方法です。
10. 安全に運用するための定期実行のススメ
バックアップは一度取って満足するものではありません。毎日、毎週と定期的に行うことで初めて意味を持ちます。Pythonなら「スケジュール実行」という仕組みを使えば、あなたが寝ている間に自動でバックアップを済ませておくことも可能です。
データを守ることは、アプリの利用者や自分自身の努力を守ることと同じです。今回学んだバックアップとリストアの基本を身につければ、万が一パソコンがトラブルに見舞われても、笑顔でデータを復活させることができます。Pythonという強力なツールを使って、データの守護神を目指しましょう!