Cách sao chép cơ sở dữ liệu MongoDB bằng PHP ngay bây giờ khi copydb không được dùng nữa


10

Trong MongoDB phiên bản 4.2 copydbcopyDatabasetrình bao bọc của nó đã không được chấp nhận. Hướng dẫn MongoDB gợi ý rằng bây giờ chúng ta nên sử dụng mongodumpmongorestore. Nhưng tôi đã gọi lệnh sao chép từ PHP bằng trình điều khiển MongoDB của PHP và các lệnh kết xuất và khôi phục là các lệnh cần được chạy từ dòng lệnh và không có bất kỳ tương đương PHP nào. Làm thế nào bây giờ tôi có thể sao chép cơ sở dữ liệu bằng PHP?


1
Ngay cả khi có thể chạy mongodump / mongorestore từ PHP với loại hàm shell_exec, việc tải toàn bộ cơ sở dữ liệu về máy khách rồi tải lại là điều không khả thi.
Alex Blex

Tôi đoán tôi không hiểu quy trình làm việc của bạn. Bạn chỉ đơn giản muốn tạo một bản sao lưu / khôi phục db trên máy hoặc bạn muốn cung cấp một bản tải xuống / tải xuống tương tự thông qua một trang web / dịch vụ (thông qua php)?
mrgremlin

Tôi muốn sao chép một cơ sở dữ liệu cho mục đích thử nghiệm. Chúng tôi có một cơ sở dữ liệu với tất cả các thiết lập ban đầu để thử nghiệm và tôi muốn sao chép nó vào cơ sở dữ liệu thử nghiệm trước khi chạy thử nghiệm. Điều này thường được bắt đầu từ xa thông qua một yêu cầu được xử lý bởi PHP
Carlos Granados

1
Chỉ cần làm rõ lý do tại sao một số giải pháp nội bộ sẽ là tuyệt vời: trên các hệ thống như Debian hoặc Alpine (trong các phiên bản cũ vẫn vận chuyển MongoDB), bạn phải cài đặt một gói khác cho các công cụ shell bổ sung. Chúng có thể không xuất hiện trên tất cả các hệ thống có thiết lập MongoDB đang chạy
Nico Haase

Câu trả lời:


3

Bạn có thể sử dụng "mongodump" và "mongorestore" như bạn đã đề cập. Trong PHP, bạn có thể sử dụng shell_exec để chạy các lệnh. Ví dụ:

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

Xin lưu ý nsFrom và nsTo để đổi tên không gian tên nếu bạn cần. Xem thêm chi tiết tại đây .

Trong trường hợp bạn muốn sao chép kết xuất sang máy chủ khác, hãy thử kết hợp --host params của mongorestore. Vì vậy, trong trường hợp đó, lệnh khôi phục của bạn sẽ là:

$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
Có thể nhưng nó làm phức tạp đáng kể việc thiết lập ứng dụng với các phụ thuộc CLI bên ngoài, nó sẽ yêu cầu dự trữ không gian SDD đáng kể trên tất cả các máy chủ ứng dụng để đổ cơ sở dữ liệu (nhiều lần trong trường hợp yêu cầu đồng thời), nó sẽ phải chịu chi phí chuyển dữ liệu và có thể khá chậm Nói cách khác - nó là một công việc thủ công một lần nhưng không phải cho các hệ thống sản xuất.
Alex Blex

Đồng ý với Alex Blex. "Giải pháp" này phức tạp hơn 100% so với giải pháp thay thế trước đó
Carlos Granados
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.