Copydb kullanımdan kaldırıldı, şimdi PHP kullanarak MongoDB veritabanlarını kopyalama


10

MongoDB sürüm 4.2 copydbve copyDatabaseambalajında ​​kullanımdan kaldırılmıştır. MongoDB kılavuzu şimdi mongodumpve kullanmamız gerektiğini önermektedir mongorestore. Ama PHP'den PHP MongoDB sürücüsünü kullanarak kopyalama komutunu çağırıyordum ve döküm ve geri yükleme komutları komut satırından çalıştırılması gereken ve herhangi bir PHP eşdeğeri olmayan komutlardır. Şimdi bir veritabanını PHP kullanarak nasıl kopyalayabilirim?


1
PHP'den shell_exec tür fonksiyonları ile mongodump / mongorestore çalıştırmak mümkün olsa bile, tüm veritabanını istemciye indirmek ve daha sonra geri yüklemek neredeyse imkansızdır.
Alex Blex

Sanırım iş akışını anlamıyorum. Sadece makinede bir db yedekleme / geri yükleme oluşturmak istiyor musunuz ya da bir web sitesi / hizmet (php üzerinden) üzerinden yukarı / indirme sağlamak istiyor musunuz?
mrgremlin

Test amacıyla bir veritabanını kopyalamak istiyorum. Test için tüm başlangıç ​​kurulumumuzu içeren bir veritabanımız var ve testler yapılmadan önce test veritabanına kopyalamak istiyorum. Bu genellikle PHP tarafından yönetilen bir istekle uzaktan başlatıldı
Carlos Granados

1
Bazı dahili çözümlerin neden harika olacağını açıklığa kavuşturmak için: Debian veya Alpine gibi sistemlerde (hala MongoDB'yi gönderen eski sürümlerde), tüm kabuk araçları için başka bir paket kurmanız gerekiyordu. Bunlar, çalışan MongoDB kurulumu olan tüm sistemlerde bulunmayabilir
Nico Haase

Yanıtlar:


3

Bahsettiğiniz gibi "mongodump" ve "mongorestore" kullanabilirsiniz. PHP'de, komutları çalıştırmak için shell_exec kullanabilirsiniz. Örneğin:

$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 ve nsTo'ya ihtiyacınız varsa ad alanını yeniden adlandıracağınızı lütfen unutmayın. Daha fazla ayrıntıyı burada görebilirsiniz .

Dökümü başka bir ana bilgisayara kopyalamak istiyorsanız, mongorestore'un --host params parametrelerini birleştirmeyi deneyin. Bu durumda, geri yükleme komutunuz:

$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
Mümkün ama harici CLI bağımlılıkları ile uygulama kurulumunu önemli ölçüde karmaşıklaştırıyor, veritabanını boşaltmak için tüm uygulama sunucularında önemli SDD alanı ayırmayı gerektirecek (eşzamanlı istekler durumunda birden çok kez), veri aktarım maliyetlerine neden olacak ve oldukça yavaş. Başka bir deyişle - bir kerelik manuel iş olarak uygundur, ancak üretim sistemleri için uygun değildir.
Alex Blex

Alex Blex ile aynı fikirde. Bu "çözüm" önceki alternatiften sadece% 100 daha karmaşık
Carlos Granados
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.