CentOS下MongoDB定时备份及SSH上传其他服务器
创建并编辑脚本
在CentOS系统下,我们需要创建并编辑一个名为的脚本。该脚本用于配置一些变量,包括要备份的数据库名称、数据库用户名和密码、备份输出路径、生成的备份文件名称等。
```
#!/bin/bash
# 配置备份相关变量
DBNAME("database1" "database2") # 要备份的数据库名称数组
USER"root" # 数据库用户名
PASSWORD"123456" # 数据库密码
OUT_DIR"/data/backup/" # 备份输出路径
DATE$(date %Y%m%d%H%M%S) # 生成的备份文件名称
DAY7 # 删除7天前的备份文件
# 创建并编辑MongoDB备份函数
dbDump() {
echo "开始备份..."
for ONEDB in ${DBNAME[@]}
do
mongodump -u ${USER} -p ${PASSWORD} -d ${ONEDB} -o ${OUT_DIR}${DATE}
done
cd ${OUT_DIR}
tar -czvf "${DATE}.tar" ${DATE}
sudo rm -rf ${DATE}
echo "备份完成!"
}
# 创建并编辑删除函数,用于删除保留天数之外的备份文件
deleteOld() {
echo "开始删除..."
find ${OUT_DIR} -mtime ${DAY} -name "*.tar" -print -exec rm -rf {} ;
echo "删除完成!"
}
# 创建并编辑上传文件函数
senddbdata() {
echo "开始上传..."
python2 ${DATE}.tar
echo "上传完成!"
}
# 执行备份、删除旧数据和上传文件函数
dbDump
deleteOld
senddbdata
```
创建Python上传脚本
在`/usr/local/mongodump`目录下,我们创建一个名为``的Python脚本。该脚本用于通过SSH上传备份文件到其他服务器。
```python
import os
import shutil
import re
import paramiko
import math
import sys
host '119.23.128.*'
port 22
username 'root'
password '123456'
def printProgress(curPercent, totalPercent):
rate int((curPercent / totalPercent) * 100)
print('上传进度:', str(rate), '%')
def sendFile(filePath):
transport ((host, port))
(usernameusername, passwordpassword)
sftp _transport(transport)
for fromPath, toPath in filePath:
print('发送文件:', fromPath, ' 到 ', toPath)
sftp.put(fromPath, toPath, callbackprintProgress)
()
def main():
sendFilePath [['/usr/local/mongodata/dbBackup/', [1]], ['/usr/local/backup/hainan_', [1]]]
sendFile(sendFilePath)
if __name__ '__main__':
main()
```
定时执行备份任务
最后,我们配置定时任务,让备份脚本定时执行。
打开终端,输入`crontab -e`进入编辑模式,在文件末尾添加以下内容,并保存退出。
```
30 4 * * *
```
解释:
- 第1列:30表示每小时的30分钟触发一次
- 第2列:4表示每天的4点触发
- 第3列:*表示每月的任意日期触发
- 第4列:*表示每周的任意日期触发
- 第5列:*表示任意月份
- 第6列: 表示要运行的命令
最后,重启cron服务以使配置生效。
```
service cron restart # CentOS 6
systemctl restart # CentOS 7
```
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。