首先,作为前端的开发人员,使用 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:增量备份的创建
-
确保启用了 oplog: MongoDB 的副本集自动使用 oplog 来记录数据的所有更改。如果你的数据库运行在副本集模式,oplog 会自动启用。对于单机部署,你可以通过将其转换为一个单节点的副本集来启用 oplog。
-
进行全量备份: 在开始进行增量备份之前,你需要有一个最近的全量备份。这个全量备份作为增量备份的基础。你可以使用
mongodump
工具来进行全量备份。
mongodump --host mongodb.example.net --port 27017 --out /path/to/backup/directory
-
记录增量备份的起点: 增量备份依赖于 oplog,因此你需要知道上一次备份结束时的 oplog 位置。这可以通过查看备份结束时 oplog 的最后一条记录来确定。
-
创建增量备份: 当你需要创建增量备份时,你需要从上次备份结束时的 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(增量恢复脚本)
文章来源:https://www.toymoban.com/news/detail-844755.html
#!/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模板网!