参考资料:http://www.runoob.com/mongodb

也是第一次接触mongodb数据库,那么什么是mongodb数据库?

下面引用相关文档的介绍:

什么是MongoDB ?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点:

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单

学习任何数据库都是从安装开始,下面就一起来看看mongodb数据库是如何安装的

1.MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包。

下载地址:https://www.mongodb.com/download-center#community

下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) 。

#下载
[root@18c opt]# curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.4.tgz 
#解压
[root@18c opt]# tar -zxvf mongodb-linux-x86_64-4.0.4.tgz
#将解压包拷贝到指定目录
[root@18c opt]# mv mongodb-linux-x86_64-4.0.4 /usr/local/mongodb

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:


[root@18c ~]# cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

MONGONDB=/usr/local/mongodb
PATH=$MONGONDB/bin:$PATH:$HOME/bin
export PATH

[root@18c ~]# source .bash_profile

MONGODB 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb

2.创建数据库目录和日志目录:

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。


[root@18c ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2        36G   18G   17G  52% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/vdb1        30G   12G   17G  42% /data
[root@18c ~]# cd /data/mongodb/
[root@18c mongodb]# pwd
/data/mongodb
[root@18c mongodb]# mkdir data logs

 

注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。这里我们不使用默认的路径,自己创建个/data/mongodb/data目录

3.创建配置文件


[root@18c mongodb]# cat mongodb.conf
#数据库文件位置
dbpath=/data/mongodb/data
#日志文件位置
logpath=/data/mongodb/logs/mongodb.log
#以追加方式写入日志
logappend=true
#默认27017
port=27017
#设置后台运行
fork=true

3.命令行中运行MongoDb服务

你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。

[root@18c bin]# ./mongod --config /data/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 22315
child process started successfully, parent exiting

到此mongdb就已经安装完成了,是不是so easy!!

4.尝试登陆mongodb

卧槽,上面出现这么多的Waring,不过不影响使用,但是看起来有点别扭,下面将一一介绍这些告警信息啥意思

#首先查看mongdb服务是否真的起来
[root@18c ~]# ps -ef |grep mongod
root     22315     1  0 10:49 ?        00:00:02 ./mongod --config /data/mongodb/mongodb.conf
root     22453 22275  0 11:03 pts/1    00:00:00 grep mongod
#登陆
[root@18c ~]# mongo
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("3a2fe154-6b5d-4f11-bb28-b69e40887105") }
MongoDB server version: 4.0.4
Server has startup warnings:
2018-11-20T10:49:39.628+0800 I STORAGE  [initandlisten]
2018-11-20T10:49:39.628+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-11-20T10:49:39.628+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten]
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten]
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten]
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten]
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten]
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-11-20T10:49:40.346+0800 I CONTROL  [initandlisten]
>

 

第一个: WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
意思是:强烈建议使用带WiredTiger存储引擎的XFS文件系统
XFS文件系统:XFS一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,
是IRIX 5.3版的默认文件系统。2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后
被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输。
既然是warning说明不会影响mongodb的正常使用,只是提醒你安装mongodb最好使用ext4或者xfs文件系统!
本人系统已经是ext4系统了!
第二个: WARNING: Access control is not enabled for the database.
意思是:未对数据库启用访问控制,对数据和配置的读写访问不受限制(危险的warning)

解决办法:
创建管理员并设置密码

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "yuhuashi",
...     pwd: "yuhuashi",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
...   )
Successfully added user: {
        "user" : "yuhuashi",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}


然后重启数据库服务器
[root@18c ~]# ps -ef |grep mongo
root     22556     1  2 11:20 ?        00:00:01 mongod --config /data/mongodb/mongodb.conf
root     22591 22524  0 11:21 pts/0    00:00:00 grep mongo
[root@18c ~]# kill -9 22556
[root@18c ~]# ps -ef |grep mongo
root     22593 22524  0 11:21 pts/0    00:00:00 grep mongo
[root@18c ~]# mongod --auth --config /data/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 22596
child process started successfully, parent exiting
[root@18c ~]# mongo
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("b60eca6a-0a2d-4399-9b8f-8a3f442f39b2") }
MongoDB server version: 4.0.4
>

 

第三个:WARNING: You are running this process as the root user, which is not recommended.
意思就是不推荐使用root用户来启用mongdb,不好意思哥哥是测试环境,你爱咋咋的

 

第四个: WARNING: This server is bound to localhost.

解决办法,请看!!
Remote systems will be unable to connect to this server.
2018-11-20T11:23:39.317+0800 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-11-20T11:23:39.317+0800 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-11-20T11:23:39.317+0800 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-11-20T11:23:39.317+0800 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-11-20T11:23:39.317+0800 I CONTROL  [initandlisten]

哥哥聪明吧

 

第五个报错: WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
需要将/sys/kernel/mm/transparent_hugepage/enabled设置为never
解决办法就是设置never

[root@18c ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@18c ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@18c ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

 

第六个报错: WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
需要将/sys/kernel/mm/transparent_hugepage/defrag设置为never
解决办法就是设置never

[root@18c ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
[root@18c ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@18c ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

 mongodb后台管理shell

如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。

MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。

当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):

> 2+2
4
> 3+6
9

现在测试插入一些简单的数据,并对插入的数据进行检索:


> use yuhuashi
switched to db yuhuashi
> db.yuhuashi.insert({"name":"yuhuashi"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin     0.000GB
config    0.000GB
local     0.000GB
yuhuashi  0.000GB

> db.yuhuashi.find({"name":"yuhuashi"})
{ "_id" : ObjectId("5bf3b67e01e6889d06eab63e"), "name" : "yuhuashi" }
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐