copydbが廃止された今、PHPを使用してMongoDBデータベースをコピーする方法


10

MongoDBバージョン4.2 copydbとそのcopyDatabaseラッパーは非推奨になりました。MongoDBのマニュアルは、私たちが今、使用すべきことを示唆しているmongodumpmongorestore。しかし、PHP MongoDBドライバーを使用してPHPからcopyコマンドを呼び出していました。ダンプおよび復元コマンドは、コマンドラインから実行する必要があるコマンドであり、同等のPHPがありません。PHPを使用してデータベースをコピーするにはどうすればよいですか?


1
shell_execのような関数を使用してPHPからmongodump / mongorestoreを実行することは可能ですが、データベース全体をクライアントにダウンロードしてからアップロードすることはほとんど不可能です。
Alex Blex

私はあなたのワークフローを理解していないと思います。単にマシン上にデータベースのバックアップ/復元を作成したいですか、それともウェブサイト/サービス(php経由)を介して同じもののアップ/ダウンロードを提供したいですか?
mrgremlin

テスト用にデータベースをコピーしたい。テストのためのすべての初期設定を含むデータベースがあり、テストを実行する前にそれをテストデータベースにコピーしたいと思います。これは通常、PHPによって処理されたリクエストを通じてリモートで開始されました
Carlos Granados

1
内部ソリューションが優れている理由を明確にするために、DebianやAlpineなどのシステム(MongoDBをまだ出荷している旧バージョン)では、追加のシェルツール用に別のパッケージをインストールする必要がありました。これらは、MongoDBセットアップが実行されているすべてのシステムに存在するわけではありません
Nico Haase

回答:


3

「mongodump」と「mongorestore」も同様に使用できます。PHPでは、shell_execを使用してコマンドを実行できます。例えば:

$backUpCommand = "mongodump --archive='/tmp/mongodump-dev-db' --db=dev";
shell_exec($backUpCommand);

$restoreCommand = "mongorestore --archive='/tmp/mongodump-dev-db' --db=test --nsFrom='test.*' --nsTo='examples.*'";
shell_exec($restoreCommand);

nsFromとnsToは、必要に応じて名前空間の名前を変更することに注意してください。詳細はこちらをご覧ください。

ダンプを別のホストにコピーする場合は、mongorestoreの--host paramsを組み合わせてみてください。したがって、その場合、復元コマンドは次のようになります。

$restoreCommand = "mongorestore --host=mongodb1.example.net --port=27017 --username=user --password=$PSWD --authenticationDatabase=admin --archive='/tmp/mongodump-dev-db' --db=test";
shell_exec($restoreCommand);

1
可能ですが、アプリケーションの設定が外部CLIの依存関係によって大幅に複雑になり、データベースをダンプするためにすべてのアプリケーションサーバーでかなりのSDDスペースを予約する必要があります(同時要求の場合は複数回)。データ転送コストが発生し、スロー。つまり、1回限りの手動のジョブとしては問題ありませんが、実動システムには当てはまりません。
Alex Blex

Alex Blexに同意します。この「ソリューション」は、以前の代替案よりも100%複雑です
カルロスグラナドス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.