最近在工作中遇到了部分文档存储的场景,于是了解了目前比较通用的文档存储的NoSQL解决方案,因此从通用性上对mongodb进行学习,并记录学习中查阅的资料,以及遇到的问题,用于后来参考。
本地环境与mongo版本
由于我的电脑是一个笔记本电脑,并且年代已经久远了,尝试了一番5.0版本后,遇到了很多问题,因此目前主要版本如下:
- 系统为ubuntu v18.04版本
- mongodb选择为v4.2.15版本
安装步骤
安装步骤主要来自于mongodb官方文档, 目前主要采用的安装方式为.tgz压缩包的方式,因为我觉得采用packages的方式,会让我忽略很多细节点,因此作为自学,采用压缩包的方式会比较适合.
环境准备
在安装前,需要提前安装依赖组件,具体命令如下:
sudo apt-get install libcurl4 openssl
安装包下载与解压
我当前使用的为mongodb v4.2.15版本,直接下载文件到工作目录, 具体命令如下:
# 下载安装包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.15.tgz # 解压安装包 tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.2.15.tgz
拷贝命令
拷贝命令主要是将mongodb中的执行命令拷贝到/usr/local/bin
中,这样就不用每次都进入到目录执行命令:
sudo cp <mongodb-install-directory>/bin/* /usr/local/bin/
启动MongoDB
启动mongodb,需要对系统部分参数做调整, 其中主要包括以下两个:
ulimit
中,需要调整open files的数量, 可以通过ulimit -n 64000
进行调整, 具体参考文档- 另一部分就是
configuration file
的配置,但是对于这部分来说不是必须的,因为我们可以command-line的参数形式指定。具体文件配置详情参考官方文档
日志与数据目录创建
在mongodb中主要设计到两个重要目录,数据的存储位置和日志文件位置, 具体创建方式如下:
# 创建数据存储目录 sudo mkdir -p /var/lib/mongo # 日志目录创建 sudo mkdir -p /var/log/mongodb # 为文件件分配访问权限, 分配到当前用户 sudo chown ``whoami`` /var/lib/mongo sudo chown ``whoami`` /var/log/mongodb
启动MongoDB
通过mongod的方式,启动的为本地单实例的mongodb, 具体执行命令如下:
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongd.log --bind_ip 0.0.0.0 --fork
命令中几个重要的参数:
--dbpath
: 指定的数据存储的目录--logpath
: 指定了日志文件存储目录--bind_ip
: 这个命令指定了当前实例监听在具体ip地址上,如果不指定,则默认绑定为127.0.0.1
上,只能够本机进行访问。因为我这里需要外部访问, 所以绑定为0.0.0.0.
同时也可以指定--bind_all_ip
参数,为所有ip地址都进行绑定(我理解为由多张网卡的时候, 可能每个都进行绑定)。
当命令执行成功后,会看到如下的日志信息:
about to fork child process, waiting until server is ready for connections. forked process: 11820 child process started successfully, parent exiting
验证服务
验证服务是否启动成功, 可以通过查看日志的方式判断服务是否启动成功:
tail -200 /var/log/mongdb/mongod.log
可以看到日志中已经包含了如下信息:
2021-08-28T14:22:11.082+0800 I NETWORK [initandlisten] waiting for connections on port 27017 2021-08-28T14:22:11.082+0800 I SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded> 2021-08-28T14:22:12.000+0800 I SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>
使用MongoDB
当MongoDB启动成功后,我们需要通过shell的方式能够链接mongodb实例,在刚才下载的.tgz包中,包含了shell的客户端, 可以直接使用:
mongo
该命令默认会链接本地的27107
接口,相当于下面的命令:
mongo --host localhost --port 27107
启动参数主要为:
--host
: 设置需要链接的ip地址或者域名--port
: 目标实例的端口信息
命令文件说明
当我们查看mongo的源文件目录时,发现文件并不多,主要集中在bin目录下,下面主要介绍下bin目录下的命令主要作用:
- 组件
mongod
: 数据库服务器, 启动实例主要依靠该命令mongos
: 数据分片路由机,路由设置主要依靠这个命令mongo
: 链接mongo 实例的客户端, 主要采用javascript
- 工具
mongodump
: 用于创建数据库内容的二进制dump文件mongorestore
: 从mongodump生成的文件中读取数据,并重新存储到数据库mongoexport
: 导出集合中的内容为JSON或者CSV格式mogoimport
: 从JSON, CSV, TSV中导入数据mongofiles
: 从GridFs中获取,新增,删除文件mongostat
: 展示当前mongod/mongos运行状态bsondump
: 将BSON文件转换为易读格式文件mongoreplay
: 传输快照和响应(capture and replay)工具mongotop
: 跟踪读写数据耗费时间install_compass
: 为当前平台安装MongoDB Compass