Shell脚本备份Mongodb数据库
诚邀访问我的个人博客:我在马路边
更好的阅读体验点击查看原文:Shell脚本备份Mongodb数据库
原创博客,转载请注明出处
@
项目需要对Mongodb的数据进行定期备份,以免出现什么差错难以追回,但是数据量比较大,本机硬盘不够用,还要异地备份,于是乎通过通过dump远程链接目标库,然后将数据dump到另一个位置,暂时还在执行中,如果有错误再进行修改。
环境还原
- Mongodb服务器
A(Linux),备份机器B(Windows),备份移动硬盘C。 B机器可以远程A服务器,由于A和B服务器的硬盘剩余空间都不够备份,在B机器插入移动硬盘C。- 在B机器上通过VirtualBox创建
Linux虚拟机,与B机器的移动硬盘C进行共享文件夹D。 Linux虚拟机创建shell脚本,将数据备份到共享文件夹D。Linux虚拟机需要安装Mongodb数据库,如何安装数据库请参考 Centos7安装MongoDB4.0,以便执行mongodump命令。
环境创建
Linux虚拟机在共享目录<folder>下创建导出dump的文件夹和将dump文件压缩的目标文件夹,命令如下:
注:执行的时候请将下面提到的所有<folder>替换成你的目标目录,比如/media/sf_mongobak/
# 切换到你的目标目录
$ cd <folder>
# 创建文件夹
$ mkdir -p dump_bak
$ mkdir -p tar_bak
编写shell脚本
创建好文件夹后只需要编写shell脚本就可以了,shell脚本里会用到上述创建的文件夹,如果写错了执行的时候会报错,请注意。
准备文件
# 切换到你的目标目录
$ cd <folder>
# 创建shell文件
$ sudo touch mongobak.sh
# 编写文件
$ vi mongobak.sh
创建shell脚本
在mongobak.sh文件中插入如下内容,为了方便理解下面写的路径都是临时编写,请将/media/sf_mongobak自行修改成你的目录。
# 在文件中编写如下内容
## 指定到你安装的Mongodb bin目录下的mongodump
dump=/usr/local/mongodb/bin/mongodump
## 填写你创建dump_bak文件的绝对路径
out_dir=/media/sf_mongobak/dump_bak
## 填写你创建tar_bak文件的绝对路径
tar_dir=/media/sf_mongobak/tar_bak
## 记录备份时间
sysdate=`date +%Y_%m_%d`
db_user=***
db_pass=***
## 设置删除期限,删除10天前的备份
days=10
## 设置最终压缩的文件名称,带有日期
tar_bak="mondodb_bak_$sysdate.tar.gz"
cd $out_dir
# 删除之前的dump文件
sudo rm -rf $out_dir
# 创建新的文件夹存放dump文件
sudo mkdir -p $out_dir/$sysdate
# 导出172.18.9.123机器上的masterdata库的所有表到$out_dir/$sysdate文件夹
$dump -h 172.18.9.123 -u $db_user -p $db_pass -d masterdata -o $out_dir/$sysdate
# 压缩$out_dir/$sysdate到目标文件夹
sudo tar -zcvf $tar_dir/$tar_bak $out_dir/$sysdate
# 删除指定期限钱的备份文件
sudo find $tar_dir/ -mtime +$days -delete
# 退出
exit
注:上面插入的内容请注意空格,比如date +%Y_%m_%d获取时间date和+号之间就有空格。
导出dump数据的时候根据自己的需求自行修改,dump命令可参考:Mongo的备份和恢复(mongodump 和mongorestore )
执行shell脚本
给文件添加权限,然后shell命令执行。
# 添加权限
$ chmod +x mongobak.sh
# 执行shell脚本
sh +x mongobak.sh
在执行过程中遇到错误error running listCollections,还有其他的错误一般就是mongodump命令使用不对,这里参考了一篇文章:Not able to run mongodump,其他的请自行百度或者Google。
进阶版
以上满足了备份的脚本化,但是如果要做定时任务定期执行,那么就要结合linux的crontab完成,具体使用可参考文章Linux定时任务Crontab使用
感谢
诚邀访问我的个人博客:我在马路边
更好的阅读体验点击查看原文:Shell脚本备份Mongodb数据库
原创博客,转载请注明出处
Shell脚本备份Mongodb数据库的更多相关文章
- 用shell脚本实现MongoDB数据库自动备份
一.创建MongoDB备份目录 用来存放数据 mkdir -p /data/mongodb_bak/mongodb_bak_now mkdir -p /data/mongodb_bak/mongodb ...
- linux shell脚本备份mysql数据库
#!/bin/sh # 备份数据库 # Mysql 用户名密码 MYSQL_USER=root MYSQL_PASS=root BACKUP_DIR=/data/backup/mysql DATA_D ...
- centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾
centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾 系统:centos6.5 1.创建脚本目录 mkdir -p /usr/local/sh/ 创建备份web ...
- shell脚本操作mysql数据库
shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改.查)等各种操作 mysql -hhostname -Pport -uusername -pp ...
- 如何通过shell脚本操作MongoDB
通过shell脚本对MongoDB进行自动化操作 运行写好的 ./show.sh 脚本 发现能够建立mongo链接 #!/bin/sh mongo WordPress --eval "sho ...
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...
- shell 脚本操作informix数据库
shell 脚本操作informix数据库的简单模板: functionName(){ dbaccess << ! database 库名; sql语句; ! } 栗子1:更新数据 fun ...
- Linux下shell脚本实现mongodb定时自动备份
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...
- Shell脚本备份数据库
使用crontab 定时备份数据库 1. 编辑crontab 规则,定时执行脚本 2. 在my.cnf 文件中加 [mysqldump] user=root password=密码 3.编写shell ...
随机推荐
- Linux安装jdk10
1.官网下载jdk10 下载方式两种,一种是wget下载,一种是windows系统下载,然后上传到linux系统上. 2.解压到/usr/local/java mkdir /usr/local/jav ...
- mybatis中collection和association的作用以及用法
deptDaoMapper.xml 部门对应员工(1对多的关系) <resultMap type="com.hw.entity.Dept" id="deptinfo ...
- 【Tech】SQL Server2008使用笔记
1.64位win7系统报错“未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ”. 解决方法:从这个网址下载和安装一个驱动http://www.microsoft.com/zh- ...
- P4271 [USACO18FEB]New Barns
题目 P4271 [USACO18FEB]New Barns 做法 这题很长见识啊!! 知识点:两棵树\((A,B)\)联通后,新树的径端点为\(A\)的径端点与\(B\)的径端点的两点 不断加边,那 ...
- 主攻ASP.NET MVC4.0之重生:Jquery Mobile 表单元素
相关代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- verilog中一些基本的门电路如pmos和nmos等
最近在分析波形的时候,发现某个PAD模型的行为与想象的不一致,就进入stdcell里面看了下,主要是pmos和nmos相关的东西,暂列如下: 开关级基元14种 是实际的MOS关的抽象表示,分电阻型(前 ...
- 九、goroutine和channel
进程和线程 A)进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单元 B)线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 C)一个进 ...
- Java中系统时间的获取_currentTimeMillis()函数应用解读
快速解读 System.currentTimeMillis()+time*1000) 的含义 一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 微 ...
- 同类型元素,只有一个被选中js
<div class="wrap-box flex_row"> <div class="wrap-block"> <div cla ...
- FreeMarker 使用实例
以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... - ...