一、安装
1. 准备安装环境
# 更新系统软件包
sudo yum update -y
# 安装基础依赖
sudo yum install -y libcurl openssl
2.创建MongoDB仓库文件
// centos7
sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo <<EOF
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF
// centos8
sudo tee /etc/yum.repos.d/mongodb-org-8.0.repo <<EOF
[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/8.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-8.0.asc
EOF
3.安装 MongoDB 软件包
sudo yum install -y mongodb-org
4.配置 MongoDB
sudo vi /etc/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0 # 如需远程访问,改为0.0.0.0
security:
authorization: enabled # 启用认证
5. 启动 MongoDB 服务
sudo systemctl status mongod
sudo systemctl start mongod
sudo systemctl enable mongod
6.创建管理员用户
连接到 MongoDB 服务器:
mongosh
# MongoDB 服务器运行在非默认端口或者远程服务器上
mongosh --host <hostname>:<port>
# 启用身份验证后,你需要使用创建的用户身份连接到 MongoDB:
mongosh --host <hostname> --port <port> -u "testuser" -p "password123" --authenticationDatabase "<database_name>"
use admin
db.createUser({
user: "admin",
pwd: "YourSecurePassword123!", // 请改为强密码
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "clusterAdmin", db: "admin" }
]
})
exit
use test
db.createUser({
user: "testuser",
pwd: "password123",
roles: [
{ role: "readWrite", db: "<database_name>" },
{ role: "dbAdmin", db: "<database_name>" }
]
})
删除用户
db.dropUser("testuser")
7.重启服务使认证生效
sudo systemctl restart mongod
8. 维护(可选)与常见问题解决
备份
# 定期备份:
mongodump --uri="mongodb://admin:Xkzh666888@localhost:27017" --out=/backup/mongodb-$(date +%F)
设置定期维护任务:
# 每月重建索引
echo "0 3 1 * * mongo --eval 'db.getSiblingDB(\"admin\").runCommand({reIndex: \"system.profile\"})'" | sudo tee -a /etc/crontab
重建索引
1.手动重建单个集合索引
use yourDatabase
db.yourCollection.reIndex()
2. 自动化脚本(每月执行)
#!/bin/bash
# 每月1日凌晨3点执行
MONGO_URI="mongodb://admin:password@localhost:27017/admin?tls=true"
# 获取所有数据库(排除系统库)
DATABASES=$(mongo "$MONGO_URI" --quiet --eval "db.adminCommand({listDatabases:1}).databases.forEach(function(d){if(!['admin','local','config'].includes(d.name))print(d.name)})")
# 遍历数据库重建索引
for DB in $DATABASES; do
COLLECTIONS=$(mongo "$MONGO_URI" --quiet --eval "db.getSiblingDB('$DB').getCollectionNames().forEach(function(c){print(c)})")
for COL in $COLLECTIONS; do
echo "重建 $DB.$COL 索引..."
mongo "$MONGO_URI" --quiet --eval "db.getSiblingDB('$DB').getCollection('$COL').reIndex()"
done
done
3. 通过 crontab 设置定时任务
# 编辑定时任务
sudo crontab -e
# 添加以下内容(每月1日凌晨3点执行)
0 3 1 * * /path/to/your/reindex_script.sh >> /var/log/mongodb/reindex.log 2>&1
4. 重建效果验证
// 查看索引大小变化
db.collection.stats().indexSizes
// 检查查询执行计划
db.collection.find({yourQuery}).explain("executionStats")
8.3 常见问题解决
# 查看错误日志
sudo cat /var/log/mongodb/mongod.log
# 常见问题1:数据目录权限
sudo chown -R mongod:mongod /var/lib/mongo
# 常见问题2:端口占用
sudo netstat -tulnp | grep 27017
9.基本操作
- 查看当前数据库:db
- 显示数据库列表:show dbs
- 切换到指定数据库:use <database_name>
- 执行查询操作:db.<collection_name>.find()
- 插入文档:db.<collection_name>.insertOne({ … })
- 更新文档:db.<collection_name>.updateOne({ … })
- 删除文档:db.<collection_name>.deleteOne({ … })
- 退出 MongoDB Shell:quit() 或者 exit
# 启动 MongoDB Shell
mongosh
# 连接到本地 MongoDB 服务器
test> show dbs
admin 40.00 KiB
config 72.00 KiB
local 40.00 KiB
runoob 72.00 KiB
test> use runoob
switched to db runoob
# 插入文档
runoob> db.mycollection.insertOne({ name: "Alice", age: 30 })
{
acknowledged: true,
insertedId: ObjectId('667cd8789a69705686ed70f2')
}
# 查询文档
runoob> db.mycollection.find()
[
{ _id: ObjectId('667cd8789a69705686ed70f2'), name: 'Alice', age: 30 }
]
# 更新文档
runoob> db.mycollection.updateOne({ name: "Alice" }, { $set: { age: 31 } })
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
# 删除文档
runoob> db.mycollection.deleteOne({ name: "Alice" })
{ acknowledged: true, deletedCount: 1 }
# 退出 MongoDB Shell
runoob> quit()
二、项目使用
application.yml
# Spring配置
spring:
data:
mongodb:
uri: mongodb://admin:Xkzh666888@120.77.38.122:27017/archive_db?authSource=admin
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>