Як скопіювати бази даних MongoDB за допомогою PHP тепер, коли copydb застарілий


10

У версії 4.2 MongoDB copydbта її copyDatabaseобгортці було вимкнено. Посібник MongoDB пропонує, що ми повинні зараз використовувати mongodumpта mongorestore. Але я викликав команду копіювання з PHP за допомогою драйвера PHP MongoDB, а команди dump і відновлення - це команди, які потрібно запустити з командного рядка і не мають жодного еквівалента PHP. Як зараз можна скопіювати базу даних за допомогою PHP?


1
Навіть через те, що можна запустити mongodump / mongorestore з PHP з функціями типу shell_exec, навряд чи можливо завантажити всю базу даних до клієнта та потім завантажити її назад.
Алекс Блекс

Я думаю, я не розумію твій робочий процес. Ви просто хочете створити резервну копію / відновлення db на машині або хочете забезпечити їх завантаження / завантаження через веб-сайт / службу (через php)?
mrgremlin

Я хочу скопіювати базу даних для тестування. У нас є база даних з усіма нашими початковими налаштуваннями для тестування, і я хочу скопіювати її до тестової бази даних до запуску тестів. Зазвичай це було ініційовано віддалено через запит, який розглядав PHP
Carlos Granados

1
Для того, щоб уточнити, чому якесь внутрішнє рішення було б чудовим: у таких системах, як Debian або Alpine (у колишніх версіях, які все ще постачаються MongoDB), вам довелося встановити ще один пакет додаткових інструментів оболонки. Вони можуть бути присутніми не у всіх системах, які мають встановлену програму MongoDB
Ніко Хааз

Відповіді:


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 мають перейменувати простір імен, якщо це потрібно. Детальніше дивіться тут .

Якщо ви хочете скопіювати дамп на інший хост, спробуйте поєднати --host params mongorestore. Отже, у такому випадку командою відновлення буде:

$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-простір на всіх серверах додатків, щоб скинути базу даних (кілька разів у разі одночасних запитів), це понесе витрати на передачу даних і може бути досить повільний. Іншими словами - це нормально як одноразова ручна робота, але не для виробничих систем.
Алекс Блекс

Погодьтеся з Алексом Блекс. Це "рішення" просто на 100% складніше, ніж попередня альтернатива
Карлос Гранадос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.