mongodb進階三之mongodb管理,mongodb進階管理

來源:互聯網
上載者:User

mongodb進階三之mongodb管理,mongodb進階管理

http://blog.csdn.net/stronglyh/article/details/46827141

平時的開發環境win比較多啊,但生產環境要放到unix環境上

一:命令

安裝就不少了,網上有很多資料下面列一些參數
quiet 安靜輸出
port arg 指定服務連接埠號碼,預設連接埠27017
bind_ip arg 綁定服務IP,綁定127.0.0.1,只本機訪問,預設本地所有IP
logpath arg 指定MongoDB記錄檔,注意是指定檔案不是目錄
logappend 使用追加的方式寫日誌
pidfilepath arg PID File 的完整路徑,如果沒有設定,則沒有PID檔案
keyFile arg 叢集的私密金鑰的完整路徑,只對於Replica Set 架構有效
unixSocketPrefix arg UNIX域通訊端替代目錄,(預設為 /tmp)
fork 以守護進程的方式運行MongoDB,建立伺服器處理序
auth 啟用驗證
cpu 定期顯示CPU的CPU利用率和iowait
dbpath arg 指定資料庫路徑
diaglog arg diaglog選項 0=off 1=W 2=R 3=both 7=W+some reads
directoryperdb 設定每個資料庫將被儲存在一個單獨的目錄
journal 啟用日誌選項,的資料操作將會寫到journal檔案夾檔案裡
journalOptions arg 啟用日誌診斷選項
ipv6 啟用IPv6選項
jsonp 允許JSONP形式通過HTTP訪問(有安全影響)
maxConns arg 最大同時串連數 預設2000
noauth 不啟用驗證
nohttpinterface 關閉http介面,預設關閉27018連接埠訪問
noprealloc 禁用資料檔案預分配(往往影響效能)
noscripting 禁用指令碼引擎
notablescan 不允許表掃描
nounixsocket 禁用Unix通訊端監聽
nssize arg (=16) 設定信資料庫.ns檔案大小(MB)
objcheck 在收到客戶資料,檢查的有效性。
profile arg 檔案參數 0=off 1=slow, 2=all
quota 限制每個資料庫的檔案數,設定預設為8
quotaFiles arg number of files allower per db, requires quota
rest 開啟簡單的rest API
repair 修複所有資料庫run repair on all dbs
repairpath arg 修複庫產生的檔案的目錄,預設為目錄名稱dbpath
slowms arg (=100) value of slow for profile and console log
smallfiles 使用較小的預設檔案
syncdelay arg (=60) 資料寫入磁碟的時間秒數(0=never,不推薦)
sysinfo 列印一些診斷系統資訊
upgrade 如果需要升級資料庫 * Replicaton 參數
fastsync 啟用從庫複製服務,該資料庫是主庫快照,可快速啟用同步
autoresync 如果從庫與主庫同步資料差得多,自動重新同步,
oplogSize arg 設定oplog的大小(MB) * 主/從參數
master 主庫模式
slave 從庫模式
source arg 從庫 連接埠號碼
only arg 指定單一的資料庫複寫
slavedelay arg 設定從庫同步主庫的延遲時間 * Replica set(複本集)選項:
replSet arg 設定複本集名稱 * Sharding(分區)選項
configsvr 聲明這是一個叢集的config服務,預設連接埠27019,預設目錄/data/configdb
shardsvr 聲明這是一個叢集的分區,預設連接埠27018
noMoveParanoia 關閉偏執為moveChunk資料儲存


命令:

mongodb協助命令  help

資料庫級協助命令  db.help()

集合級協助命令 db.users.help()

查看哪些資料庫 show dbs

建立和切換資料庫  use  aaa

查當前資料庫狀態  db.stats()

擷取當前資料庫集合 db.getCollectionNames()

擷取當前資料庫名字  db.getName()

刪除資料庫  db.dropDatebase()

添加使用者 db.addUser("使用者名稱","密碼“)

刪除使用者名稱 db.dropUser("使用者名稱")

終止資料庫服務進程 db.shutdownServer()


二:使用者角色管理

2.1:建立管理員

使用者管理員用來建立的使用者,也用來建立和分配角色。使用者管理員可以擁有資料庫中的任何特權,可以建立新的使用者或者管理員。正常情況下在一個MongoDB的部署中,應該建立使用者管理員作為第一個使用者,然後使用這個使用者建立的所有其他使用者。 為了能夠建立第一個使用者管理員,MongoDB提供userAdmin和userAdminAnyDatabase角色,兩個角色支援使用者和角色管理操作的各種訪問。使用最小許可權userAdmin或者使用userAdminAnyDatabase賦予所有有關的特權。 擁有這兩個角色的使用者可以授予自己無限的特權。具體地,擁有userAdmin角色的使用者可以授予本身資料庫中的任何特權。一個使用者擁有userAdminAnyDatabase角色的使用者管理員可以授予本身在系統中的任何特權。 使用以下步驟建立使用者管理員,首先串連admin資料庫:

mongo --port 27017 --authenticationDatabase admin
然後建立系統使用者:

db.createUser({user: "siteUserAdmin",pwd: "password",roles:
    [{role: "userAdminAnyDatabase",db: "admin"}]}
最後可以驗證一下:

db.runCommand({usersInfo:"manager",showPrivileges:true})


2.2:將使用者添加到資料庫

使用createUser命令將使用者添加到你希望這個使用者擁有相應許可權的資料庫中。下面的例子是賦予testUser資料庫test的讀許可權,密碼是12345678。

use test
db.createUser({
      user: "testUser",
      pwd: "12345678",
      roles: [
         { role: "read", db: "test" },
      ]
    }
)


2.3:設定超級使用者

建立一個超級使用者需要有何建立使用者管理員一樣的許可權。

use admin
db.createUser(
    {
      user: "superuser",
      pwd: "12345678",
      roles: [ "root" ]
    }
)


2.4:建立角色

建立一個使用者角色使用createRole這個命令。每一個角色可以通過privileges授予一些系統特權,通過roles來授予一些資料庫系統管理權限。writeConcern參數是保障寫操作的可靠性。

use admin
db.createRole(
  {
    role: "myClusterwideAdmin",
    privileges:
    [
      { resource: { cluster: true }, actions: [ "addShard" ] },
      { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert" ] },
      { resource: { db: "users", collection: "usersCollection" }, actions: [ "update" ] },
      { resource: { db: "", collection: "" }, actions: [ "find" ] }
    ],
    roles:
    [
      { role: "read", db: "admin" }
    ],
    writeConcern: { w: "majority" , wtimeout: 5000 }
  }
)
)


2.5:分配角色

使用者指派角色使用grantRolesToUser命令。可以給使用者指派各個資料庫的各種系統管理權限。

use admin
db.grantRolesToUser(
  "accountAdmin01",
  [
    {
      role: "readWrite", db: "products"
    },
    {
      role: "readAnyDatabase", db:"admin"
    }
  ]
)


2.6:驗證使用者權限

驗證使用者的角色使用getRole命令。

use admin
db.getUser("accountUser01")
db.getRole( "siteRole01", { showPrivileges: true } )


2.7:修改使用者存取權限

修改使用者的存取權限revokeRolesFromUser命令。

use admin
db.grantRolesToUser(
    "accountUser01",
    [
      { role: "read", db: "records" }
    ]
)
db.revokeRolesFromUser(
    "accountUser01",
    [
      { role: "readWrite", db: "accounts" }
    ]
)


2.8:更改使用者名稱密碼

修改使用者的密碼changeUserPassword命令。

db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")


三:存取控制安全

3.1:mongodb為每個資料庫提供了授權和認證。Mongodb認證,授權使用者,是在資料庫層級上,Mongodb把使用者的憑據放在system.users collection中,認證預設是關閉的,可以通過auth,keyFile配置選項設定。對於Mongodb企業版可以使用kerberos來認證。

在一個資料庫上,你只能認證一個使用者,如果認證了第二個,第一個就會被放棄。

Mongodb規定授權是以role為基礎的。每個授權的使用者都儲存在system.users中,要給使用者指派角色,必須要有一個管理角色的使用者在資料庫中,如果沒有就必須建立一個。

預設的,MongoDB會認為所啟動並執行環境是安全的,沒有進行資料庫的安全性和身分識別驗證。在這樣的配置環境下,唯一要確保的是只有信任的機器才能串連到MongoDB連接埠。如果使用資料庫專用伺服器,最簡單的方法是讓它完全的無法從外部存取,將MongDB服務綁定--bind_ip到指定ip上。更進一步的可以在指定一個連接埠--port。

如果在一個不信任的環境中使用MongoDB就涉及到如何讓MongoDB運行在安全模式上。MongoDB通過--auth和--keyfile參數的使用來啟動安全模式用以支援身分識別驗證和簡單的粗粒度存取控制。

3.2:使用密鑰檔案
如果要使用key檔案,那麼在mongod啟動的時候指定keyfile選項。 一般使用openssl產生keyfile檔案:

openssl rand -base64 741 -out /var/lib/mongodb/keyfile0
chmod 600  /var/lib/mongodb/keyfile0
特別說明:如果指定keyfile內容的話,MongoDB會跳過keyfile裡面的空格。 如:echo "test sets" > /var/lib/mongodb/keyfile0

mongod --keyfile /var/lib/mongodb/keyfile0 --fork      

3.3:如何使用管理員認證
採用管理員認證的方式認證,首先要建立一個管理使用者,上節我們講過如何建立管理員以及如何系統管理權限和密碼。有了管理使用者或者啟動使用者,即可通過--auth參數來啟動MongoDB。

mongod --auth                      
如果通過設定檔啟用管理員認證,只需要把auth的設定改為true即可。

mongod /etc/mongod.conf --fork   


四:複製資料檔案

如何進行複製
通過複製資料檔案即可完成資料庫的備份和恢複,這種方式簡單明了。


一般經過以下步驟:


1.鎖定資料庫或關閉資料庫。


2.複製資料檔案到相應的目錄。


3.解鎖資料庫或重啟資料庫。


特別說明:如果只需要複製名為test的資料庫,則可以複製全部的test.*來完成。


4.1:如何鎖定資料庫
進行備份時為了防止資料檔案發生變化引起問題,可以使用以下命令將資料庫鎖定:

db.fsyncLock()
這個命令禁止所有寫入,並將髒頁寫入磁碟保證資料不再變化。這個時候的寫操作都會在記憶體中排隊等待了,直到資料庫解鎖。


4.2:複製資料檔案
建立一個複製資料檔案的目標目錄:

mkdir /usr/backup
完成資料檔案複製的命令使我們很熟悉的cp命令,必須輸入以下命令才能進行到下一節:

cp -R /var/lib/mongodb/*  /usr/backup  #你需要做備份的目錄,確保目錄已經存在。
確保備份目錄容量夠大,漏掉檔案可能備份會失效。如果是備份到其他介質,可以直接指定目錄。linux下/mnt目錄一般是裝置目錄,外置裝置一般在該目錄下。


4.3:如何解鎖資料庫
完成資料檔案的複製後,就可以使用以下命令將資料庫解鎖,恢複資料庫的正常運行狀態:

db.fsyncUnlock()
調用db.fsyncUnlock()和db.fsyncLock()命令是不要關閉shell,因為如果你啟用了身分識別驗證或者斷開了連結,可能連不上,需要重新啟動mongod,這些命令就都失效了。


4.4:如何恢複資料庫
資料庫發生問題時需要進行恢複,使用複製的檔案進行恢複時可以使用以下命令:

cp -R /usr/backup/* /var/lib/mongodb/
注意:恢複前應該確保mongod沒有運行,且/var/lib/mongodb/為空白。linux使用rm -rf刪除目錄。刪除前一定確認cp命令成功執行。恢複完成後,再啟動mongod。啟動mongod使用一下命令:

mongod -f /etc/mongod.conf --fork --nojournal


五:工具方式

5.1:mongodump的基本操作
通過mongodump進行備份可以使用以下選項:
–help 查看協助資訊。
-v [ --verbose ] 顯示更多調試資訊。
–version 顯示該命令版本。
-h [ --host ] arg mongodb資料庫所在主機IP地址。
–port arg mongodb啟動時所使用的連接埠。也可以使用 –host:port格式直接指定主機和連接埠。
–ipv6 是否支援ipv6 。
-u [ --username ] arg 指定登陸使用者名稱。
-p [ --password ] arg 指定登陸密碼。
–dbpath arg 越過mongod伺服器,直接存取給定路徑的mongod資料庫檔案。使用該參數需要鎖定給定的資料目錄,所以需要先關閉使用該目錄的mongod服務。
–directoryperdb 如果指定了dbpath目錄,那麼每個db都會儲存到一個單獨的檔案夾中。
–journal enable journaling
-d [ --db ] arg 準備備份的資料庫。
-c [ --collection ] arg 準備備份的集合。
-o [ --out ] arg 匯出資料將要儲存在的目錄,如參數為“-”,則直接在控制台顯示。
-q [ --query ] arg json query
–oplog Use oplog for point-in-time snapshotting
–repair 嘗試修複損壞的資料庫。
–forceTableScan 強製表掃描。


5.2:mongorestore的基本操作
與mongodump相對應通過mongorestore進行恢複使用以下選項:
–help 查看協助資訊。
-v [ --verbose ] 顯示更多調試資訊。
–version 顯示該命令版本。
-h [ --host ] arg mongodb資料庫所在主機IP地址。
–port arg mongodb啟動時所使用的連接埠。也可以使用 –host hostname:port格式直接指定主機和連接埠。
–ipv6 是否支援ipv6 。
-u [ --username ] arg 指定登陸使用者名稱。
-p [ --password ] arg 指定登陸密碼。
–dbpath arg 越過mongod伺服器,直接存取給定路徑的mongod資料庫檔案。使用該參數需要鎖定給定的資料目錄,所以無法使用當前mongod服務正在使用的目錄。
–directoryperdb 如果指定了dbpath目錄,那麼每個db都會在一個單獨的檔案夾中。
–journal enable journaling
-d [ --db ] arg 準備恢複的資料庫。
-c [ --collection ] arg 準備恢複的集合。
-objcheck 恢複前驗證一下資料對象。
-filter arg 有選擇的進行恢複。
–oplogReplay replay oplog for point-in-time restore。
–drop 修複前刪除所有集合。
–keepIndexVersion 強製表掃描。
這裡我們需要瞭解兩個命令,首先是驗證寫入是否成功的命令:

db.runCommand({"getLastError":1,"j":true})
這個命令主要用來解決一些重要資料需要瞭解是否已經寫入磁碟中。

另外一個是設定資料庫提交資料到日誌的時間間隔命令:

db.adminCommand({"setParameter":1,"journalCommitInterval":30})
其中setParameter可以設定的間隔為2毫秒到500毫秒,時間間隔月底系統開銷越大。


5.3:資料庫未運行時的備份
資料庫未運行時對資料庫進行備份,通過使用mongodump十分方便。例如使用以下命令:

mongodump --dbpath /var/lib/mongodb/ --out /usr/backup


5.4:資料庫未運行時的恢複
資料庫未運行時的恢複也很簡單,通過使用mongorestore進行恢複。不僅可以進行整體恢複,還可以進行某一個資料庫的恢複,例如使用以下命令恢複test資料庫到運行系統中。

mongorestore --dbpath /usr/backup/ --journal /var/lib/mongodb/test


5.5:如何通過遠程連結進行備份
網路允許的情況下,mongodump工具可以進行遠程連結資料庫,進行備份。例如以下備份就是通過指定主機地址、連接埠、使用者名稱、密碼和備份目錄而進行的備份操作。

mongodump --host www.***.com --port 3017 --username user --password pass --out /usr/backup/mongodump-2013-10-24


5.6:如何通過遠程連結進行恢複
對應的通過mongodump工具進行遠程連結備份的資料庫,也可以通過mongorestore來進行恢複。例如以下恢複就是通過指定主機地址、連接埠、使用者名稱、密碼和備份目錄而進行的恢複操作。

mongorestore --host www.***.com --port 3017 --username user --password pass /usr/backup/mongodump-2013-10-24


5.7:如何使用oplog進行備份
通過設定作業日誌oplog的即時備份點,可以完成快照式的Database Backup。這樣做的好處就是如果我們在使用mongodump進行備份的操作時,如有操作正進行資料庫刪除之類的操作時,我們的mongodump備份已經將這個Database Backup完,那麼我們獲得的備份就會和實際的資料庫不同,而且這個資料庫在事實上未成存在過。


mongodump不是快照備份,備份過程中系統可能會繼續進行操作。oplog的設定就是避免這種情況發生的,不過使用oplog的前提是mongod啟動時使用了--replSet選項。本質是使用了複製的功能,以後講到複製大家就更清楚了。


5.8:如何使用oplog恢複
與mongodump使用oplog進行備份對應,mongorestore也可以使用oplog對資料庫進行恢複。


六:意外關機修複

6.1:一般的處理常式
MongoDB意外關機後,通常有兩種選擇進行恢複:

1.直接在源檔案上進行恢複。
2.保留關機前的原始檔案,檢查以後再進行恢複。
按照第二種情況的恢複流程是:

1.修複資料庫
2.確認資料庫情況
3.刪除鎖檔案
4.修複資料庫
5.正常啟動運行
如果按照第一種方式那麼就忽略以上1、2兩個步驟。


6.2:修複並保留未經處理資料庫
通過下面的命令,我們來對資料庫進行修複,並將未經處理資料庫備份到修複目錄/usr/backup下。 這樣做的目的是不破壞原始的資料庫檔案。

mongod --dbpath /var/lib/mongodb --repair --repairpath /usr/backup


6.3:如何確認資料庫情況
通過運行下面的命令我們可以將進行修複以後的資料庫運行起來。然後通過檢查資料庫的狀態,意外發生前進行的操作執行情況,例如插入資料是否完成,目前表內資料情況等,來判斷資料庫是否已經完全修複了。

mongod --dbpath /usr/backup


6.4:刪除鎖檔案
根據修複資料庫啟動並執行情況,判斷如果資料庫基本是正常的,我們就可以刪除鎖檔案了。如果資料庫不正常,那麼就需要做相應的處理。如使用了日誌,根據日誌進行恢複,如使用了複製那麼進行恢複等等情況,具體問題需要具體分析。

rm /var/lib/mongodb/mongod.lock


6.5:修複資料庫
修複資料庫使用以下的命令,這時修複資料庫會使用新檔案代替原有的舊檔案。

mongod --dbpath /usr/backup --repair


6.6:正常啟動資料庫
通過以上的幾個步驟以後,我們就可以正常啟動資料庫了。

mongod --dbpath /var/lib/mongodb










感謝huizhi網:http://hubwiz.com/




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.