MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sync MongoDB Qua ssh

Bạn có thể thực hiện điều này với SSH Tunneling, thiết lập phiên bản MongoDB từ xa của bạn để chạy trên một trong các cổng cục bộ của bạn. Theo mặc định, MongoDB chạy trên 27017, vì vậy trong ví dụ dưới đây, tôi đã chọn ánh xạ phiên bản MongoDB từ xa của mình với cổng 27018 cục bộ của tôi.

Nếu bạn đang cố gắng sao chép cơ sở dữ liệu từ SERVER1 sang LOCALHOST, bạn có thể chạy lệnh này trên LOCALHOST của mình:

ssh -L27018:localhost:27017 SERVER1

(Rõ ràng là thay thế SERVER1 bằng máy chủ thực tế hoặc bí danh ssh của bạn)

Thao tác này mở kết nối SSH tới SERVER1, nhưng cũng ánh xạ cổng 27018 trên LOCALHOST tới cổng từ xa 27017 trên SERVER1. Đừng đóng kết nối SSH đó và bây giờ hãy thử kết nối với MongoDB trên máy localhost của bạn bằng cổng 27018, như sau:

mongo --port 27018

Bạn sẽ nhận thấy đây bây giờ là dữ liệu trên SERVER1, ngoại trừ việc bạn đang truy cập nó từ máy cục bộ của mình.

Chỉ chạy MongoDB bình thường:

mongo (hoặc mongo --port 27107 )

Sẽ là máy cục bộ của bạn.

Bây giờ, vì về mặt kỹ thuật, bạn có (trên LOCALHOST của bạn, nơi bạn chạy đường hầm SSH):

  • MongoDB (LOCALHOST) vào 27017
  • MongoDB (SERVER1) trên 27018

Bạn chỉ có thể sử dụng db.copyDatabase() chức năng bên trong MongoDB (LOCALHOST) để sao chép dữ liệu.

TỪ LOCALHOST TRÊN CỔNG 27017 (Thực thi trực tiếp sẽ XÓA DỮ LIỆU CỦA BẠN)

// Use the right DB
use DATABASENAME; 
// Drop the Existing Data on LOCALHOST
db.dropDatabase();
// Copies the entire database from 27018
db.copyDatabase("DATABASENAME", "DATABASENAME", "localhost:27018");

Bạn có thể gói tất cả điều này thành một tập lệnh shell có thể thực thi tất cả các lệnh này cho bạn. Bản thân tôi cũng có một cái, nhưng nó thực sự có một vài bước bổ sung có thể làm cho nó khó hiểu hơn một chút :)

Làm điều này và sử dụng hàm db.copyDatabase () gốc của MongoDB sẽ giúp bạn không phải kết xuất / zip / khôi phục. Tất nhiên, nếu bạn vẫn muốn đi theo con đường đó, sẽ không quá khó để chạy mongodump , xuất dữ liệu, tar / gzip nó, sau đó sử dụng scp TARGETSERVER:/path/to/file /local/path/to/file để kéo nó xuống và chạy mongorestore trên đó.

Có vẻ như có nhiều việc hơn!

Chỉnh sửa - Đây là tệp SH và JS kết hợp với nhau để tạo một tập lệnh shell mà bạn có thể chạy tệp này. Chạy những điều này trên LOCALHOST của bạn , không chạy chúng trực tiếp nếu không nó sẽ chạy trực tiếp db.dropDatabase. Đặt hai tệp này vào cùng một thư mục và thay thế YOURSERVERNAME trong pull-db.sh với bí danh miền / ip / ssh, rồi trong pull-db.js thay đổi DBNAMEHERE thành bất kỳ tên cơ sở dữ liệu nào của bạn.

Tôi thường tạo một thư mục có tên là scripts trong các dự án của tôi và sử dụng Textmate, tôi chỉ cần nhấn ⌘+R trong khi có pull-db.sh mở để chỉnh sửa để thực thi nó.

pull-db.sh

ssh -L27018:localhost:27017 YOURSERVERNAME '
    echo "Connected on Remote End, sleeping for 10"; 
    sleep 10; 
    exit' &
echo "Waiting 5 sec on local";
sleep 5;
echo "Connecting to Mongo and piping in script";
cat pull-db.js | mongo

pull-db.js

use DBNAMEHERE;
db.dropDatabase();
use DBNAMEHERE;
db.copyDatabase("DBNAMEHERE","DBNAMEHERE","localhost:27018");

Tôi đã thêm một số mã bổ sung vào tập lệnh shell để lặp lại những gì nó đang làm (sorta). Bộ định thời gian ngủ trong tập lệnh chỉ để cung cấp cho các kết nối SSH thời gian được kết nối trước khi dòng tiếp theo được chạy. Về cơ bản, đây là những gì sẽ xảy ra:

  1. Dòng đầu tiên của mã tạo đường hầm trên máy của bạn và gửi ECHO, SLEEP, sau đó EXIT đến phiên SSH từ xa.
  2. Sau đó, nó đợi 5 giây, điều này cho phép phiên SSH ở bước 1 kết nối.
  3. Sau đó, chúng tôi chuyển tệp pull-db.js vào shell mongo cục bộ. (Bước # 1 sẽ được thực hiện trong vòng 5 giây ...)
  4. pull-db.js hiện đang chạy trong mongo và thiết bị đầu cuối SSH ở Bước # 1 có thể đã chạy trong 10 giây sau khi kết nối được mở và EXIT được gửi đến phiên của nó. Lệnh được đưa ra, TUY NHIÊN, phiên SSH sẽ thực sự mở cho đến khi hoạt động từ Bước 3 hoàn tất.
  5. Ngay sau khi tập lệnh pull-db.js của bạn kết thúc việc kéo tất cả dữ liệu của bạn từ máy chủ từ xa, lệnh EXIT được đưa ra ở Bước # 1 trên máy chủ từ xa cuối cùng cũng được phép đóng kết nối, hủy liên kết 27108 trên máy chủ cục bộ của bạn.

Bây giờ bạn sẽ có tất cả dữ liệu từ cơ sở dữ liệu từ xa trong máy chủ cục bộ của mình.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để thay đổi tên bộ sưu tập trong mongoose.model?

  2. Công cụ MongoDB từ cộng đồng mà cụm điều khiển bổ sung

  3. Cách thiết kế môi trường cơ sở dữ liệu nguồn mở khả dụng cao

  4. MongoDB $ allElementsTrue

  5. MongoDB $ ReplaceOne