既然copydb已被弃用,如何使用PHP复制MongoDB数据库
在MongoDB版本4.2中,copydb及其既然copydb已被弃用,如何使用PHP复制MongoDB数据库,php,mongodb,Php,Mongodb,在MongoDB版本4.2中,copydb及其copyDatabase包装器已被弃用。MongoDB手册建议我们现在应该使用mongodump和mongorestore。但是我使用PHP MongoDB驱动程序从PHP调用copy命令,dump和restore命令是需要从命令行运行的命令,没有任何PHP等效命令。现在如何使用PHP复制数据库?您也可以使用您提到的“mongodump”和“mongorestore”。在PHP中,可以使用shell_exec来运行命令。例如: $backUpComm
copyDatabase
包装器已被弃用。MongoDB手册建议我们现在应该使用mongodump
和mongorestore
。但是我使用PHP MongoDB驱动程序从PHP调用copy命令,dump和restore命令是需要从命令行运行的命令,没有任何PHP等效命令。现在如何使用PHP复制数据库?您也可以使用您提到的“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参数。因此,在这种情况下,您的restore命令是:
$restoreCommand = "mongorestore --host=mongodb1.example.net --port=27017 --username=user --password=$PSWD --authenticationDatabase=admin --archive='/tmp/mongodump-dev-db' --db=test";
shell_exec($restoreCommand);
即使可以从PHP使用shell_exec之类的函数运行mongodump/mongorestore,也很难将整个数据库下载到客户端,然后再上传回来。我想我不了解您的工作流程。您只是想在机器上创建db备份/还原,还是想通过网站/服务(通过php)提供db备份/还原的升级/下载?我想复制数据库以进行测试。我们有一个包含所有初始测试设置的数据库,我想在测试运行之前将其复制到测试数据库中。这通常是通过PHP7处理的请求远程启动的,只是为了澄清为什么某些内部解决方案会很好:在Debian或Alpine(在仍然提供MongoDB的以前版本中)这样的系统上,您必须为其他shell工具安装另一个包。这些可能不会出现在所有具有运行MongoDB设置的系统上。这是可能的,但由于存在外部CLI依赖关系,应用程序设置会变得非常复杂,需要在所有应用程序服务器上保留大量SDD空间以转储数据库(在并发请求的情况下会多次),这将产生数据传输成本,并且可能非常缓慢。换句话说,这是一个一次性的手工作业,但不适用于生产系统。同意Alex Blex的观点。这个“解决方案”比以前的方案复杂100%