MongoDB安装教程

# MongoDB安装教程

MongoDB是一个流行的NoSQL文档数据库,本文介绍MongoDB的安装方法。

## 一、MongoDB简介

MongoDB是一个基于文档的NoSQL数据库,主要特点:
- 文档存储:使用BSON格式存储数据
- 灵活的模式:不需要预定义表结构
- 高性能:支持索引和聚合查询
- 水平扩展:支持分片集群
- 丰富的查询语言

## 二、CentOS/RHEL安装

添加MongoDB仓库:

cat > /etc/yum.repos.d/mongodb-org-6.0.repo << EOF
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF

安装MongoDB:

yum install -y mongodb-org

启动MongoDB服务:

systemctl start mongod
systemctl enable mongod
systemctl status mongod

## 三、Ubuntu/Debian安装

导入公钥:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | apt-key add -

添加MongoDB仓库:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-6.0.list

更新包列表并安装:

apt-get update
apt-get install -y mongodb-org

启动MongoDB服务:

systemctl start mongod
systemctl enable mongod
systemctl status mongod

## 四、Docker安装

拉取MongoDB镜像:

docker pull mongo:6.0

运行MongoDB容器:

docker run -d \
  --name mongodb \
  -p 27017:27017 \
  -v /data/mongodb:/data/db \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=your_password \
  mongo:6.0

连接MongoDB:

docker exec -it mongodb mongosh -u admin -p your_password

## 五、配置文件

MongoDB配置文件位置:/etc/mongod.conf

基本配置:

# 网络配置
net:
  port: 27017
  bindIp: 0.0.0.0

# 存储配置
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

# 日志配置
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# 安全配置
security:
  authorization: enabled

重启服务使配置生效:

systemctl restart mongod

## 六、创建用户和数据库

连接MongoDB:

mongosh

创建管理员用户:

use admin
db.createUser({
  user: "admin",
  pwd: "your_strong_password",
  roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
})

创建应用数据库和用户:

use myapp
db.createUser({
  user: "appuser",
  pwd: "app_password",
  roles: ["readWrite"]
})

## 七、基本操作

插入数据:

use mydb
db.users.insertOne({
  name: "张三",
  age: 25,
  email: "zhangsan@example.com"
})

查询数据:

db.users.find()
db.users.find({age: {$gt: 20}})

更新数据:

db.users.updateOne(
  {name: "张三"},
  {$set: {age: 26}}
)

删除数据:

db.users.deleteOne({name: "张三"})

## 八、Python客户端

安装PyMongo:

pip install pymongo

连接MongoDB:

from pymongo import MongoClient

# 连接MongoDB
client = MongoClient(
    'mongodb://admin:password@localhost:27017/',
    authSource='admin'
)

# 选择数据库
db = client['myapp']

# 插入数据
result = db.users.insert_one({
    'name': '李四',
    'age': 30
})

# 查询数据
for user in db.users.find():
    print(user)

# 更新数据
db.users.update_one(
    {'name': '李四'},
    {'$set': {'age': 31}}
)

# 删除数据
db.users.delete_one({'name': '李四'})

## 九、Java客户端

添加依赖:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.9.1</version>
</dependency>

连接MongoDB:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;

// 连接MongoDB
MongoClient mongoClient = MongoClients.create(
    "mongodb://admin:password@localhost:27017/?authSource=admin"
);

// 选择数据库
MongoDatabase database = mongoClient.getDatabase("myapp");

// 获取集合
MongoCollection<Document> collection = database.getCollection("users");

// 插入数据
Document document = new Document("name", "王五")
    .append("age", 28);
collection.insertOne(document);

// 查询数据
for (Document doc : collection.find()) {
    System.out.println(doc.toJson());
}

// 关闭连接
mongoClient.close();

## 十、Go客户端

安装驱动:

go get go.mongodb.org/mongo-driver/mongo

连接MongoDB:

package main

import (
    "context"
    "fmt"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

type User struct {
    Name string `bson:"name"`
    Age  int    `bson:"age"`
}

func main() {
    // 连接MongoDB
    clientOptions := options.Client().ApplyURI(
        "mongodb://admin:password@localhost:27017/?authSource=admin",
    )
    client, _ := mongo.Connect(context.TODO(), clientOptions)
    defer client.Disconnect(context.TODO())

    // 选择数据库和集合
    collection := client.Database("myapp").Collection("users")

    // 插入数据
    user := User{Name: "赵六", Age: 35}
    collection.InsertOne(context.TODO(), user)

    // 查询数据
    cursor, _ := collection.Find(context.TODO(), nil)
    var results []User
    cursor.All(context.TODO(), &results)

    for _, result := range results {
        fmt.Println(result.Name, result.Age)
    }
}

## 十一、备份与恢复

备份数据库:

mongodump --host localhost --port 27017 \
  --username admin --password your_password \
  --authenticationDatabase admin \
  --db myapp --out /backup/mongodb

恢复数据库:

mongorestore --host localhost --port 27017 \
  --username admin --password your_password \
  --authenticationDatabase admin \
  --db myapp /backup/mongodb/myapp

## 十二、监控与维护

查看MongoDB状态:

mongosh --eval "db.serverStatus()"

查看数据库统计:

mongosh --eval "db.stats()"

查看集合统计:

mongosh --eval "db.users.stats()"

查看当前操作:

mongosh --eval "db.currentOp()"

## 十三、性能优化

创建索引:

db.users.createIndex({name: 1})
db.users.createIndex({email: 1}, {unique: true})
db.users.createIndex({age: 1, name: 1})

查看索引:

db.users.getIndexes()

分析查询:

db.users.find({age: {$gt: 20}}).explain("executionStats")

## 十四、安全建议

1. 启用认证:在配置文件中设置security.authorization
2. 使用强密码:为所有用户设置复杂密码
3. 网络隔离:使用防火墙限制访问
4. SSL/TLS加密:生产环境启用SSL
5. 定期备份:建立完善的备份策略
6. 权限最小化:为不同应用创建独立用户

## 十五、常见问题

MongoDB无法启动:

# 检查配置文件
mongod --config /etc/mongod.conf --fork

# 查看日志
tail -f /var/log/mongodb/mongod.log

# 检查端口占用
netstat -tlnp | grep 27017

连接失败:

# 检查防火墙
firewall-cmd --add-port=27017/tcp --permanent
firewall-cmd --reload

# 检查MongoDB状态
systemctl status mongod

性能问题:

# 检查慢查询
mongosh --eval "db.setProfilingLevel(1)"
mongosh --eval "db.system.profile.find().sort({millis: -1}).limit(10)"

# 检查索引使用情况
mongosh --eval "db.users.aggregate([{$indexStats: {}}])"

## 总结

MongoDB是一个功能强大的NoSQL数据库,安装简单,使用方便。通过本文的介绍,你可以快速搭建MongoDB环境,并进行基本的开发操作。

记住:在生产环境中,务必做好安全配置和备份策略!

发表回复

后才能评论