2017-07-11 6 views
2

J'essaye de copier une base de données d'un serveur de Mongo à mon instance de Mongo locale.Comment copier une base de données depuis un serveur Mongo protégé par mot de passe en utilisant pymongo?

Je dois le faire via python et je cours Pymongo 3.4, qui n'a plus la méthode copy_database. Au lieu de cela, j'ai essayé d'utiliser la fonction client.admin.command('copydb', ...) à la place. Cependant, il semble qu'il ne supporte plus l'authentification du serveur Mongo source.

Y a-t-il des solutions de rechange à cela?

Merci

+0

Vous voyez la méthode '' 'command()' '' de la documentation https://api.mongodb.com/python/current/examples/copydb.html#copying-a-database avant de copier les données avec lesquelles vous devez vous authentifier db.admin. –

+1

@juliansalas C'est ce que l'OP essaie d'utiliser. Mais vous ne pouvez pas avec l'authentification SCRAM. Et la documentation là-bas dit cela en bas de la page. Mais la question est essentiellement répondu par "vous ne pouvez pas". Et la raison en est que le [mécanisme actuellement utilisé par le shell] (https://github.com/mongodb/mongo/blob/940a6b62189bface6aec2af698e5e9c4149af258/src/mongo/scripting/mozjs/mongo.cpp#L531) n'est pas encore pris en charge dans le protocole de fil, et fait des choses assez bas niveau. En théorie, vous pouvez implémenter en BSON pur. Mais ce serait difficile. –

+0

En ce qui concerne «la nécessité de copier la base de données», je dirais que toute application régulière ne devrait pas vraiment avoir un tel besoin. Si vous pensez en avoir besoin, en dehors d'essayer d'écrire une sorte d '«outil d'administration et de couteau suisse», votre processus est probablement défectueux et le «besoin de copier la base de données» devrait être réexaminé. Les applications d'usage général ne devraient pas se soucier de telles choses, ni toucher des choses comme ça à un niveau aussi bas. Si c'est "pour un outil", amusez-vous à implémenter le handshake SASL et les commandes BSON brutes. –

Répondre

0

Y a-t-il des solutions de contournement à ce sujet?

Comme mentionné sur les commentaires, il n'y a pas de solution pour copier un serveur source MongoDB authentifié à un autre serveur via PyMongo (version 3.4)

Pour plus d'explications sur la raison derrière elle, s'il vous plaît lire Blog: PyMongo's 'copy_database'

En fonction des besoins, vous pouvez utiliser la méthode mongo shell db.copyDatabase() pour copier d'un mongod à un autre.