当前位置: 首页 > news >正文

ubuntu下docker安装mongodb-支持单副本集

1.mogodb支持事务的前提

1) MongoDB 版本:确保 MongoDB 版本大于或等于 4.0,因为事务支持是在 4.0 版本中引入的。

2) 副本集配置:MongoDB 必须以副本集(Replica Set)模式运行,即使是单节点副本集(即只有一个 MongoDB 实例,但以副本集模式启动)。

2.安装docker

3.创建目录和文件

1) 宿主机-mongodb的数据存储目录

mkdir /mongo/data
chmod 777 /mongo/data

2) 宿主机-mongodb的配置文件目录

mkdir /mongo/conf
chmod 777 /mongo/conf

3) 宿主机-mongodb的密钥文件

cd /mongo
openssl rand -base64 756 > keyFile
chmod 400 keyFile  # 一定是400,不要赋权777
chown 999:999 keyFile

4) 在/mongo/conf目录下,生成配置文件mongod.conf

# 存储配置
storage:dbPath: /data/db                 # 数据库文件存储路径engine: wiredTiger              # 存储引擎(通常为 wiredTiger)wiredTiger:engineConfig:cacheSizeGB: 1               # WiredTiger 缓存大小(单位:GB)directoryForIndexes: true    # 是否为索引使用单独目录# 网络配置
net:port: 27017                      # MongoDB 监听端口bindIp: 0.0.0.0                  # 绑定 IP 地址(0.0.0.0 表示监听所有网络接口)# 安全配置
security:authorization: enabled           # 是否启用认证keyFile: /data/mongodb/keyFile  # 密钥文件路径(用于副本集或分片集群)# 副本集配置(如果使用副本集)
replication:replSetName: "rs0"               # 副本集名称

4.启动MongoDB容器

docker run -d --name mongo -p 27017:27017 \
-v /mongo/data:/data/db \
-v /mongo/conf/mongod.conf:/etc/mongod.conf \
-v /mongo/keyFile:/data/mongodb/keyFile \
mongo:latest  mongod --auth --bind_ip_all --config /etc/mongod.conf

       如果运行上述命令后,mongodb容器处于退出状态,请排查数据挂载目录权限、配置文件问题、keyFile文件问题、27017端口没有开放、容器占用系统太多资源导致系统资源不足等问题,可通过docker logs mongo查看具体原因。

5.查看mongodb存储引擎和发行版本

# 查看mongodb版本
db.version()
# 查看当前数据库的存储引擎(需要root角色用户)
db.serverStatus().storageEngine

6.初始化副本集和创建用户

# 进入MongoDB容器
docker exec -it mongo mongosh
# 初始化副本集
rs.initiate()
# 创建管理员用户
use admin
db.createUser({user: 'admin', pwd: 'admin123456', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]})
# 创建root用户
db.createUser({user: "root",pwd: "123456",roles: [{ role: "root", db: "admin" }]
})
# 验证用户
db.auth("admin", "admin123456")
db.auth("root", "123456")

7.Flask-MongoEngine使用事务

       在 MongoDB 中,事务是通过会话(Session)来管理的。Flask-MongoEngine 本身不直接提供事务管理,但可以通过 PyMongo 的会话功能来实现。

from flask import Flask
from flask_mongoengine import MongoEngine
from pymongo import MongoClient, ASCENDING
from pymongo.errors import OperationFailureapp = Flask(__name__)# 配置 MongoDB 连接
app.config["MONGODB_SETTINGS"] = {'db': 'your_database_name','host': 'mongodb://localhost:27017/'
}db = MongoEngine(app)# 定义一个简单的模型
class MyModel(db.Document):name = db.StringField(required=True)value = db.IntField(required=True)@app.route('/transaction_example', methods=['GET'])
def transaction_example():# 获取 PyMongo 客户端client = MongoClient(app.config["MONGODB_SETTINGS"]['host'])session = client.start_session()try:with session.start_transaction():# 在事务中执行操作MyModel(name='example', value=1).save(session=session)# 可以在这里执行更多操作,它们将在同一个事务中# 如果任何操作失败,整个事务将回滚session.commit_transaction()return "Transaction committed successfully."except OperationFailure as e:# 如果事务失败,回滚session.abort_transaction()return f"Transaction aborted: {e}"finally:session.end_session()if __name__ == '__main__':app.run(debug=True)

相关文章:

  • 磁盘空间不足,迁移Docker 数据目录
  • 基于自然语言转SQL的BI准确率如何?
  • 《算法笔记》11.8小节——动态规划专题->总结 问题 D: Coincidence
  • linux下jenkins部署安装使用
  • 【图像大模型】Stable Video Diffusion:基于时空扩散模型的视频生成技术深度解析
  • 【HTML-2】HTML 标题标签:构建网页结构的基础
  • 设计模式之备忘录模式
  • 如何使用通义灵码玩转Python - AI编程助手提升效率
  • windows安装WS,实测可行
  • Prompt Tuning:轻量级大模型微调全攻略
  • Python | 库存覆盖天数【待续】
  • 理解阿里云的MQTT
  • Python类的力量:第六篇:设计模式——Python面向对象编程的“架构蓝图”
  • 面试突击:消息中间件之RabbitMQ
  • 《医院运营管理典型应用数据资源建设指南2025》全面分析
  • DeepSeek+PiscTrace+YOLO:迅速实现Mask掩码抠图
  • 【node.js】核心进阶
  • 在 Git 中添加子模块(submodule)的详细步骤
  • C++学习:六个月从基础到就业——多线程编程:互斥量与锁
  • Awesome ChatGPT Prompts:释放AI对话潜力的开源利器
  • 媒体刊文:“假官号”层出不穷,平台要当好把关人
  • F4方程式上海站引擎轰鸣,见证中国赛车运动不断成长
  • 马上评|劳动课该如何找回“存在感”
  • 瑞幸首度牵手成都国际非遗节,用一杯饮品将非遗之美推向全国
  • 大学2025丨苏大教授王尧:文科最大的危机是阐释世界的能力弱化
  • 上海这个咖啡文化节首次“走出去”,率本土品牌亮相英国伦敦