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?


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.