现在不建议使用copydb,如何使用PHP复制MongoDB数据库


10

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


1
即使可以使用shell_exec之类的功能从PHP运行mongodump / mongorestore,也很难将整个数据库下载到客户端,然后再上传回客户端。
亚历克斯·布莱克斯

我想我不理解您的工作流程。您是否只是想在计算机上创建数据库备份/还原,还是要通过网站/服务(通过php)提供数据库的备份/还原?
mrgremlin

我要复制数据库以进行测试。我们有一个包含所有用于测试的初始设置的数据库,我想在运行测试之前将其复制到测试数据库。这通常是通过PHP处理请求远程启动
卡洛斯·格拉纳多斯

1
只是为了阐明为什么一些内部解决方案会很棒:在像Debian或Alpine这样的系统(仍在MongoDB之前发行的以前的版本)上,您必须安装其他软件包用于其他Shell工具。这些可能并非在所有运行MongoDB设置的系统上都存在
Nico Haase

Answers:


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。该“解决方案”仅比以前的解决方案复杂100%
Carlos Granados
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.