初学MonggoDb—Linux平台安装MongoDB
参考资料:http://www.runoob.com/mongodb也是第一次接触mongodb数据库,那么什么是mongodb数据库?下面引用相关文档的介绍:什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存...
参考资料: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" }
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)