2016-06-28 74 views
4

我有一個MongoDB的副本集3名成員(版本2.4),其中對「管理」數據庫管理員用戶不具有「userAdminAnyDatabase」的作用。鎖定之外的MongoDB副本集

此角色是管理所有數據庫上的用戶所必需的。

我目前擁有的角色:「readWriteAnyDatabase」,「dbAdminAnyDatabase」,「clusterAdmin」]

我試圖更新爲自己的角色或創建新的用戶,但是我沒有權限訪問db.system管理數據庫中的用戶。

我試着設置noauth = true,但沒有幫助。當刪除密鑰文件時,數據庫無法與其他成員同步(顯然),並陷入RECOVERY狀態。

我發現了一個similar question是指一個獨立的數據庫(沒有副本集),所以它並沒有真正在這種情況下幫助。

什麼是在系統停機時間最短的情況下添加此角色的最佳方式?

回答

1

我會用mongodumpmongorestore備份數據,然後重新與正確的權限節點和恢復數據。

但是這種做法應該work

如果你已經把自己鎖了,那麼你需要做到以下幾點:

  1. 停止你的MongoDB實例
  2. 取出--auth和/或從您的MongoDB的配置 --keyfile選項來禁用認證
  3. 沒有認證
  4. 啓動實例
  5. 編輯用戶根據需要
  6. 重新啓動身份驗證的情況下啓用
+0

謝謝,就像我在問題中所寫的,禁用副本集中主節點的身份驗證不允許它連接到羣集。此外,mongodump和恢復將導致非常長的停機時間。 – odedfos

1

當您使用蒙戈2.4,這意味着你有MMAP作爲存儲引擎。

我的建議是:

  1. 創建類似副本的每個主機上,但不同的端口,並設置數據庫目錄上同媒體當前的設置。
  2. 配置所有auth的東西一樣運行那些
  3. 停止舊副本集成員
  4. MOVE數據庫文件到新的目錄新副本不含地方
  5. 更改端口設置
  6. 啓動

由於文件移動到其他目錄只是一個指針昌這需要幾秒鐘的時間。

請在實施前測試。

歡迎任何評論!

+0

如何在沒有操作日誌的情況下移動數據庫文件(不包括本地)影響新的副本集?它會知道如何同步?另外,如果由於複製滯後導致所有成員之間的數據不準確會怎樣?順便說一句,我的存儲引擎是tokumx – odedfos

+0

沒有使用tokmux的經驗......你需要恢復首先是主人的那個 – profesor79

+0

只是想... oplog需要轉移 - 但仍然考慮存儲引擎和方式我們可以重申一下...... – profesor79