如何使用PHP复制MongoDB数据库,现在copydb已经被弃用

11
在MongoDB 4.2版本中,copydb及其copyDatabase包装器已被弃用。MongoDB手册建议我们现在使用mongodumpmongorestore。但我正在使用PHP MongoDB驱动程序从PHP调用复制命令,而转储和恢复命令是需要在命令行中运行的命令,没有任何PHP等效命令。现在我如何使用PHP复制数据库?

1
虽然可以使用shell_exec等函数从PHP运行mongodump/mongorestore,但将整个数据库下载到客户端然后再上传回去几乎是不可行的。 - Alex Blex
我猜我不理解你的工作流程。你只是想在机器上创建一个数据库备份/还原,还是想通过网站/服务(通过php)提供相同的上传/下载? - mrgremlin
我想为测试目的复制一个数据库。我们有一个包含所有初始设置供测试使用的数据库,我想在运行测试之前将其复制到测试数据库中。通常,这是通过由PHP处理的请求远程发起的。 - Carlos Granados
1
只是为了澄清为什么一些内部解决方案会很棒:在像Debian或Alpine这样的系统上(在以前仍然提供MongoDB的版本中),您必须安装另一个软件包以获取额外的shell工具。这些可能不会存在于所有运行MongoDB设置的系统上。 - Nico Haase
1个回答

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参数。因此,在这种情况下,您的还原命令将是:
$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空间来转储数据库(在并发请求的情况下多次进行),这将产生数据传输成本,并且可能非常缓慢。换句话说,这可以作为一次性手动工作,但不适用于生产系统。 - Alex Blex
同意Alex Blex的观点。这个“解决方案”比之前的替代方案复杂了100%。 - Carlos Granados

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接