天天看点

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,如需转载请自行联系原作者