什么是MongoDB?
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能
最丰富,最像关系数据库的。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。它是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应
用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。它支持的数据结构
非常松散,会将数据存储为一个文档,数据结构由键值对(key=>value)组成,是类似于json的bson格式,字段值可以包含其它文档、数组和文档数组,因此可以存储比较复杂的数据类型
适应场景
网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性;缓存,由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,
由它搭建的持久化缓存层可以避免下层的数据源过载。高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持
不适用场景
要求高度事务性的系统。传统的商业智能应用。复杂的跨文档(表)级联查询
MongoDB环境版本
CentOS | MongoDB |
7.8 | 4.4.2 |
下载MongoDB
官网地址:https://www.mongodb.com
下载页面:https://www.mongodb.com/try/download/community
[root@Mike-Node1 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgz [root@Mike-Node1 ~]# tar zxvf mongodb-linux-x86_64-rhel70-4.4.2.tgz -C /usr/local/ [root@Mike-Node1 ~]# mv /usr/local/mongodb-linux-x86_64-rhel70-4.4.2 /usr/local/mongodb [root@Mike-Node1 ~]# rm -rf mongodb-linux-x86_64-rhel70-4.4.2.tgz
安装MongoDB
[root@Mike-Node1 ~]# cd /usr/local/mongodb/ [root@Mike-Node1 /usr/local/mongodb]# ll total 136 drwxr-xr-x 2 root root 4096 Dec 22 10:52 bin -rw-rw-r-- 1 1046 1046 30608 Nov 17 04:09 LICENSE-Community.txt -rw-rw-r-- 1 1046 1046 16726 Nov 17 04:09 MPL-2 -rw-rw-r-- 1 1046 1046 1977 Nov 17 04:09 README -rw-rw-r-- 1 1046 1046 75685 Nov 17 04:09 THIRD-PARTY-NOTICES [root@Mike-Node1 /usr/local/mongodb]# mkdir logs data conf [root@Mike-Node1 /usr/local/mongodb]# [root@Mike-Node1 /usr/local/mongodb]# cd logs/ [root@Mike-Node1 /usr/local/mongodb/logs]# touch mongodb.logs [root@Mike-Node1 /usr/local/mongodb/logs]# cd ../conf/ [root@Mike-Node1 /usr/local/mongodb/conf]# [root@Mike-Node1 /usr/local/mongodb/conf]# vim mongodb.conf systemLog: quiet: false path: /usr/local/mongodb/logs/mongodb.logs logAppend: false destination: file processManagement: fork: true pidFilePath: /usr/local/mongodb/bin/mongodb.pid net: bindIp: 0.0.0.0 port: 27017 maxIncomingConnections: 65536 wireObjectCheck: true storage: dbPath: /usr/local/mongodb/data journal: enabled: true operationProfiling: slowOpThresholdMs: 100 mode: off [root@Mike-Node1 /usr/local/mongodb/conf]#
重要配置参数讲解如下:
sytemsLog:(系统日志,必须配置) quiet: true 描述:"安静",此时mongod/mongos将会尝试减少日志的输出量。不建议在production环境下开启,否则将会导致跟踪错误比较困难。
path: logs/mongod.log logAppend: false 描述:如果为true,当mongod/mongos重启后,将在现有日志的尾部继续添加日志。否则,将会备份当前日志文件,然后创建一个新的日志文件;默认为false。 destination: file 描述:日志输出目的地,可以指定为“ file”或者“syslog”,表述输出到日志文件,如果不指定,则会输出到标准输出中(standard output)。 processManagement: fork: <true | false> 描述:是否以fork模式运行mongod/mongos进程,默认为false pidFilePath:<路径> 描述:配合"fork:true"参数,将mongod/mongos进程ID写入指定的文件,如果不指定,将不会创建PID文件 net: bindIp: <127.0.0.1> 描述:mongod/monogs进程绑定的IP,application通过此IP、port建立链接。可以绑定在任意网卡接口上,如果你的mongos/mongod只需要内网访问,可以绑定在内网IP(例如:192.168.1.100),如果需要外网访问,那么则绑定外网IP,如果此值为“0.0.0.0”,则绑定到所有接口即内网、外网IP均可以访问。(不建议)可以绑定都多个ip上,ip地址之间用“,”分割。 port: 27017 描述:mongod/mongos侦听端口,默认为27017;不过因为mongodb有2种典型的架构模式:replica set和sharding,如果开发者在一个节点上部署多个mongod实例,需要注意修改此端口以避免冲突。
maxIncomingConnections: 65536 描述:mongod/mongos进程允许的最大连接数,如果此值超过操作系统配置的连接数阀值,将不会生效(ulimit);默认值为65536。通常客户端将会使用连接池机制,可以有效的控制每个客户端的链接个数。 wireObjectCheck: true 描述:当客户端写入数据时,mongos/mongod是否检测数据的有效性(BSON),如果数据格式不良,此insert、update操作将会被拒绝;默认值为true storage: dbPath: db 描述:mongod进程存储数据目录,此配置仅对mongod进程有效。默认值为:/data/db engine: mmapv1 描述:存储引擎类型,mongodb 3.0之后支持“mmapv1”、“wiredTiger”两种引擎,默认值为“mmapv1”;官方宣称wiredTiger引擎更加优秀 journal: enabled: true 描述:是否开启journal日志持久存储,journal日志用来数据恢复,是mongod最基础的特性,通常用于故障恢复。64位系统默认为true,32位默认为false,建议开启,仅对mongod进程有效 operationProfiling:
slowOpThresholdMs: 100 描述:数据库profiler判定一个操作是“慢查询”的时间阀值,单位毫秒;mongod将会把慢查询记录到日志中,即使profiler被关闭。当profiler开启时,慢查询记录还会被写入“system.profile”这个系统级的collection中。请参看mongod profiler相关文档。默认值为100,此值只对mongod进程有效 mode: off 描述:数据库profiler级别,操作的性能信息将会被写入日志文件中,可选值: 1)off:关闭profiling 2)slowOp:on,只包含慢操作日志 3)all:on,记录所有操作 数据库profiling会影响性能,建议只在性能调试阶段开启。此参数仅对mongod有效
设置MongoDB启动服务
[root@Mike-Node1 /usr/local/mongodb/conf]# vim /etc/systemd/system/mongodb.service [Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] Type=forking RuntimeDirectory=mongodb RuntimeDirectoryMode=0751 PIDFile=/usr/local/mongodb/bin/mongodb.pid ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/conf/mongodb.conf PrivateTmp=false [Install] WantedBy=multi-user.target [root@Mike-Node1 /usr/local/mongodb/conf]# [root@Mike-Node1 /usr/local/mongodb/conf]# systemctl start mongodb.service [root@Mike-Node1 /usr/local/mongodb/conf]# systemctl enable mongodb.service
服务操作命令
systemctl start mongodb.service #启动服务
systemctl stop mongodb.service #停止服务
systemctl restart mongodb.service #重新启动服务
systemctl status mongodb.service #查看服务当前状态
systemctl enable mongodb.service #设置开机自启动
systemctl disable mongodb.service #停止开机自启动
注意:
关闭 MongoDB 方法
1.本文采用
[root@Mike-Node1 /usr/local/mongodb/bin]# systemctl stop mongodb.service
服务的方式关闭
2.使用 mongod 命令关闭 [root@Mike-Node1 /usr/local/mongodb/bin]# mongod --shutdown --dbpath /usr/local/mongodb/data/ killing process with pid: 14447
mongod 命令的 shutdown 选项能干净的关闭 MongoDB 服务 3.
使用 kill 命令 mongo 服务进程 可以使用操作系统的 kill 命令,给 mongod 进程发送 SIGINT 或 SIGTERM 信号,即 "kill -2 PID," 或者 “kill -15 PID“ 建议不要使用 ”kill -9 pid“,因为如果 MongoDB 运行在没开启日志(--journal)的情况下,可能会造成数据损失
连接客户端
[root@Mike-Node1 /usr/local/mongodb/bin]# ./mongo 127.0.0.1:27017 MongoDB shell version v4.4.2 connecting to: mongodb://127.0.0.1:27017/test?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("9ab49f76-cb3b-4b7e-a7c1-44321e8575dc") } MongoDB server version: 4.4.2 Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see https://docs.mongodb.com/ Questions? Try the MongoDB Developer Community Forums https://community.mongodb.com --- The server generated these startup warnings when booting: 2020-12-22T13:45:04.621+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2020-12-22T13:45:05.464+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 2020-12-22T13:45:05.464+08:00: You are running this process as the root user, which is not recommended 2020-12-22T13:45:05.464+08:00: /sys/kernel/mm/transparent_hugepage/enabled is ‘always‘. We suggest setting it to ‘never‘ 2020-12-22T13:45:05.464+08:00: /sys/kernel/mm/transparent_hugepage/defrag is ‘always‘. We suggest setting it to ‘never‘ 2020-12-22T13:45:05.464+08:00: Soft rlimits too low 2020-12-22T13:45:05.464+08:00: currentValue: 1024 2020-12-22T13:45:05.464+08:00: recommendedMinimum: 64000 --- --- Enable MongoDB‘s free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() --- > show dbs admin 0.000GB config 0.000GB local 0.000GB >
如果是连接某个库,命令是
[root@Mike-Node1 /usr/local/mongodb/bin]# ./mongo ip:port/库名 -u用户名 -p密码
如果由于上次mongodb非正常关闭导致的失败问题
比如服务器突然关机或者 kill -9这种情况
解决办法: 1)删除数据目录/usr/local/mongodb/data 下的 mongod.lock [root@Mike-Node1 ~]# rm -rf /usr/local/mongodb/data/mongod.lock 2)修复mongodb [root@Mike-Node1 ~]# /usr/local/mongodb/bin/mongod --logpath --dbpath /usr/local/mongodb/data --repair 3)删除/usr/local/mongodb/data/journal 下的 j._4 文件(或者将journal下的文件清空) [root@Mike-Node1 ~]# rm -rf /usr/local/mongodb/data/journal/*j._4
4)然后再次启动 mongodb 就ok了 [root@Mike-Node1 ~]# systemctl start mongodb.service
本文分享完毕,感谢支持点赞~~