Linux(CentOS7.9)MongoDB的安装配置教程3个服务器+增量备份(带脚本)

这篇具有很好参考价值的文章主要介绍了Linux(CentOS7.9)MongoDB的安装配置教程3个服务器+增量备份(带脚本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


首先,作为前端的开发人员,使用 MongoDB 数据库是非常常见的,接下来是在 Linux 系统下安装和配置 MongoDB 的过程。只要按照以下步骤操作,相信你一定可以顺利完成安装。

Ⅰ、安装前的简介:
1、什么是 MongoDB 数据库? MongoDB 是用 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。它能在高负载情况下通过添加更多节点来保证服务器性能。MongoDB 旨在为 WEB 应用提供一个可扩展的高性能数据存储解决方案。它将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。

2、什么是 Compass 工具?
Compass 是一个用于通过图形化界面操作 MongoDB 数据库的可视化工具。它既是一个软件也是一个工具,在 MongoDB 的官网上可以找到并下载。

3、什么样的结果才能证明 MongoDB 数据库安装成功?
在终端中输入命令访问 http://localhost:27017;如果在页面显示信息为:“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,就证明 MongoDB 已经安装好了,完成了安装任务。

4、为什么在安装完毕后,还需要配置本地 Linux 上的 MongoDB 服务?
因为如果每次都在指定位置运行命令会比较麻烦,所以我们需要设置一个服务,使其可以作为守护进程自动启动。这就需要我们把 MongoDB 设置为系统服务,并配置启动脚本(这通常涉及到编辑 systemd 的服务文件,设置日志和数据文件的存储路径)。
 

Ⅱ、下载并安装 MongoDB 数据库
1:操作系统安装过程忽略

2:操作系统的字符集应是中文,否则数据库的中文排序会有问题

3:操作系统的时区应是Asia/Shanghai,否则数据库的默认时区会不正确
(重复三遍)

4:所有配置文件仅列出修改部分

4:所有配置文件仅列出修改部分

4:所有配置文件仅列出修改部分
*******************************

5:假设有3台服务器,IP分别为192.168.0.131、192.168.0.132、192.168.0.133,131作为主节点,132作为从节点,133作为仲裁节点兼数据库节点

按官网文档描述,生产环境应以主机名或域名方式配置集群节点,故实际操作过程中应将这3个IP替换成对应的主机名,确保服务器之间主机名能互相识别

6:以下所有操作都以root权限执行,可以直接用root登录,也可以用sudo
正式开始
7:下载安装包在三个节点服务器都需要下载,如果是在自己搭建虚拟机测试的话可以建立一个然后克隆虚拟机(131+132+133)

curl -O https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/RPMS/mongodb-org-server-6.0.12-1.el7.x86_64.rpm &&\
curl -O https://downloads.mongodb.com/compass/mongodb-mongosh-2.1.1.x86_64.rpm &&\
curl -O https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libzstd-1.5.5-1.el7.x86_64.rpm &&\
curl -O https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-devel-5.0.1-7.el7.x86_64.rpm &&\
curl -O https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-5.0.1-7.el7.x86_64.rpm &&\
curl -O https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-libs-5.0.1-7.el7.x86_64.rpm

8:安装libzstd(131+132+133)
 

yum install -y libzstd-1.5.5-1.el7.x86_64.rpm &&\
yum install -y centos-release-scl-rh llvm5*

9:开放防火墙端口(131+132+133)

firewall-cmd --zone=public --add-port=27017/tcp --permanent &&\
firewall-cmd --zone=public --add-port=5432/tcp --permanent &&\
systemctl restart firewalld &&\
firewall-cmd --list-ports


10:安装及设置mongo集群(主从仲裁模式)
10.1安装(131+132+133)

yum install -y mongodb-org-server-6.0.12-1.el7.x86_64.rpm &&\
yum install -y mongodb-mongosh-2.1.1.x86_64.rpm

 10.2生成集群密钥(131生成后复制到132和133)
 

mkdir /etc/mongo && openssl rand -base64 749 > /etc/mongo/security.key &&\
chmod 0600 /etc/mongo/security.key && chown mongod:mongod /etc/mongo/security.key

10.3修改配置文件(131+132+133)
vi /etc/mongod.conf

systemLog:
  logRotate: rename
storage:
    directoryPerDB: true
net:
    bindIp: 0.0.0.0
security:
  authorization: enabled
  keyFile: /etc/mongo/security.key
replication:
  replSetName: "mongo-gmp-rs" 
  oplogSizeMB: 4096

10.4:重启(131+132+133) 
 

systemctl restart mongod

 10.5主节点执行集群初始化(131)
使用mongosh命令进入mongo命令行
mongosh

use admin
rs.initiate({
  _id: "mongo-gmp-rs",
  version: 1,
  members: [
    { _id: 0, host : "192.168.0.131:27017", "priority": 20 },
    { _id: 1, host : "192.168.0.132:27017", "priority": 10 },
    { _id: 2, host : "192.168.0.133:27017", arbiterOnly: true }
  ]
})

 10.6:创建管理员和gmp用户并修改写入策略(131)
集群初始化等待几秒后回车,看到mongosh提示符变成primary再继续执行,如未变成primary则继续等待再回车,直至出现primary
rs.status()为查看集群状态,密码根据实际需要修改,db.auth()第二个参数是管理员密码
 

use admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]})
db.auth("admin","admin")
db.createUser({user:"gmp",pwd:"gmp",roles:[{role:"dbAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})
db.adminCommand({"setDefaultRWConcern" : 1,"defaultWriteConcern" : {"w" : 1}})
rs.status()

 至此mongo的安装以及集群设置完成
III:增量备份
1:增量备份介绍
MongoDB 的增量备份是指备份自上一个备份以来数据库中发生变化的数据。这种方式可以显著减少备份数据的大小,同时也减少了备份操作对系统性能的影响。在 MongoDB 中,增量备份通常依赖于 oplog(操作日志)来实现。下面是一个详细的介绍,包括增量备份的创建和还原过程。
2:增量备份的创建

  1. 确保启用了 oplog: MongoDB 的副本集自动使用 oplog 来记录数据的所有更改。如果你的数据库运行在副本集模式,oplog 会自动启用。对于单机部署,你可以通过将其转换为一个单节点的副本集来启用 oplog。

  2. 进行全量备份: 在开始进行增量备份之前,你需要有一个最近的全量备份。这个全量备份作为增量备份的基础。你可以使用 mongodump 工具来进行全量备份。
     

    mongodump --host mongodb.example.net --port 27017 --out /path/to/backup/directory
    
  3. 记录增量备份的起点: 增量备份依赖于 oplog,因此你需要知道上一次备份结束时的 oplog 位置。这可以通过查看备份结束时 oplog 的最后一条记录来确定。

  4. 创建增量备份: 当你需要创建增量备份时,你需要从上次备份结束时的 oplog 位置开始,将 oplog 中的所有新条目复制到备份位置。这可以通过 mongodump 工具和查询 oplog 集合来完成。
     

    mongodump --host mongodb.example.net --port 27017 --db local --collection oplog.rs --query '{"ts": {"$gt": Timestamp(上次备份的时间戳, 1)}}' --out /path/to/incremental/backup/directory
    

增量备份的还原

增量备份的还原过程涉及到首先还原一个全量备份,然后应用所有增量备份中记录的 oplog 条目。

1:还原全量备份: 使用 mongorestore 工具还原最近的全量备份。
 

mongorestore --host mongodb.example.net --port 27017 /path/to/backup/directory

2:接下来,你需要按照时间顺序应用每一个增量备份。这涉及到读取增量备份中的 oplog 条目,并使用 mongoreplay 工具(或通过其他方法)应用这些条目。
 

mongoreplay --host mongodb.example.net --port 27017 --replayOplog /path/to/incremental/backup/directory/local/oplog.rs.bson

注意事项

  • 备份频率:根据数据变更的频率和容忍的数据丢失量来决定增量备份的频率。
  • 监控存储空间:虽然增量备份比全量备份节省空间,但随着时间的推移,增量备份也会占用大量的存储空间。定期监控和维护备份存储空间是很重要的。
  • 安全性:确保备份数据的安全性,使用加密和安全的传输方式来存储和移动备份文件。
  • 测试还原过程:定期测试备份的还原过程是确保数据可恢复性的关键。

正片开始******************************************************************************************

1.full_bakup.sh(全量备份脚本)在这之前需要建立一个时间戳文件full_backup_timestamp.txt用来记录和更新全量备份的时间戳

#!/bin/bash

# 全备份脚本

# MongoDB 认证信息和备份目录
USERNAME="$MONGO_USER"
PASSWORD="$MONGO_PASS"
OUT_DIR="/mnt/hgfs/sharing/full"

# 执行全备份
mongodump --host localhost --port 27017 --username $USERNAME --password $PASSWORD --authenticationDatabase admin --db gmpmongodb --out $OUT_DIR/$(date +%F-%H%M%S)
# 调用 get_last_op_timestamp.sh 脚本来更新时间戳
/mnt/hgfs/sharing/get_last_op_timestamp.sh

2:get_last_op_timestamp.sh(获取最后时间戳)

#!/bin/bash

# 确保环境变量已经设置
if [ -z "$MONGO_USER" ] || [ -z "$MONGO_PASS" ]; then
  echo "MongoDB 用户名或密码环境变量未设置。"
  exit 1
fi

# 连接到 MongoDB 并获取最后操作的时间戳
LAST_OP_TS=$(mongosh --host localhost --port 27017 --username "$MONGO_USER" --password "$MONGO_PASS" --authenticationDatabase admin --quiet --eval 'db = db.getSiblingDB("local"); db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts')

# 使用 awk 提取时间戳秒数
LAST_OP_TS_SECONDS=$(echo $LAST_OP_TS | awk '{print substr($3, 1, length($3)-1)}')

# 将时间戳秒数写入文件
echo $LAST_OP_TS_SECONDS > /mnt/hgfs/sharing/full_backup_timestamp.txt

echo "最后操作时间戳已保存到: /mnt/hgfs/sharing/full_backup_timestamp.txt"

3:incremental_backup.sh(增量备份脚本)
 

#!/bin/bash

# 增量备份脚本

# MongoDB 认证信息和备份目录
USERNAME="$MONGO_USER"
PASSWORD="$MONGO_PASS"
OUT_DIR="/mnt/hgfs/sharing/incremental"

# 读取上次备份的时间戳
LAST_T=$(cat /mnt/hgfs/sharing/full_backup_timestamp.txt)
LAST_I=1

# 执行增量备份,包括具体的时间戳以避免覆盖
mongodump --host localhost --port 27017 --username $USERNAME --password $PASSWORD --authenticationDatabase admin --db local --collection oplog.rs --query "{\"ts\": {\"\$gt\": {\"\$timestamp\": {\"t\": $LAST_T, \"i\": $LAST_I}}}}" --out $OUT_DIR/$(date +%F-%H%M%S)

# 调用 get_last_op_timestamp.sh 脚本来更新时间戳
/mnt/hgfs/sharing/get_last_op_timestamp.sh

4:restore_backup.sh(增量恢复脚本)
 

#!/bin/bash

# MongoDB 认证信息
USERNAME="$MONGO_USER"
PASSWORD="$MONGO_PASS"
AUTH_DB="admin"
HOST="localhost"
PORT="27017"

# 全量和增量备份目录
FULL_BACKUP_DIR="/mnt/hgfs/sharing/full"
INCREMENTAL_BACKUP_DIR="/mnt/hgfs/sharing/incremental"

# 检查备份目录是否存在
if [ ! -d "$FULL_BACKUP_DIR" ]; then
    echo "Full backup directory does not exist."
    exit 1
fi

if [ ! -d "$INCREMENTAL_BACKUP_DIR" ]; then
    echo "Incremental backup directory does not exist."
    exit 1
fi

# 选择全备份进行恢复
echo "Available full backups:"
select FULL_BACKUP in $(ls $FULL_BACKUP_DIR | sort -V); do
    if [ -n "$FULL_BACKUP" ]; then
        echo "You have selected the full backup from: $FULL_BACKUP"
        FULL_BACKUP_PATH="$FULL_BACKUP_DIR/$FULL_BACKUP/"
        echo "Restoring from full backup path: $FULL_BACKUP_PATH"
        if ! mongorestore --drop --host $HOST --port $PORT --username $USERNAME --password $PASSWORD --authenticationDatabase $AUTH_DB "$FULL_BACKUP_PATH"; then
            echo "Failed to restore full backup."
            exit 1
        fi
        break
    else
        echo "Invalid selection. Please try again."
    fi
done

# 确认用户是否想要继续恢复增量备份
echo "Do you want to restore an incremental backup? (yes/no)"
read -r CONTINUE_RESTORE
if [[ "$CONTINUE_RESTORE" != "yes" ]]; then
    echo "Incremental restore skipped. Restore process is complete."
    exit 0
fi

# 列出所有增量备份
echo "Available incremental backups after the full backup: $FULL_BACKUP"
INCREMENTAL_BACKUPS=($(ls $INCREMENTAL_BACKUP_DIR | sort -V))
SELECTED_INCREMENTAL_BACKUP=""
COUNTER=1
INCREMENTAL_BACKUP_MENU=()
for INCREMENTAL_BACKUP in "${INCREMENTAL_BACKUPS[@]}"; do
    if [[ "$INCREMENTAL_BACKUP" > "$FULL_BACKUP" ]]; then
        INCREMENTAL_BACKUP_MENU+=("$INCREMENTAL_BACKUP")
        echo "$COUNTER) $INCREMENTAL_BACKUP"
        let COUNTER=COUNTER+1
    fi
done

# 选择增量备份进行恢复
echo "Please select the incremental backup to restore up to (type the number):"
read -r INCREMENTAL_CHOICE
INCREMENTAL_CHOICE=$((INCREMENTAL_CHOICE-1))

if [ $INCREMENTAL_CHOICE -ge 0 ] && [ $INCREMENTAL_CHOICE -lt ${#INCREMENTAL_BACKUP_MENU[@]} ]; then
    SELECTED_INCREMENTAL_BACKUP="${INCREMENTAL_BACKUP_MENU[$INCREMENTAL_CHOICE]}"
    echo "You have selected the incremental backup: $SELECTED_INCREMENTAL_BACKUP"
    # 应用所有增量备份,直到选择的备份
    for ((i=0; i<=$INCREMENTAL_CHOICE; i++)); do
        backup="${INCREMENTAL_BACKUP_MENU[$i]}"
        echo "Applying incremental backup: $backup"
        INCREMENTAL_BACKUP_PATH="$INCREMENTAL_BACKUP_DIR/$backup/local/"
        # 确保oplog.rs.bson存在
        if [ ! -f "$INCREMENTAL_BACKUP_PATH/oplog.rs.bson" ]; then
            echo "oplog.rs.bson not found in $INCREMENTAL_BACKUP_PATH"
            exit 1
        fi
        if ! mongorestore --host $HOST --port $PORT --username $USERNAME --password $PASSWORD --authenticationDatabase $AUTH_DB --oplogReplay "$INCREMENTAL_BACKUP_PATH/oplog.rs.bson"; then
            echo "Failed to apply incremental backup: $backup"
            exit 1
        fi
    done
    echo "All selected incremental backups have been applied."
else
    echo "Invalid selection for incremental backup."
    exit 1
fi

echo "Restore process is complete."

自此增量备份结束,我的脚本都有很详细明确的回显命令,和很多可选参数,简单易上手,有什么我呢提可以问我,第一次发博客不太懂。请多多指教
附上一个我使用的ai,3.5的,我的脚本就是在他的帮助下写出来的。 AIchatOS文章来源地址https://www.toymoban.com/news/detail-844755.html

到了这里,关于Linux(CentOS7.9)MongoDB的安装配置教程3个服务器+增量备份(带脚本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 服务器,Linux,centos7成功安装显卡驱动(超详细)

    在某些情况下我们可能会遇到重装服务器显卡驱动的需求,比如重装操作系统之后需要安装一个显卡驱动,旧版的显卡驱动需要升级,需要换一个显卡驱动等等。 如果你需要重装服务器操作系统,请戳这里: 服务器重装centos7系统 https://blog.csdn.net/qq_51570094/article/details/124133

    2024年01月23日
    浏览(41)
  • CentOS7.4虚拟机安装教程(Linux)

    一:下载镜像 这里提供三种镜像下载方法 (1)CentOS官网下载 https://vault.centos.org/ ①在官网下载页面地址下拉找到7.4.1708/选项并单击进入 ②找到isos/选项并单击进入 ③进入页面后,可以看到x86_64/选项并单击进入 ④在打开的界面中找到CentOS-7-x86_64-DVD-1708.iso并点击下载 以下针

    2024年02月08日
    浏览(41)
  • centos7安装 mongodb

      =========================================================================           在以上图片可以看到此时是不可以用systemctl 命令去开启我们的mongodb服务 如果需要用systemctl 命令去控制mongodb服务的开启、停止等操作,就需要进行下面的操作。      /usr/local/mongodb/bin/mongod.conf 文件内容:

    2024年02月16日
    浏览(25)
  • 【Linux】详解Centos7的下载安装配置

    本文时间 2023-05-17 作者:sugerqube漆瓷 centos8已经停止维护,centos7将在2024-06-30停止维护(所以暂时选7) 未来替代品参考: AlmaLinux https://almalinux.org/ CloudLinux公司搞得RHEL下游发行版 RockyLinux https://rockylinux.org/ Gregory Kurtzer发起搞得RHEL下游发行版 附:常用Linux发行版操作系统大盘点

    2024年02月05日
    浏览(37)
  • Linux centos7.0安装宝塔面板(保姆级教程)

    1.使用Xshell连接远程服务器 连接服务器的方式非常多,如使用 WebShell 方式登录 Linux ,使用 SSH 登录 Linux ,使用 VNC 方式登录Linux,使用远程登录软件登录 Linux,这里我采用的是软件方式,使用的软件为Xshell7,如果你购买的是腾讯云服务器可以参照腾讯云官方博文https://cloud.tencent.com/

    2024年02月06日
    浏览(38)
  • 运维系列(仅供参考):Centos7安装和配置VNC服务器 - Xfce篇

    如果你图形界面使用GNOME,看这里:Centos7安装和配置VNC服务器 - GNOME篇 VNC ( Virtual Network Computing ),为一种使用 RFB 协议的屏幕画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的屏幕画面。 VNC 与操作系统无关,因此可跨平台使用,例如可用 Win

    2024年04月23日
    浏览(43)
  • linux centos7工具安装之 libreOffice篇 libreOffice安装教程

    可以自行libreOffice中文官网下载:https://zh-cn.libreoffice.org/ 或百度云下载:https://pan.baidu.com/s/1G1tz_RLrN_DoUDtJXfPlRA 提取码: bcqu 下载了后本地解压:里面包含了libreOffice和中文包 这里,我习惯放在/home/tools/下,ftp上传至目录下 默认安装目录为/opt/libreOffice6.3/ 这时候还缺少文件,安

    2024年02月16日
    浏览(45)
  • Linux环境下(Centos7) 下安装Kafka详细教程

    1.1 选择镜像: 清华镜像 阿里镜像 可以在上面两个地方选一个合适的镜像 1.2 安装步骤 创建文件夹: 进入文件夹: 下载镜像至新建的文件夹: 此处的zookeeper版本可能已经失效了,同学们可在镜像网站内选择合适的zookeeper版本,然后以此命令替换掉 镜像源下载即可。 解压下载

    2024年02月12日
    浏览(41)
  • [最新搭建教程]0基础Linux CentOS7系统服务器本地安装部署ChatGPT模型服务搭建/免费域名绑定网页Https访问/调用open AI的API/GPT3/GPT3.5/GPT4模型接口

    一、关于此文 本文介绍了如何克隆一个开源的项目,通过请求调用OpenAI ChatGPT模型接口,以使用ChatGPT的强大功能。相比于直接登录ChatGPT官网对话,此方法对话过程更为流畅,不会频频出现限流导致对话中断或网络异常;此外,部署完成后无需魔法即可访问,可分享给亲朋好

    2024年02月10日
    浏览(34)
  • VMware虚拟机 安装 Centos7(linux)(新手超详细教程)

    目前正在自学Linux,此为centos安装过程,随手记录一下。 软件:VMware 下载地址: https://www.vmware.com/​www.vmware.com/ 镜像:CentOS7 下载地址: 官网: Download​www.centos.org/download/ 阿里云 https://developer.aliyun.com/mirror/ 华为云 https://mirrors.huaweicloud.com/os/image 这个进去界面就有各种镜像

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包