Linux中MongoDB如何实现远程自动备份详解

前言

看过上一篇接手老项目的痛——MongoDB学习及集群搭建知道,最近接手了一个后妈养的项目,项目的数据库没有人维护,DBA以各种理由推脱暂时不接,面对裸奔没有备份的数据库,我的内心很焦灼,于是花了点时间把生产环境的自动备份给搞起来。

下面话不多说了,来一起看看详细的介绍吧

一些准备

既然都备份了,为了保险起见,备份与库就不放在同一台服务器上了,于是向运维申请了一台服务器,同时安装好mongo,如果不知道怎么安装mongo的话可以看我的上一篇文章。

安装完之后,首先测试下是否可以远程访问目标mongodb,到安装好mongo的bin目录下

./mongo 10.100.1.101:27017 #目标mongo的ip及端口

然后创建些必要的目录,比如备份文件放在哪个目录之类的。

接下来测试下利用mongodump来备份数据库:

./bin/mongodump --host test/10.100.1.101:27017,10.100.1.102:27017 -d testdb --out /data/temp

# test为副本集名称
# 10.100.1.101:27017,10.100.1.102:27017为副本集节点,有多个可以多个
# -d testdb是要备份的库名,不填默认副本集下全部
# --out 保存路径

到这里,mongo的备份已经实现,现在要完成的就是自动啦。

编写脚本

自动定时备份其实就是通过crontab命令来实现啦。但前提是我们需要编写个定时跑的脚本。首先我们新建个脚本:

vi /home/local/mongod_bak.sh

然后编写对应的脚本,脚本上有对应的注释,供大家参考,这里主要做了三个动作,首先是备份,然后将备份的文件压缩,然后只保留最近7天的文件。

#!/bin/bash
sourcepath='/home/local/mongodb/bin'  #mongodb文件路径
targetpath='/home/local/mongodb_bak' #备份的路径
nowtime=$(date +%Y-%m-%d-%H)
replicationname='test'  #副本集名
dbname='testdb' #库名
port='27017' #端口
ip1='10.100.1.101' #ip
ip2='10.100.1.102'

echo "============== start backup ${nowtime} =============="
start()
{
 ${sourcepath}/mongodump --host ${replicationname}/${ip1}:${port},${ip2}:${port} -d ${dbname} --out ${targetpath}/${nowtime}
}
execute()
{
 start
 if [ $? -eq 0 ]
 then
 echo "back successfully!"
 else
 echo "back failure!"
 fi
}

if [ ! -d "${targetpath}/${nowtime}/" ]
then
 mkdir ${targetpath}/${nowtime}
fi
execute
echo "============== back end ${nowtime} =============="

echo "============== start zip ${nowtime} =============="
zip -r ${targetpath}/${nowtime}.zip ${targetpath}/${nowtime}
rm -rf ${targetpath}/${nowtime}
echo "============== zip end ${nowtime} =============="

echo "============== start delete seven days ago back ${nowtime} =============="
find ${targetpath} -type f -mtime +7 -name "*" -exec rm -rf {} \;
echo "============== delete end ${nowtime} =============="

编写完之后,给到文件可执行权限,并可以手动执行测试下:

chmod +x /home/local/mongod_bak.sh

定时任务

最后就是添加执行计划了,修改/etc/crontab

crontab -e

添加执行脚本,保存即可。

30 1 * * * /home/local/mongod_bak.sh #表示每天凌晨1点30执行备份

这里简单介绍下crontab。

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行。

通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

一些常用命令可以参考下:

#启动服务
/sbin/service crond start 

#关闭服务
/sbin/service crond stop 

#重启服务
/sbin/service crond restart 

#重新载入配置
/sbin/service crond reload 

#查看crontab服务状态
service crond status 

#手动启动crontab服务
service crond start 

#查看crontab服务是否已设置为开机启动,执行命令:
ntsysv

#加入开机自动启动:
chkconfig --level 35 crond on

#列出crontab文件
crontab -l

#编辑crontab文件
crontab -e

#删除crontab文件
$ crontab -r

#恢复丢失的crontab文件
#假设你在自己的$HOME目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/<username>,其中<username >是用户名
#或者使用如下命令其中,<filename>是你在$HOME目录中副本的文件名
crontab <filename>

总结

慢工出细活,有些东西一开始觉得很难很麻烦,但当你静下心来认真研究下,还是很容易理解的,毕竟你不是第一个踩坑的,所以还是好好学习吧。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • mongodb 数据库操作--备份 还原 导出 导入

    一,mongodump备份数据库 1,常用命令格 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果没有用户谁,可以去掉-u和-p. 如果导出本机的数据库,可以去掉-h. 如果是默认端口,可以去掉--port. 如果想导出所有数据库,可以去掉-d. 2,导出所有数据库 [root@localhost mongodb]# mongodump -h 127.0.0.1 -o /home/zhangy/mongodb/ connecte

  • 浅谈MongoDB的备份方式

    简要说一下MongoDB的备份方式: 1. mogodump / mongorestore 这2命令将mongodb的数据dump为BSON格式,需要的时候可以恢复. 这种方式作为小的数据库还适用.但如果是sharding或者几百G数据以上的话 就几乎不可用了.因为BSON及其占用空间. 2. Slave Replication 这是最适合和可靠的,适合生产环境.MongoDb支持master+多个slave.因此可以很方便的起一个slave来进行备份. 但是需要注意的是如果数据量很大的话,如果

  • Linux下MongoDB数据库实现自动备份详解

    本文主要给大家介绍的是关于Linux下MongoDB数据库实现自动备份的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 一.创建MongoDB备份目录 mkdir -p /data/mongodb_bak/mongodb_bak_now mkdir -p /data/mongodb_bak/mongodb_bak_list 二.新建MongoDB数据库备份脚本(/data/mongodb_bak/MongoDB_bak.sh) #!/bin/bash #backup MongoDB

  • MongoDB备份、还原、导出、导入、克隆操作示例

    数据库备份 – mongodump 备份本地所有MongoDB数据库: 复制代码 代码如下: # mongodump -h 127.0.0.1 --port 27017 -o /root/db/alldb 备份远程指定数据库: 复制代码 代码如下: # mongodump -h 192.168.1.233 --port 27018 -d yourdb -o /root/db/yourdb 更多mongodump详解 数据库还原-mongorestore 恢复所有数据库到MongoDB中: 复制代

  • Windows下自动备份MongoDB的批处理脚本

    这段批处理代码用于在Windows服务器上自动备份Mongodb数据库,每次备份会自动创建一个备份文件夹 1.编写一个bat文件,文件内容如下: 复制代码 代码如下: @ECHO OFF md D:\deployment\mongoDb\data\backup\%date:~0,4%-%date:~5,2%-%date:~8,2%\%time:~0,2%-%time:~3,2% mongodump -h 192.168.0.198 -d rssapp -o D:\deployment\mongo

  • Mongodb实现定时备份与恢复的方法教程

    本文主要介绍了关于Mongodb实现定时备份与恢复的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: MongoDB 数据备份 在 MongoDB 中我们使用 mongodump 命令来备份 MongoDB 数据 语法如下: > mongodump -h dbhost -d dbname -o dbdirectory -u user -p password -h MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 -d 需要备份

  • MongoDB整库备份与还原以及单个collection备份、恢复方法

    mongodump.exe备份的原理是通过一次查询获取当前服务器快照,并将快照写入磁盘中,因此这种方式保存的也不是实时的,因为在获取快照后,服务器还会有数据写入,为了保证备份的安全,同样我们还是可以利用fsync锁使服务器数据暂时写入缓存中. 高效开源数据库(mongodb)下载地址:http://www.jb51.net/softs/41751.html 备份前的检查> show dbsMyDB 0.0625GBadmin (empty)bruce 0.0625GBlocal (empty)t

  • Windows或Linux系统中备份和恢复MongoDB数据的教程

    windows下面mongodb数据库备份和恢复 我可以讲数据备份到c:\data\dump目录下面,首先创建这个路径.然后进入到mongodb的bin目录下面 我的是: C:\Program Files\mongodb\bin 备份脚本是: //备份 mongodump -h 127.0.0.1:27017 -d test -o c:\data\dump 恢复脚本是: //恢复 mongorestore -h 127.0.0.1:27017 -d test --directoryperdb c

  • MongoDB 导出导入备份恢复数据详解及实例

    数据库备份和数据恢复的重要性,我想大家都知道,这里就举例说明如何操作数据备份,数据恢复的实例: 创建测试数据 创建db:testdb,collection:user,插入10条记录 mongo MongoDB shell version: 3.0.2 connecting to: test > use testdb switched to db testdb > db.user.insert({id:1,name:"用户1"}); WriteResult({ "n

  • Linux中MongoDB如何实现远程自动备份详解

    前言 看过上一篇接手老项目的痛--MongoDB学习及集群搭建知道,最近接手了一个后妈养的项目,项目的数据库没有人维护,DBA以各种理由推脱暂时不接,面对裸奔没有备份的数据库,我的内心很焦灼,于是花了点时间把生产环境的自动备份给搞起来. 下面话不多说了,来一起看看详细的介绍吧 一些准备 既然都备份了,为了保险起见,备份与库就不放在同一台服务器上了,于是向运维申请了一台服务器,同时安装好mongo,如果不知道怎么安装mongo的话可以看我的上一篇文章. 安装完之后,首先测试下是否可以远程访问目标m

  • Linux中stat函数和stat命令使用详解

    stat函数和stat命令 linux文件里的[inode = index node]解释:要理解inode必须了解磁盘和[目录项],inode实际是连接[目录项]和磁盘的中间物质. 图里的大圈代表硬件的磁盘,里面的小圈代表某个文件存储在磁盘上了. [inode = index node]的node(承载node信息的结构体是:stat,stat的定义在后面 )里面有: 文件大小 文件的最后修改时间 文件的所属用户 文件的权限 硬链接计数(ls -l 显示出来的数字) 块位置:指定文件存储在磁盘

  • Linux中的bz2压缩格式的实例详解

    Linux中的bz2压缩格式的实例详解 一 语法 bzip2 源文件 压缩为bz2格式,不保存源文件 bzip2 -k 源文件 压缩之后保留原文件 注意:bzip2命令不能压缩目录 bzip2 -d 压缩文件 解压缩,-k保留压缩文件 bunzip2 压缩文件 解压缩,-k保留压缩文件  二 实战 [root@localhost test]# ls abc cdf dirtst [root@localhost test]# bzip2 abc [root@localhost test]# ls

  • Linux中设置路由以及虚拟机联网图文详解

    什么是路由? 路由,是指通过相互连接的网络把数据包从源站传送到目的站的活动,在路由过程中数据包通常会经过一个或多个中转节点(即路由器),这些沿途的路由器会沿着一条最佳路径转发数据包,直至目的地. 什么是路由器? 路由器用于连接不同的网络,是网络之间互相连接的枢纽.路由器的主要工作是为经过路由器的每个数据包寻找一条最佳传输路径,并将该数据有效地传送到目的地. 什么是网关? 网关(GATEWAY)是在网络层以上实现网络互连. 实验1:模拟路由器,让不在同一网段的两台主机可以ping通 首先,要确定哪

  • Linux中文本处理工具之cut命令详解

    前言 Cut 输入字符中指定的字段或指定的范围.若处理的是字段,则定界符隔开的即为各字段,而输出时字段也以给定的定界符隔开.默认的定界符为制表字符(TAB).下面来看看详细的介绍吧. 一.cut实战演练 cut.txt文件 root,x,0,0,root,/root,/bin/bash daemon,x,1,1,daemon,/usr/sbin,/usr/sbin/nologin bin,x,2,2,bin,/bin,/usr/sbin/nologin sys,x,3,3,sys,/dev,/u

  • Linux上通过SSH挂载远程文件系统方法详解

    SSHFS的特点: 基于FUSE(Linux的最佳用户空间文件系统框架) 多线程:在服务器上可以有多个请求 允许大读取(最大64k) 缓存目录内容 步骤1:安装fuse-sshfs 对于centos/rhel用户,fuse sshfs在epel repository下可用,因此请确保在系统中安装了epel repository.现在执行以下命令安装它 在CENTOS/RHELL上: #yum install fuse-sshfs 在Ubuntu和Dabian上: $ sudo apt-get u

  • Mac中mongoDB的安装与卸载步骤详解

    前言 MongoDB 是一个基于分布式文件存储的数据库,旨在为 web 应用提供可扩展的高性能数据存储解决方案.本文主要介绍的是关于在mac中安装卸载mongoDB数据库的方法,更多关于mongoDB的使用大家可以参考这篇文章:http://www.jb51.net/article/79416.htm (一) mongodb 安装 mongodb 数据库的安装有两种方法. 一种是使用命令行安装,第二种是使用HomeBrew 安装,我按照第二种方式安装. 1.更新Homebrew的package数

  • 在php7中MongoDB实现模糊查询的方法详解

    前言 在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单: db.collection.find({'_id': /^5101/}) 上面这句就是查询_id以'5101'开始的内容. 在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式: 命令行下: db.letv_logs.find({"ctime":/uname?/i}); php操作 $query=array("name"=>new Mongo

  • Linux中rz命令和sz命令使用详解大全

    sz命令 用途说明:sz命令是利用ZModem协议来从Linux服务器传送文件到本地,一次可以传送一个或多个文件.相对应的从本地上传文件到Linux服务器,可以使用rz命令. 常用参数 -a 以文本方式传输(ascii). -b 以二进制方式传输(binary). -e 对控制字符转义(escape),这可以保证文件传输正确. 如果能够确定所传输的文件是文本格式的,使用 sz -a files 如果是二进制文件,使用 sz -be files rz命令 -b 以二进制方式,默认为文本方式.(Bi

随机推荐