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# -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456

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

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

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

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

# 进入MongoDB容器
docker exec -it mongo mongosh
# 初始化副本集
rs.initiate({_id: "rs0",members: [{ _id: 0, host: "172.12.112.102:27017" }]
})
# 创建管理员用户
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. 创建集合

use biobank
db.createUser({user: "test", pwd: "123456", roles: [{role: "readWrite", db: "printing"}]})
exitdocker exec -it mongo mongosh
use biobank
db.auth("test", "123456")

8.Flask-MongoEngine使用事务

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

MONGODB_SETTINGS = {'db': 'biobank','host': 'mongodb://test:123456@172.12.112.102:27017/biobank?replicaSet=rs0'
}# 或者
MONGODB_SETTINGS = {'host': '172.12.112.102','port': 27017,'username': 'test','password': '123456','db': 'biobank','authSource': 'biobank',  # 指定身份验证数据库'replicaSet': 'rs0','connectTimeoutMS': 5000,  # 设置套接字超时时间(毫秒)。'socketTimeoutMS': 30000,  # 设置套接字超时时间(毫秒)。'serverSelectionTimeoutMS': 5000,  # 设置服务器选择超时时间(毫秒),当客户端尝试连接到 MongoDB 服务器时,如果在此时间内没有找到可用的服务器,将抛出异常。'retryWrites': True,  # 写重试'retryReads': True  # 读重试
}
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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端开发】Uniapp日期时间选择器:实现分钟动态步长设置

技术栈 Uniapp + Vue3 + uView年份显示前后一年,分钟动态设置间隔效果图 主体显示<view class="uni-row-between selector"><view class="uni-flex-1 left" @click="!props.disabled && openPicker()"><uni-iconscolor=…

iOS 蓝牙开发中的 BT 与 BLE

在 iOS 开发者的语境里&#xff0c;大家把 BT 和 BLE 当成两种不同的蓝牙技术在谈——它们来自同一个 Bluetooth 规范&#xff0c;但面向的场景、协议栈乃至 Apple 提供的 API 都截然不同。 缩写全称 / 技术名称规范层叫法iOS 支持现状典型用途BTBluetooth Classic&#xff08…

Flink CEP是什么?

Apache Flink 的 CEP&#xff08;Complex Event Processing&#xff0c;复杂事件处理&#xff09; 是 Flink 提供的一个库&#xff0c;用于在无界数据流中检测符合特定模式的事件组合。 &#x1f3af; 一、什么是 CEP&#xff1f; ✅ 定义&#xff1a; CEP 是一种从连续的数据…

ARM (Attention Refinement Module)

ARM模块【来源于BiSeNet】&#xff1a;细化特征图的注意力&#xff0c;增强重要特征并抑制不重要的特征。 Attention Refinement Module (ARM) 详解 ARM (Attention Refinement Module) 是 BiSeNet 中用于增强特征表示的关键模块&#xff0c;它通过注意力机制来细化特征图&…

AR0144CSSC20SUKA0-CRBR——1/4英寸 1.0 MP 高性能CMOS图像传感器解析

产品概述&#xff1a; AR0144CSSC20SUKA0-CRBR 是一款1/4 英寸&#xff0c;1.0 Mp CMOS 数字图像传感器&#xff0c;带有 1280H x 800V 有效像素阵列 全局快门CMOS数字图像传感器&#xff0c;它结合了新型的创新全局快门像素设计&#xff0c;适用于准确快速的移动场景捕捉。该…

深入理解递归算法:Go语言实现指南

深入理解递归算法&#xff1a;Go语言实现指南 引言 递归是编程中一种优雅而强大的算法思想&#xff0c;通过函数自我调用的方式解决复杂问题。本文将使用Go语言演示递归的核心原理&#xff0c;并通过典型示例帮助开发者掌握这一重要技术。 一、递归基础概念 1.1 递归定义 递归…

vue2实现【瀑布流布局】

瀑布流 1. 解释2. 形成结构和样式3. 自定义指令 1. 解释 瀑布流特征&#xff1a; 等宽不等高&#xff1a;元素宽度固定&#xff0c;高度根据内容自适应。错落排列&#xff1a;元素像瀑布一样从上到下依次填充&#xff0c;自动寻找最短列插入 体现&#xff1a;图中第一排1&…

CSS display有几种属性值

在 CSS 中&#xff0c;display 属性是控制元素布局和渲染方式的核心属性之一。它有多种属性值&#xff0c;每个值都决定了元素在文档流中的表现形式。以下是 display 的主要属性值分类及说明&#xff1a; 1. 块级和行内布局 块级元素 (block) 特性&#xff1a;独占一行&…

基于Java实现可靠传输

实现可靠传输 1. 结合代码和 LOG 文件分析针对每个项目举例说明解决效果。 RDT1.0 对应 Log 日志&#xff1a;Log 1.0.txt&#xff0c;接收文件 recvData 1.0.txt RDT1.0 版本是在可靠信道上进行可靠的数据传输&#xff0c;因此没有过多的内容需要说明&#xff0c;发送方 L…

机器学习10-随机森林

随机森林学习笔记 一、随机森林简介 随机森林&#xff08;Random Forest&#xff09;是一种集成学习算法&#xff0c;基于决策树构建模型。它通过组合多个决策树的结果来提高模型的准确性和稳定性。随机森林的核心思想是利用“集成”的方式&#xff0c;将多个弱学习器组合成一…

LeetCode 438. 找到字符串中所有字母异位词 | 滑动窗口与字符计数数组解法

文章目录 问题描述核心思路&#xff1a;滑动窗口 字符计数数组1. 字符计数数组2. 滑动窗口 算法步骤完整代码实现复杂度分析关键点总结类似问题 问题描述 给定两个字符串 s 和 p&#xff0c;要求找到 s 中所有是 p 的**字母异位词&#xff08;Anagram&#xff09;**的子串的起…

idea中,git的cherry-pick怎么用

背景: A同学在A分支进行开发, B同学在B分支进行开发,B同学开发过程中发现,A同学在A分支上面的某次提交,例如某次提交了一个工具类,B同学也用的到这个工具类,但是B又不想mergeA分支的代码,此时就可以用到git的chery pick能力.

深入解析:如何基于开源OpENer开发EtherNet/IP从站服务

一、EtherNet/IP协议概述 EtherNet/IP(Industrial Protocol)是一种基于以太网的工业自动化通信协议,它将CIP(Common Industrial Protocol)封装在标准以太网帧中,通过TCP/IP和UDP/IP实现工业设备间的通信。作为ODVA(Open DeviceNet Vendors Association)组织的核心协议…

当 PyIceberg 和 DuckDB 遇见 AWS S3 Tables:打造 Serverless 数据湖“开源梦幻组合”

引言 在一些大数据分析场景比如电商大数据营销中&#xff0c;我们需要快速分析存储海量用户行为数据&#xff08;如浏览、加购、下单&#xff09;&#xff0c;以进行用户行为分析&#xff0c;优化营销策略。传统方法依赖 Spark/Presto 集群或 Redshift 查询 S3 上的 Parquet/O…

流复备机断档处理

文章目录 环境症状问题原因解决方案 环境 系统平台&#xff1a;UOS&#xff08;海光&#xff09;,UOS &#xff08;飞腾&#xff09;,UOS&#xff08;鲲鹏&#xff09;,UOS&#xff08;龙芯&#xff09;,UOS &#xff08;申威&#xff09;,银河麒麟svs&#xff08;X86_64&…

【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)

文章目录 T1 偏蓝 (5/5)T2 IPv6 (0/5)T3 2025 图形 (10/10)T4 最大数字 (10/10)T5 倒水 (15/15)T6 拼好数 (0/15)T7 登山 (20/20)T8 原料采购 (20/20) 更好的阅读体验 高速访问&#xff1a;https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久链接&#xff1…

SpringBoot+Dubbo+Zookeeper实现分布式系统步骤

SpringBootDubboZookeeper实现分布式系统 一、分布式系统通俗解释二、环境准备&#xff08;详细版&#xff09;1. 软件版本2. 安装Zookeeper&#xff08;单机模式&#xff09; 三、完整项目结构&#xff08;带详细注释&#xff09;四、手把手代码实现步骤1&#xff1a;创建父工…

Spring的业务层,持久层,控制层的关系

在 Spring 框架中&#xff0c;控制层&#xff08;Controller&#xff09;、业务层&#xff08;Service&#xff09; 和 持久层&#xff08;Repository/Mapper&#xff09; 是分层架构的核心组成部分&#xff0c;职责分离明确&#xff0c;通过依赖注入&#xff08;DI&#xff09…

css实现不确定内容的高度过渡

实现效果&#xff1a;鼠标悬浮按钮&#xff0c;高度过渡出现如图所示文本框 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

计算机视觉与深度学习 | matlab实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据)

以下是一个基于MATLAB的ARIMA-WOA-CNN-LSTM时间序列预测框架。由于完整代码较长,此处提供核心模块和实现思路,完整源码和数据可通过文末方式获取。 1. 数据准备(示例数据) 使用MATLAB内置的航空乘客数据集: % 加载数据 data = readtable(airline-passengers.csv); data …