Como copiar bancos de dados MongoDB usando PHP agora que o copydb está obsoleto

10

No MongoDB versão 4.2 copydbe seu copyDatabasewrapper foi preterido. O manual do MongoDB sugere que devemos agora usar mongodumpe mongorestore. Mas eu estava chamando o comando copy do PHP usando o driver PHP MongoDB e os comandos dump and restore são comandos que precisam ser executados na linha de comando e não possuem nenhum equivalente em PHP. Como posso copiar um banco de dados usando PHP agora?

Carlos Granados
fonte
11
Mesmo que seja possível executar o mongodump / mongorestore do PHP com o tipo de funções shell_exec, dificilmente é possível fazer o download de todo o banco de dados para o cliente e enviá-lo novamente.
Alex Blex #
Acho que não entendo seu fluxo de trabalho. Deseja simplesmente criar um backup / restauração de banco de dados na máquina ou deseja fornecer um up / download do mesmo através de um site / serviço (via php)?
Mrgremlin 14/11/19
Quero copiar um banco de dados para fins de teste. Temos um banco de dados com toda a nossa configuração inicial para teste e quero copiá-lo no banco de dados de teste antes da execução dos testes. Este foi geralmente iniciada remotamente através de um pedido tratados pelo PHP
Carlos Granados
11
Apenas para esclarecer por que alguma solução interna seria ótima: em sistemas como Debian ou Alpine (em versões anteriores que ainda vendiam o MongoDB), era necessário instalar outro pacote para outras ferramentas shell. Estes podem não estar presentes em todos os sistemas que têm uma configuração MongoDB executando
Nico Haase

Respostas:

3

Você pode usar "mongodump" e "mongorestore" conforme mencionado também. No PHP, você pode usar o shell_exec para executar os comandos. Por exemplo:

$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);

Observe que nsFrom e nsTo devem renomear o espaço para nome, se necessário. Veja mais detalhes aqui .

Caso você queira copiar o dump para outro host, tente combinar os parâmetros --host do mongorestore. Portanto, nesse caso, seu comando de restauração seria:

$restoreCommand = "mongorestore --host=mongodb1.example.net --port=27017 --username=user --password=$PSWD --authenticationDatabase=admin --archive='/tmp/mongodump-dev-db' --db=test";
shell_exec($restoreCommand);
Rajat Arora
fonte
11
É possível, mas complica significativamente a configuração do aplicativo com dependências externas da CLI, exigirá reservar espaço SDD significativo em todos os servidores de aplicativos para despejar o banco de dados (várias vezes em caso de solicitações simultâneas), incorrendo em custos de transferência de dados e pode ser bastante lento. Em outras palavras - tudo bem como um trabalho manual único, mas não para sistemas de produção.
Alex Blex
Concordo com Alex Blex. Esta "solução" é apenas 100% mais complexa do que a alternativa anterior
Carlos Granados