Mongorestoreを使用して、MongoDBデータベースを新しいサーバー(両方のバージョンが3.4)に復元しようとしています。新しいサーバーでは-authが有効になっているため、ログインする必要があります。データベースが存在しないため、mongorestoreで--dbオプションを使用してデータベースを作成します。これは、認証が有効になっていないときに機能しますが、認証を有効にすると、次のエラーで復元が失敗します。
失敗:dbサーバーへの接続エラー:SASL認証ステップでサーバーがエラーを返しました:認証に失敗しました。
復元を試みるときに、rootの役割を持つ管理者アカウントを使用しています。
Prodをバックアップしてdevに復元することは、私たちにとってかなり定期的なアクティビティですが、上記のエラーのために既存のデータベースを削除して再作成することはできません。これを行う/ SASLエラーを回避する/認証を無効にする必要がないより良い方法はありますか?
私は同じエラーを受け取りましたが、管理者ユーザーで復元すると何が問題なのか理解できませんでした(私の直感は!
エスケープしても役に立たなかったパスワード)役割専用の新しいユーザーを作成することで、復元できました。
mongo Shellでは:
>use admin;
>db.createUser({
user: 'restoreuser',
pwd: 'restorepwd',
roles: ['restore']
});
ターミナル内:
$mongorestore --Host databasehost:12345 --username restoreuser --password restorepwd --authenticationDatabase admin --db targetdb ./path/to/dump/
PerconaのAdamo Toneteのおかげで、彼はこの問題の解決を助けてくれました。 rootロールを持つ管理者ユーザーを使用してデータベースを復元する場合は、mongorestoreコマンドで認証データベースとユーザーを指定する必要があります。
mongorestore-ホストホスト名:27017 -u adminuser -p pass --authenticationDatabase admin -d TargetDatabase/Data/TargetDatabaseRestore
これにより、mongoにadminデータベースを使用して、渡すユーザーを認証するように指示します。そのユーザーに適切な権限が割り当てられている場合、新しいデータベースを作成できます。
最初にdbを4366ポートにアクセスし、次にこのコマンドを実行します
mongorestore --port 4366 -u admin -p password --authenticationDatabase admin -d dealmoney /home/yash/Desktop/prodDump/teatingToProductionLastDump/dealmoney .