copydb가 더 이상 사용되지 않는 PHP를 사용하여 MongoDB 데이터베이스를 복사하는 방법


10

MongoDB 버전 4.2 copydb및 해당 copyDatabase랩퍼는 더 이상 사용되지 않습니다. MongoDB 매뉴얼은 이제 mongodump와를 사용해야한다고 제안합니다 mongorestore. 그러나 PHP MongoDB 드라이버를 사용하여 PHP에서 copy 명령을 호출했으며 dump 및 restore 명령은 명령 줄에서 실행해야하며 PHP에 해당하는 명령이 없습니다. PHP를 사용하여 데이터베이스를 복사하려면 어떻게해야합니까?


1
심지어 shell_exec 종류의 함수를 사용하여 PHP에서 mongodump / mongorestore를 실행할 수는 있지만 전체 데이터베이스를 클라이언트에 다운로드 한 다음 다시 업로드하는 것은 거의 불가능합니다.
알렉스 블 렉스

워크 플로를 이해하지 못하는 것 같습니다. 머신에서 DB 백업 / 복원을 만들거나 웹 사이트 / 서비스 (php를 통해)를 통해 업 / 다운로드를 제공 하시겠습니까?
mrgremlin

테스트 목적으로 데이터베이스를 복사하고 싶습니다. 테스트를위한 모든 초기 설정이 포함 된 데이터베이스가 있으며 테스트를 실행하기 전에 테스트 데이터베이스에 복사하려고합니다. 이것은 일반적으로 PHP가 처리 한 요청을 통해 원격으로 시작되었습니다.
Carlos Granados

1
일부 내부 솔루션이 좋은 이유를 명확히하기 위해 Debian 또는 Alpine (여전히 MongoDB를 제공 한 이전 버전)과 같은 시스템에서는 추가 쉘 도구를위한 다른 패키지를 설치해야했습니다. MongoDB 설정이 실행중인 모든 시스템에는 이러한 기능이 없을 수 있습니다.
Nico Haase

답변:


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 params를 결합하십시오. 따라서이 경우 복원 명령은 다음과 같습니다.

$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

Alex Blex에 동의하십시오. 이 "해결책은"이전의 대안에 비해 단지 100 % 더 복잡
카를로스 그라나도
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.