Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
既然copydb已被弃用,如何使用PHP复制MongoDB数据库_Php_Mongodb - Fatal编程技术网

既然copydb已被弃用,如何使用PHP复制MongoDB数据库

既然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

在MongoDB版本4.2中,copydb及其
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%