MongoDB是一个非关系型数据库管理系统,它使用文档模型存储数据。MongoDB中的文档类似于JSON对象,可以包含键值对和嵌套文档。MongoDB提供了强大的查询语言、聚合框架、索引和直接在数据存储中运行的计算。
MongoDB被广泛应用于许多领域,特别是Web应用程序和大数据领域。它具有高度可扩展性和灵活性,可以处理多种数据类型。此外,MongoDB还提供了一系列工具和库,以方便开发人员在应用程序中使用它。
MongoDB可以存储Web内容管理系统的重要数据,例如页面和文章内容、标签等,以及和用户相关的数据。
安装
执行以下命令添加 MongoDB 的官方仓库:
vim /etc/yum.repos.d/mongodb-org-4.4.repo
在文件中添加以下内容
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
保存并退出。
安装 MongoDB:
[root@localhost ~]# yum install mongodb-org -y
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* epel: mirrors.bfsu.edu.cn
* extras: mirrors.bfsu.edu.cn
* updates: mirrors.bfsu.edu.cn
配置 MongoDB
打开 MongoDB 的配置文件:
sudo vi m/etc/mongod.conf
- `bindIp`:绑定的 IP 地址。默认为 `127.0.0.1`,即本地访问,如果需要远程访问需要将其改为 `0.0.0.0`。
- `port`:端口号。默认为 `27017`,根据实际需要修改。
保存退出
执行以下命令启动 MongoDB
systemctl start mongod
执行以下命令将 MongoDB 设置为系统服务:
[root@localhost ~]# systemctl enable mongod
可以使用以下命令检查服务的状态:
sudo systemctl status mongod
使用以下命令登录 MongoDB
[root@localhost ~]# mongo
MongoDB shell version v4.4.22
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3034ffa1-9092-494c-8749-e03d15836666") }
MongoDB server version: 4.4.22
---
The server generated these startup warnings when booting:
2023-06-13T14:25:22.535+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2023-06-13T14:25:22.535+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2023-06-13T14:25:22.535+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
>
命令
可以使用以下命令检查 MongoDB 的版本:
如果成功安装 MongoDB,则应该输出 MongoDB 的版本号
> db.version()
4.4.22
进入admin数据库:
use admin
> use admin
switched to db admin
创建管理员用户
> db.createUser({ user: "admin", pwd: "123.com", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
uncaught exception: Error: couldn't add user: User "admin@admin" already exists :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1386:11
@(shell):1:1
其中,`user` 和 `pwd` 分别是要创建的用户的用户名和密码。`roles` 是一个数组,用于指定该用户在哪些数据库中拥有哪些角色。每个角色都由一个 `role` 字段和一个 `db` 字段组成,分别表示角色名称和所属的数据库名称。
exit退出
重启
[root@localhost ~]# systemctl stop mongod
[root@localhost ~]# systemctl start mongod
[root@localhost ~]#
再次使用mongo shell登录到MongoDB,使用以下命令验证登录
[root@localhost ~]# mongo -u admin -p 123.com --authenticationDatabase admin
MongoDB shell version v4.4.22
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b1abfdf6-fdce-4b19-965c-5d7b29293553") }
MongoDB server version: 4.4.22
---
The server generated these startup warnings when booting:
2023-06-13T18:16:57.509+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2023-06-13T18:16:57.509+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2023-06-13T18:16:57.509+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
显示所有数据库的列表
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
选择要使用的数据库。如果该数据库不存在,则会创建一个新数据库
> use local
switched to db local
在指定集合中插入一个新文档
> db.local.insertOne( { name: "John", age: 30, city: "New York" } )
{
"acknowledged" : true,
"insertedId" : ObjectId("648842bebea94c1f1f347dad")
}
更新指定集合中的一个文档
> db.local.updateOne(
{ name: "John" },
{ $set: { city: "San Francisco" } }
)
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
删除指定集合中的一个文档
> db.local.deleteOne( { name: "John" } )
{ "acknowledged" : true, "deletedCount" : 1 }
创建
> use local
switched to db local
返回查看指定集合中文档的数量
> db.local.count()
0
创建用户数据库
> use testdb
db.createUser({
user: "testuser",
pwd: "123.com",
roles: [
{ role: "readWrite", db: "testdb" }
]
})
Successfully added user: {
"user" : "testuser",
"roles" : [
{
"role" : "readWrite",
"db" : "testdb"
}
]
}
删除当前使用的数据库
db.dropDatabase()
获取当前使用的数据库的状态信息
db.stats()
> db.stats()
{
"db" : "testdb",
"collections" : 0,
"views" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"totalSize" : 0,
"indexes" : 0,
"indexSize" : 0,
"scaleFactor" : 1,
"fileSize" : 0,
"fsUsedSize" : 0,
"fsTotalSize" : 0,
"ok" : 1
}
热备份
热备份是在MongoDB处于运行状态下进行备份的一种方式。具体步骤如下
[root@localhost ~]# mongodump --out /data/backup
2023-06-13T18:34:45.382+0800 writing admin.system.users to /data/backup/admin/system.users.bson
2023-06-13T18:34:45.383+0800 done dumping admin.system.users (2 documents)
2023-06-13T18:34:45.384+0800 writing admin.system.version to /data/backup/admin/system.version.bson
2023-06-13T18:34:45.384+0800 done dumping admin.system.version (2 documents)
如果需要对导出的备份数据进行压缩,可以使用以下命令
[root@localhost ~]# tar -czvf backup.tar.gz /data/backup
tar: 从成员名中删除开头的“/”
/data/backup/
/data/backup/admin/
/data/backup/admin/system.users.metadata.json
/data/backup/admin/system.version.metadata.json
/data/backup/admin/system.users.bson
/data/backup/admin/system.version.bson
启动MongoDB服务
[root@localhost ~]# systemctl start mongod
MongoDB使用mongorestore命令将备份数据还原到MongoDB中。以下是MongoDB备份数据还原的步骤:
需要解压缩MongoDB备份文件。假设备份文件`backup.tar.gz`被解压到了`/data/backup`目录,使用以下命令解压备份文件
[root@localhost ~]# tar -xzvf backup.tar.gz -C /data/backup
data/backup/
data/backup/admin/
data/backup/admin/system.users.metadata.json
data/backup/admin/system.version.metadata.json
data/backup/admin/system.users.bson
data/backup/admin/system.version.bson
使用mongorestore命令将备份数据还原到MongoDB中。以下命令将备份数据恢复到MongoDB
[root@localhost ~]# mongorestore --db mydb /data/backup/
2023-06-13T19:15:56.536+0800 The --db and --collection flags ae deprecated for this use-case; please use --nsInclude instead, ie. with --nsInclude=${DATABASE}.${COLLECTION}
2023-06-13T19:15:56.536+0800 building a list of collections torestore from /data/backup dir
2023-06-13T19:15:56.536+0800 don't know what to do with subdirctory "backup/admin", skipping...
2023-06-13T19:15:56.536+0800 don't know what to do with subdirctory "backup/data", skipping...
2023-06-13T19:15:56.536+0800 0 document(s) restored successfuly. 0 document(s) failed to
restore.还原备份数据后,重启MongoDB服务
systemctl start mongod