天天看點

mongodb的安裝

<a href="https://repo.mongodb.org/yum/redhat/6Server/mongodb-org/3.4/x86_64/RPMS/" target="_blank">https://repo.mongodb.org/yum/redhat/6Server/mongodb-org/3.4/x86_64/RPMS/</a>

簡介:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>一、簡介</code>

<code>      </code><code>mongodb是一個開源的,基于分布式的,面向文檔存儲的非關系型資料庫。是非關系型資料庫當中功能最豐富、最像關系資料庫的。</code>

<code>      </code><code>mongoDB由C++編寫,其名字來源于</code><code>"humongous"</code><code>這個單詞,其宗旨在于處理大量資料。</code>

<code>      </code><code>mongoDB可以運作在Windows、unix、OSX、Solaris系統上,支援32位和64位應用,提供多種程式設計語言的驅動程式。</code>

<code>      </code><code>mongoDB支援的資料結構非常松散,是類似json的BSON格式,通過鍵值對的形式存儲資料,可以存儲複雜的資料類型。</code>

<code>      </code><code>mongoDB支援的資料類型有:null、boolean、String、objectId、32位整數、64位整數、64位浮點數、日期、正規表達式、js代碼、二進制資料、數組、内嵌文檔、最大值、最小值、未定義類型。</code>

<code>      </code><code>其中,内嵌文檔我了解的并不是.doc.txt等檔案,這裡所指的文檔是mongoDB的一個存儲單元(相當于關系型資料當中的記錄),在mongoDB中的表現形式為{key1:value1,key2:value2},而内嵌文檔則是這樣的形式{key1:value1,key2:{key2.1:value2.1,key2.2:value2.2}}。</code>

<code>      </code><code>mongoDB最大的特點是他支援的查詢語言非常強大,其文法有點類似于面向對象的查詢語言,幾乎可以實作類似關系資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。</code>

<code>      </code><code>二、mongoDB的特性:</code>

<code>       </code><code>1. 面向集合存儲。資料被分組到若幹集合,每個集合可以包含無限個文檔,可以将集合想象成RDBMS的表,差別是集合不需要進行模式定義。</code>

<code>       </code><code>2. 模式自由。集合中沒有行和列的概念,每個文檔可以有不同的key,key的值不要求一緻的資料類型。</code>

<code>       </code><code>3. 支援動态查詢。mongoDB支援豐富的查詢表達式,查詢指令使用json形式表達式。</code>

<code>       </code><code>4. 完整的索引支援。mongoDB的查詢優化器會分析查詢表達式,并生成一個高效的查詢計劃。</code>

<code>       </code><code>5. 高效的資料存儲,支援二進制資料及大型對象(圖檔、視訊等)。</code>

<code>       </code><code>6. 支援複制和故障恢複。</code>

<code>       </code><code>7. 自動分片以支援雲級别的伸縮性,支援水準的資料庫叢集,可動态添加額外的伺服器。</code>

<code>     </code><code>三、 mongoDB的适用場景:</code>

<code>       </code><code>1.  适合作為資訊基礎設施的持久化緩存層</code>

<code>        </code><code>2. 适合實時的插入、更新與查詢,并具備應用程式實時資料存儲所需的複制及高度伸縮性</code>

<code>        </code><code>3. 适合文檔化格式的存儲及查詢</code>

<code>        </code><code>4. 适合由數十或數百台伺服器組成的資料庫</code>

<code>      </code><code>四、mongoDB不适用場景:</code>

<code>         </code><code>1. 要求高度事務性的系統。例如對于銀行或會計等需要大量原子性複雜事物的應用程式來說,還是需要關系型資料庫的。</code>

<code>         </code><code>2. 傳統的商業智能應用</code>

<code>         </code><code>3. 複雜的表級聯查詢</code>

1.下載下傳所有的rpm包

上傳到伺服器

<code>[root@localhost ~]</code><code># ll</code>

<code>total 93528</code>

<code>-rw-------. 1 root root     1231 Feb 24 02:07 anaconda-ks.cfg</code>

<code>-rw-r--r--  1 root root     5900 Jul 22 06:42 mongodb-org-3.4.6-1.el6.x86_64.rpm</code>

<code>-rw-r--r--  1 root root 12182737 Jul 22 06:42 mongodb-org-mongos-3.4.6-1.el6.x86_64.rpm</code>

<code>-rw-r--r--  1 root root 20608908 Jul 22 06:42 mongodb-org-server-3.4.6-1.el6.x86_64.rpm</code>

<code>-rw-r--r--  1 root root 11767549 Jul 22 06:42 mongodb-org-shell-3.4.6-1.el6.x86_64.rpm</code>

<code>-rw-r--r--  1 root root 51195582 Jul 22 06:42 mongodb-org-tools-3.4.6-1.el6.x86_64.rpm</code>

<code>[root@localhost ~]</code><code>#</code>

2.安裝

<code>yum  localinstall  mongodb-org-*</code>

3.修改配置檔案

<code>vi</code> <code>/etc/mongod</code><code>.conf</code>

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<code># mongod.conf</code>

<code># for documentation of all options, see:</code>

<code>#   http://docs.mongodb.org/manual/reference/configuration-options/</code>

<code># where to write logging data.</code>

<code>systemLog:</code>

<code>  </code><code>destination: </code><code>file</code>

<code>  </code><code>logAppend: </code><code>true</code>

<code>  </code><code>path: </code><code>/opt/mongo/log/mongo</code><code>.log  </code><code>#日志檔案</code>

<code># Where and how to store data.</code>

<code>storage:</code>

<code>  </code><code>dbPath: </code><code>/opt/mongo/data</code>  <code>#資料</code>

<code>  </code><code>journal:</code>

<code>    </code><code>enabled: </code><code>true</code>

<code>#  engine:</code>

<code>#  mmapv1:</code>

<code>#  wiredTiger:</code>

<code># how the process runs</code>

<code>processManagement:</code>

<code>  </code><code>fork: </code><code>true</code>  <code># fork and run in background</code>

<code>  </code><code>pidFilePath: </code><code>/opt/mongo/mongopid/mongo</code><code>.pid  </code><code># location of pidfile  #pid</code>

<code># network interfaces</code>

<code>net:</code>

<code>  </code><code>port: 62114 </code><code>#端口和監聽的IP</code>

<code>  </code><code>bindIp: 192.168.56.15  </code><code># Listen to local interface only, comment to listen on all interfaces.</code>

<code>#security:</code>

<code>#operationProfiling:</code>

<code>#replication:</code>

<code>#sharding:</code>

<code>## Enterprise-Only Options</code>

<code>#auditLog:</code>

<code>#snmp:</code>

<code>[root@localhost ~]</code><code># </code>

<code>chown</code>  <code>-R  mongod.mongod  </code><code>/opt/mongo</code>

4.啟動mongo

<code>systemctl  start  mongod</code>

5.進入mongo

<code>mongo  --host  192.168.56.15  --port 62114</code>

<code>Server has startup warnings: </code>

<code>2017-07-22T07:07:43.607+0800 I CONTROL  [initandlisten] </code>

<code>2017-07-22T07:07:43.607+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled </code><code>for</code> <code>the database.</code>

<code>2017-07-22T07:07:43.608+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.</code>

<code>2017-07-22T07:07:43.608+0800 I CONTROL  [initandlisten] </code>

<code>2017-07-22T07:07:43.608+0800 I CONTROL  [initandlisten] ** WARNING: </code><code>/sys/kernel/mm/transparent_hugepage/enabled</code> <code>is </code><code>'always'</code><code>.</code>

<code>2017-07-22T07:07:43.608+0800 I CONTROL  [initandlisten] **        We suggest setting it to </code><code>'never'</code>

<code>2017-07-22T07:07:43.608+0800 I CONTROL  [initandlisten] ** WARNING: </code><code>/sys/kernel/mm/transparent_hugepage/defrag</code> <code>is </code><code>'always'</code><code>.</code>

<code>2017-07-22T07:07:43.608+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits </code><code>set</code> <code>to 4096 processes, 1024000 files. Number of processes should be at least 512000 : 0.5 </code><code>times</code> <code>number of files.</code>

<code>解決辦法</code>

<code>[root@localhost ~]</code><code># tail -n 4  /etc/security/limits.conf </code>

<code>mongod soft nofile 64000</code>

<code>mongod hard nofile 64000</code>

<code>mongod soft nproc 32000</code>

<code>mongod hard nproc 32000</code>

<code>[root@localhost ~]</code><code># echo "never" &gt;/sys/kernel/mm/transparent_hugepage/enabled</code>

<code>[root@localhost ~]</code><code># echo "never" &gt;/sys/kernel/mm/transparent_hugepage/defrag </code>

<code> </code><code>never 此處系統重新開機失效 </code>

<code>是以把這個兩個</code><code>echo</code> <code>放在</code><code>/etc/rc</code><code>.</code><code>local</code> <code>中</code>

6.增加使用者名和密碼

<code>增加超級管理者</code>

<code>mongo  --host  192.168.56.15  --port 62114 </code>

<code>db.createUser({user:</code><code>"admin"</code><code>,</code><code>pwd</code><code>:</code><code>"123456"</code><code>,roles:[{role:</code><code>"userAdminAnyDatabase"</code><code>,db:</code><code>"admin"</code><code>}]})</code>

7.退出 讓mongo使用者認證登陸

<code>vim  </code><code>/etc/mongod</code><code>.conf</code>

<code>security:    </code><code>#打開注釋</code>

<code>  </code><code>authorization: enabled   </code><code>#增加一行</code>

<code> </code><code>systemctl restart  mongod</code>

<code> </code><code>測試:</code>

<code> </code><code>[root@localhost ~]</code><code># mongo  --host  192.168.56.15  --port 62114  </code>

<code>MongoDB shell version v3.4.6</code>

<code>connecting to: mongodb:</code><code>//192</code><code>.168.56.15:62114/</code>

<code>MongoDB server version: 3.4.6</code>

<code>&gt; show  dbs;</code>

<code>2017-07-22T07:43:14.962+0800 E QUERY    [thread1] Error: listDatabases failed:{</code>

<code>    </code><code>"ok"</code> <code>: 0,</code>

<code>    </code><code>"errmsg"</code> <code>: </code><code>"not authorized on admin to execute command { listDatabases: 1.0 }"</code><code>,</code>

<code>    </code><code>"code"</code> <code>: 13,</code>

<code>    </code><code>"codeName"</code> <code>: </code><code>"Unauthorized"</code>

<code>} :</code>

<code>_getErrorWithCode@src</code><code>/mongo/shell/utils</code><code>.js:25:13</code>

<code>Mongo.prototype.getDBs@src</code><code>/mongo/shell/mongo</code><code>.js:62:1</code>

<code>shellHelper.show@src</code><code>/mongo/shell/utils</code><code>.js:769:19</code>

<code>shellHelper@src</code><code>/mongo/shell/utils</code><code>.js:659:15</code>

<code>@(shellhelp2):1:1</code>

<code>&gt; </code>

<code>測試通過</code>

<code>[root@localhost ~]</code><code># mongo  --host  192.168.56.15  --port 62114    -u admin  -p 123456</code>

<code>&gt; show dbs;</code>

<code>admin  0.000GB</code>

<code>local</code>  <code>0.000GB</code>

<code>&gt;</code>

8.管理者增加一個庫,并賦予特定的使用者(庫是建立了 預設不寫入東西看不見)

<code>&gt; db.createUser({ user: </code><code>"test"</code><code>,</code>

<code>...     </code><code>pwd</code><code>: </code><code>"123456"</code><code>,</code>

<code>...     roles:[{</code><code>"role"</code><code>:</code><code>"readWrite"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>},</code>

<code>...       {</code><code>"role"</code><code>:</code><code>"dbAdmin"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>},</code>

<code>...       {</code><code>"role"</code><code>:</code><code>"dbOwner"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>},</code>

<code>...       {</code><code>"role"</code><code>:</code><code>"read"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>}]})</code>

<code>Successfully added user: {</code>

<code>    </code><code>"user"</code> <code>: </code><code>"test"</code><code>,</code>

<code>    </code><code>"roles"</code> <code>: [</code>

<code>        </code><code>{</code>

<code>            </code><code>"role"</code> <code>: </code><code>"readWrite"</code><code>,</code>

<code>            </code><code>"db"</code> <code>: </code><code>"mall"</code>

<code>        </code><code>},</code>

<code>            </code><code>"role"</code> <code>: </code><code>"dbAdmin"</code><code>,</code>

<code>            </code><code>"role"</code> <code>: </code><code>"dbOwner"</code><code>,</code>

<code>            </code><code>"role"</code> <code>: </code><code>"read"</code><code>,</code>

<code>        </code><code>}</code>

<code>    </code><code>]</code>

<code>}</code>

<code>&gt; show dbs;  </code><code>#管理者登陸也看不見</code>

<code>mongo  --host  192.168.56.15  --port 62114    -u </code><code>test</code>  <code>-p 123456</code>

<code>&gt; db.auth(</code><code>"test"</code><code>,</code><code>"123456"</code><code>)</code>

<code>1</code>

<code>&gt; use  mall;  </code><code>#test 使用者登陸可以switch</code>

<code>switched to db mall</code>

9.插入資料 用test使用者登入

<code>test</code><code>使用者</code>

<code>&gt; db.inventory.insert( { _id: 10, </code><code>type</code><code>: </code><code>"misc"</code><code>, item: </code><code>"card"</code><code>, qty: 15 } )</code>

<code>WriteResult({ </code><code>"nInserted"</code> <code>: 1 })</code>

<code>admin使用者  插入資料後可以看到了</code>

<code>mall   0.000GB</code>

10服務沒關閉 直接關閉伺服器 導緻mongodb啟動不起來

<a href="https://s3.51cto.com/wyfs02/M00/9C/94/wKiom1lyq1TDA6HzAAFbDaQ9Fbw716.png-wh_500x0-wm_3-wmp_4-s_3274284369.png" target="_blank"></a>

解決辦法:

<code>[root@localhost mongopid]</code><code># mv  mongo.pid   mongo.pid.ori </code>

<code>[root@localhost mongopid]</code><code># pwd</code>

<code>/opt/mongo/mongopid</code>

<code>[root@localhost mongopid]</code><code>#</code>

11.linux用戶端連接配接mongo

<code>linux 用戶端連結mongo隻需要安裝mongodb-org-shell-3.4.6-1.el6.x86_64.rpm 即可</code>

<code>我在192.168.56.102</code><code>/24</code>  <code>安裝這個包,并測試</code>

<code>yum  localinstall  mongodb-org-shell-3.4.6-1.el6.x86_64.rpm</code>

<code> </code><code>which</code> <code>mongo </code>

<code>管理者測試沒問題</code>

<code>[root@slave2 ~]</code><code># mongo   --port  62114  --host 192.168.56.15   -u admin  -p 123456</code>

12.windows用戶端連接配接  mongo server  這裡采用mongoboster/robmongo

這次我連結的時候用使用者名密碼連結 連結不上auth認證失敗

最後我把mongo改為非認證的方式 才登陸上去的  !具體在查下,應該是協定的問題

<a href="https://s2.51cto.com/wyfs02/M01/9C/95/wKioL1lytUSTChm3AAF6MJXgudo352.png-wh_500x0-wm_3-wmp_4-s_676024590.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M02/9C/95/wKioL1lytYfjfZQOAAEXzdANtno239.png-wh_500x0-wm_3-wmp_4-s_820104893.png" target="_blank"></a>

問題解決辦法:

安裝mongodb之後開啟非認證模式(預設就是非認證模式)

①增加一個使用者 看出加密算法和版本(SCRAM-SHA-1)

<code>mongo  --host 192.168.56.15   -port 27017  </code>

<code>use admin</code>

<code>可以看出加密算法</code>

<code>&gt; db.system.</code><code>users</code><code>.</code><code>find</code><code>()</code>

<code>{ </code><code>"_id"</code> <code>: </code><code>"admin.admin"</code><code>, </code><code>"user"</code> <code>: </code><code>"admin"</code><code>, </code><code>"db"</code> <code>: </code><code>"admin"</code><code>, </code><code>"credentials"</code> <code>: { </code><code>"SCRAM-SHA-1"</code> <code>: { </code><code>"iterationCount"</code> <code>: 10000, </code><code>"salt"</code> <code>: </code><code>"SysMVW5zoTXdbp6P5oTJmQ=="</code><code>, </code><code>"storedKey"</code> <code>: </code><code>"M51sy/NCeM0sE0tKEGfmzslOCQY="</code><code>, </code><code>"serverKey"</code> <code>: </code><code>"qB9CLecOEf3vhQxzJgTWiciu7+o="</code> <code>} }, </code><code>"roles"</code> <code>: [ { </code><code>"role"</code> <code>: </code><code>"userAdminAnyDatabase"</code><code>, </code><code>"db"</code> <code>: </code><code>"admin"</code> <code>} ] }</code>

<code>可以看出版本currentVersion 5</code>

<code>&gt; db.system.version.</code><code>find</code><code>()</code>

<code>{ </code><code>"_id"</code> <code>: </code><code>"featureCompatibilityVersion"</code><code>, </code><code>"version"</code> <code>: </code><code>"3.4"</code> <code>}</code>

<code>{ </code><code>"_id"</code> <code>: </code><code>"authSchema"</code><code>, </code><code>"currentVersion"</code> <code>: 5 }</code>

②接着删除admin使用者  ,不添加使用者加密算法無法更新

<code>db.system.</code><code>users</code><code>.remove({user:</code><code>"admin"</code><code>})</code>

③更新版本

<code>db.system.version.update({</code><code>"_id"</code><code>:</code><code>"authSchema"</code><code>},{$</code><code>set</code><code>:{</code><code>"currentVersion"</code><code>:3}})</code>

④接着再次添加admin使用者,可以看出算法已經改變

<code>&gt; use admin </code>

<code>switched to db admin</code>

<code>&gt; db.createUser({user:</code><code>"admin"</code><code>,</code><code>pwd</code><code>:</code><code>"123456"</code><code>,roles:[{role:</code><code>"userAdminAnyDatabase"</code><code>,db:</code><code>"admin"</code><code>}]})</code>

<code>    </code><code>"user"</code> <code>: </code><code>"admin"</code><code>,</code>

<code>            </code><code>"role"</code> <code>: </code><code>"userAdminAnyDatabase"</code><code>,</code>

<code>            </code><code>"db"</code> <code>: </code><code>"admin"</code>

<code>{ </code><code>"_id"</code> <code>: </code><code>"admin.admin"</code><code>, </code><code>"user"</code> <code>: </code><code>"admin"</code><code>, </code><code>"db"</code> <code>: </code><code>"admin"</code><code>, </code><code>"credentials"</code> <code>: { </code><code>"MONGODB-CR"</code> <code>: </code><code>"95ec4261124ba5951720b199908d892b"</code> <code>}, </code><code>"roles"</code> <code>: [ { </code><code>"role"</code> <code>: </code><code>"userAdminAnyDatabase"</code><code>, </code><code>"db"</code> <code>: </code><code>"admin"</code> <code>} ] }</code>

⑤開啟使用者認證模式

<code>vim  </code><code>/etc/mongod</code><code>.conf </code>

<code>security:</code>

<code>  </code><code>authorization: enabled</code>

<code>systemctl  restart mongod</code>

⑥測試管理者能否登陸

<code>[root@localhost ~]</code><code># mongo  --host 192.168.56.15   --authenticationDatabase  admin    -port 27017  -uadmin  -p123456</code>

<code>connecting to: mongodb:</code><code>//192</code><code>.168.56.15:27017/</code>

<code>&gt; show  dbs</code>

⑦建立一個test使用者

<code>use mall  </code><code>#第一步先use</code>

<code>db.createUser({ user: </code><code>"test"</code><code>,</code>

<code>    </code><code>pwd</code><code>: </code><code>"123456"</code><code>,</code>

<code>    </code><code>roles:[{</code><code>"role"</code><code>:</code><code>"readWrite"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>},</code>

<code>      </code><code>{</code><code>"role"</code><code>:</code><code>"dbAdmin"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>},</code>

<code>      </code><code>{</code><code>"role"</code><code>:</code><code>"dbOwner"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>},</code>

<code>      </code><code>{</code><code>"role"</code><code>:</code><code>"read"</code><code>,</code><code>"db"</code><code>:</code><code>"mall"</code><code>}]})</code>

<code> </code><code>插入一條資料友善檢視,預設庫裡面沒有資料,管理者也看不見這個庫</code>

<code> </code> 

<code> </code><code>&gt; use mall</code>

⑧測試test使用者指令行是否可以連結

<code> </code><code>[root@localhost ~]</code><code># mongo  --host 192.168.56.15   --authenticationDatabase  mall    -port 27017  -utest  -p123456</code>

⑨windows用戶端連接配接

<a href="https://s1.51cto.com/wyfs02/M02/9C/97/wKioL1ly1Megoj3ZAACvK9M2zec692.png-wh_500x0-wm_3-wmp_4-s_1377180339.png" target="_blank"></a>

可以看出可以了

本文轉自 小小三郎1 51CTO部落格,原文連結:http://blog.51cto.com/wsxxsl/1949913,如需轉載請自行聯系原作者