安装 MongoDB
简介
MongoDB 是一个开源、高性能、无模式(Schemaless)的文档数据库,专为可扩展性,高性能和高可用性而设计,旨在简化开发和扩展。
MongoDB 是一个介于关系数据库和非关系数据库(NoSQL
)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的产品。
MongoDB 支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。不需要预定义数据结构,可以在运行时、动态地改变数据结构。
MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,支持地理空间数据,支持事务。
MongoDB 可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,它能够提供高性能的数据读写操作。
MongoDB 的本地复制和自动故障转移功能可以使应用程序具有企业级的可靠性和操作灵活性。
MongoDB 提供了几乎所有常见编程语言的客户端驱动程序,包括 Java, Go, C, C++, C#, Nodejs, Python, Ruby, Rust
等等。(参考: MongoDB 官方驱动)
在开发中使用文档型的 MongoDB 数据库可以大大简化复杂度,具有以下突出优点:
- 无需预定义对象/表结构(Collection)
- 可运行时动态扩展对象/表结构(Collection)
- 支持字段索引
- 支持事务
- 支持复制和分片集群
- 支持关系查询,如联结查询
- 具备 NoSQL 型数据库的高性能
安装
MongoDB 支持所有常见的操作系统,包括 Linux, MacOS, Windows,也支持 Docker 。
MongoDB 的安装过程十分简单,在 Windows 版本提供有 .exe 安装包,Linux、 MacOS 下课通过包管理器,也可以直接解压缩后直接启动运行。
配置和启动
采用安装程序或者包管理方式安装的,可通过 mongod
命令启动数据库服务进程。 采用解压缩安装方式的,执行安装目录下 bin
目录中 /mongod
命令。
典型的命令执行参数:
mongod --bind_ip localhost --port 27017 --logpath ../log/mongodb.log --dbpath ../my-mongo-data-dir
MongoDB 支持指定配置文件的方式启动。(更推荐这种方式)
mongod --config ../conf/mongodb.conf
配置单机版实例
processManagement:
fork: true
net:
bindIp: localhost
port: 27017
storage:
dbPath: /usr/local/mongodb/data
systemLog:
destination: file
path: "/usr/local/mongodb/mongodb-macos-x86_64-4.4.6/log/mongod.log"
logAppend: true
storage:
journal:
enabled: true
security:
authorization: enabled
注意!
单机版的 MongoDB 实例不支持事务!!
配置复制集支持事务
MongoDB 支持事务,包括分布式事务。 MongoDB 的事务可以跨多个操作、集合、数据库、文档和分片。
以下提供了配置单机版的复制集(replica set
)模式的示例。 单机版的复制集虽然不提供数据备份能力,但适合于本机开发环境上建立支持事务的开发调试环境。
完整的多机冗余备份和故障转移的复制集配置请参考 官方文档《Replication》。
配置步骤:
创建配置文件
processManagement:
fork: true
net:
bindIp: localhost
port: 27017
systemLog:
destination: file
path: "/usr/local/mongodb/mongodb-macos-x86_64-4.4.6/log/mongod.log"
logAppend: true
storage:
dbPath: /usr/local/mongodb/data
journal:
enabled: true
replication:
replSetName: rs0
security:
authorization: enabled
keyFile: /usr/local/mongodb/mongodb-macos-x86_64-4.4.6/conf/rs0.keys
创建 keyFile
keyFile 是复制集内成员之间(包括 Primary, Member
)的认证口令文件。
keyFile 中可以是任意内容,长度为 6 - 1024 之间。
按照上一步的配置,相应地创建 keyFile /usr/local/mongodb/mongodb-macos-x86_64-4.4.6/conf/rs0.keys
。
echo -e "rukk9321nkhaf8932nmlkajlsdfa" > /usr/local/mongodb/mongodb-macos-x86_64-4.4.6/conf/rs0.keys
修改 keyFile 的权限
需要修改 keyFile 文件的只允许拥有者(Owner)可读,否则会启动数据库时会报告异常,输出日志,并中止启动。
chmod 400 /usr/local/mongodb/mongodb-macos-x86_64-4.4.6/conf/rs0.keys
执行成功后,执行命令 ls -l
查看文件的权限,只保留了拥有者(Owner) root 用户可读,如下:
% ls -l
-r-------- 1 root wheel 31 4 28 20:00 rs0.keys
启动数据库
mongod --config ../conf/mongodb.conf
初始化复制集
通过 MongoDB 控制台登录数据库,执行命令 rs.initiate()
初始化复制集。
mongo -u admin
MongoDB shell version v4.4.6
Enter password:
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("446dc743-bfe4-45eb-b4d0-56bdf12dcc4e") }
MongoDB server version: 4.4.6
---
...
---
> rs.initiate()
执行成功后,复制集就已经就绪可以开始工作了。此时,可以通过命令 rs.conf()
查看复制集的配置,通过命令 rs.status()
查看复制集的状态。在此示例的单机版复制集集群中,本机就是集群的 Primary 节点,Member 节点数量为 0 。
注意!!!
默认情况下,启动运行的 MongoDB 数据库服务不需要进行客户端登录验证,这对于正式生产环境是不可接受的。 当用于生产环境或其它重要环境时,请务必通过参数
security.authorization
开启登录验证。
客户端连接 MongoDB
基本语法:
mongo --host localhost --port 27017
指定登录用户名 admin :
mongo --host localhost --port 27017 -u admin
关闭 MongoDB 服务器
首先,以管理员账号登录到 MongoDB 服务器(参考上一节)
然后,切换到 amdin
数据库,执行命令 db.shutdownServer()
。
> use admin
switched to db admin
> db.shutdownServer()
server should be down...