Как скопировать запись из одной коллекции mongo в другую коллекцию mongo, которая находится на разных хостах, доступных через ssh

У меня есть два экземпляра Mongo на разных хостах (dev и stage), которые могут быть доступны через ssh.

Как скопировать запись из коллекции на экземпляре разработчик и вставить в экземпляр сцена?

Шаги пробовали:

Пытался использовать mongodump и mongorestore, но бесполезно, потому что мои экземпляры mongo доступны через SSH.

0
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При использовании SSH вы можете перенаправить порты MongoDB на локальный компьютер и использовать обычные инструменты MongoDB:

# first terminal
ssh -L27017:localhost:27017 mongohostA

# second terminal
ssh -L27018:localhost:27017 mongohostB

# third terminal
mongodump -h localhost -p 27017 ....
mongorestore -h localhost -p 27018 ....

Что вы здесь делаете, так это подключаете порт 27017 на локальных машинах к mongohostA MongoDB, а порт ваших локальных компьютеров с 27018 на mongohostB MongoDB. Затем просто используйте инструменты MongoDB как обычно, но настройте другие порты. Документацию по этим инструментам можно найти здесь: https://docs.mongodb.com/manual/reference/program/mongodump/

Чтобы это работало в сценарии оболочки, мы используем автоматическое закрытие туннелей SSH. В этом примере мы также используем опцию --query для mongodump:

#!/bin/bash
ssh -f -L27017:localhost:27017 mongohostA sleep 10

mongodump -h localhost -p 27017 -d databaseName -c collectionName \
          --query '{"_id": yourSingleDocumentID }' ....

ssh -f -L27018:localhost:27017 mongohostB sleep 10

mongorestore -h localhost -p 27018 ....

Но как я могу извлечь одну запись из коллекции и восстановить в другой коллекции с помощью обычных инструментов mongo? И можем ли мы добиться этого с помощью сценария bash вместо нескольких терминалов?

Ramavi 11.04.2018 14:06

я добавил пример скрипта.

mikezter 11.04.2018 14:27

Спасибо за его работу, но внес в него небольшую настройку, так как мы не можем восстановить порт 27018 (возможно, mongo не читает с него). Итак, я убил первый процесс, а затем снова подключился, используя 27017, ко второму хосту. #!/bin/bash ssh -f -L27017:localhost:27017 mongohostA sleep 10 mongodump -h localhost -p 27017 -d databaseName -c collectionName \ --query '{"_id": yourSingleDocumentID }' .... lsof -ti:27017 | xargs kill -9 ssh -f -L27017:localhost:27017 mongohostB sleep 10 mongorestore -h localhost -p 27017 ....

Ramavi 12.04.2018 09:04

Другие вопросы по теме