Bagaimana cara menyalin database MongoDB menggunakan PHP sekarang bahwa copydb sudah usang

10

Dalam MongoDB versi 4.2 copydbdan copyDatabasepembungkusnya sudah usang. Manual MongoDB menyarankan bahwa kita sekarang harus menggunakan mongodumpdan mongorestore. Tapi saya memanggil perintah copy dari PHP menggunakan driver PHP MongoDB dan perintah dump and restore adalah perintah yang perlu dijalankan dari baris perintah dan tidak memiliki PHP yang setara. Bagaimana saya bisa menyalin database menggunakan PHP?

Carlos Granados
sumber
1
Walaupun mungkin untuk menjalankan mongodump / mongorestore dari PHP dengan fungsi-fungsi shell_exec, hampir tidak mungkin untuk mengunduh seluruh basis data ke klien dan kemudian mengunggahnya kembali.
Alex Blex
Saya kira saya tidak mengerti alur kerja Anda. Apakah Anda hanya ingin membuat backup / restore db pada mesin atau Anda ingin memberikan up / unduh yang sama melalui situs web / layanan (via php)?
mrgremlin
Saya ingin menyalin basis data untuk tujuan pengujian. Kami memiliki database dengan semua pengaturan awal kami untuk pengujian dan saya ingin menyalinnya ke database pengujian sebelum tes dijalankan. Ini biasanya dimulai dari jarak jauh melalui permintaan yang ditangani oleh PHP
Carlos Granados
1
Hanya untuk mengklarifikasi mengapa beberapa solusi internal akan bagus: pada sistem seperti Debian atau Alpine (dalam versi sebelumnya yang masih dikirimkan MongoDB), Anda harus menginstal paket lain untuk tambahan semua alat shell. Ini mungkin tidak ada pada semua sistem yang memiliki pengaturan MongoDB yang sedang berjalan
Nico Haase

Jawaban:

3

Anda dapat menggunakan "mongodump" dan "mongorestore" seperti yang Anda sebutkan juga. Di PHP, Anda bisa menggunakan shell_exec untuk menjalankan perintah. Sebagai contoh:

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

Harap dicatat nsFrom dan nsTo adalah untuk mengubah nama namespace jika Anda membutuhkannya. Lihat lebih detail di sini .

Jika Anda ingin menyalin dump ke host lain, coba gabungkan --host params dari mongorestore. Jadi, dalam hal ini, perintah pemulihan Anda adalah:

$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
sumber
1
Itu mungkin tetapi itu secara signifikan mempersulit pengaturan aplikasi dengan dependensi CLI eksternal, itu akan memerlukan untuk memesan ruang SDD yang signifikan pada semua server aplikasi untuk membuang database (beberapa kali dalam kasus permintaan bersamaan), itu akan menimbulkan biaya transfer data dan mungkin cukup lambat. Dengan kata lain - tidak apa-apa sebagai pekerjaan manual satu kali tetapi tidak untuk sistem produksi.
Alex Blex
Setuju dengan Alex Blex. "Solusi" ini hanya 100% lebih kompleks dari alternatif sebelumnya
Carlos Granados