Linux中mongodb定时远程备份

下载mongodb

https://www.cnblogs.com/tartis/p/5291580.html

mongodb定时备份文档

虚拟机报错要改BIOS 虚拟技术开启

进入root账户  su root 回车输入密码

一、创建MongoDB备份目录

mkdir -p /data1/mongodb_bak/mongodb_bak_now

mkdir -p /data1/mongodb_bak/mongodb_bak_list  

 

二、 新建MongoDB数据库备份脚本(/data1/mongodb_bak

创建:touch 文件名。

如:touch mongodtask.sh

编辑:sudo gedit mongodtask.sh  复制一下脚本代码按需要修改

脚本:

#!/bin/bash

#backup MongoDB

#mongodump命令路径

DUMP=/home/test/Downloads/mongodb/bin/mongodump

#临时备份目录

OUT_DIR=/data1/mongodb_bak/mongodb_bak_now

#备份存放路径

TAR_DIR=/data1/mongodb_bak/mongodb_bak_list

#获取当前系统时间

DATE=`date +%Y_%m_%d`

#数据库账号

DB_USER=root

#数据库密码

DB_PASS=p2005

#DAYS=15代表删除15天前的备份,即只保留近15天的备份

DAYS=15

#最终保存的数据库备份文件

TAR_BAK=”mongodb_bak_$DATE.tar.gz”

cd $OUT_DIR

rm -rf $OUT_DIR/*

mkdir -p $OUT_DIR/$DATE

#备份全部数据库

$DUMP -h 127.0.0.1:27017 -d test -o $OUT_DIR/$DATE

#压缩为.tar.gz格式

tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE

#copy to  192.168.33.129

scp $TAR_DIR/$TAR_BAK root@192.168.33.129:/data/mongodb_bak

#删除15天前的备份文件

find $TAR_DIR/ -mtime +$DAYS -delete

exit   

 

省略了连接文件存储系统的账号和密码因为没设若需要按照下面格式:

 

1.  $DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS –authenticationDatabase “admin” -o $OUT_DIR/$DATE  

 

三、修改文件属性,使其可执行(目录下执行)

给该脚本赋权限:chmod +755 mongodtask.sh

四、 修改/etc/crontab,添加计划任务

1 进入编辑界面 记得要用root用户登录操作不然没有权限

1

crontab -e

2 添加任务 分钟开始执行MongoDB数据库备份脚本

1

* * * * * /data1/mongodb_bak/mongodtask.sh

注意点:linux 下按A为编辑模式ctrl+z中断操作

Ctrl+c 退出编辑模式

SHIFT+Z 两次保存文件

或输入冒号然后输入wq

保存后退出,启动

1

service crond start

设置开机自启动

要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可

注意此脚本在mongodb开启时有效,否则会出错。

是否成功只需要看是否定时能在/data1/mongodb_bak 有文件生成

查看当前用户的crontab,输入 crontab -l

编辑crontab,输入 crontab -e

删除crontab,输入 crontab -r   慎用

五、 A、B端免密登录(为了进行copy不用输入密码和安全性)

一、证书登录的过程:(了解性资料)

       1.客户端生成证书的私钥和公钥。

         私钥放在客户端,公钥上传到服务端(远程登陆端)。

        一般为了安全,访问有黑客拷贝客户端的私钥,客户端在生成私钥时,会设置一个密码,以后每次登录ssh服务器时,客户端都要输入密码解开私钥(如果工作中,你使用了一个没有密码的私钥,有一天服务器被黑了,你是跳到黄河都洗不清)。

        2.服务器添加信用公钥。

        把客户端生成的公钥,上传到ssh服务器,添加到指定的文件中,这样,就完成ssh证书登录的配置了。

        假设客户端想通过私钥要登录其他ssh服务器,同理,可以把公钥上传到其他ssh服务器。

二、具体操作:(生成的证书在/root/.ssh/ 目录下

环境:A通过ssh方式登陆B,即:A为本地机,B为远程登陆server

           1.A机配置

          ①生成公钥和私钥

         ssh-keygen -t rsa           (连续三次回车,即在本地生成了公钥和私钥,不设置密码)

 

         ②将公钥拷到B端

先在B端/root/目录下输入:mkdir .ssh
         scp /root/.ssh/id_rsa.pub 192.168.33.129:./.ssh/id_rsa.pub 

2.  B机配置

输入:vi /etc/ssh/sshd_config

找到

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

修改AuthorizedKeysFile      .ssh/authorized_keys2

去掉#号使其生效 需要输入下面命令重启下sshd

输入:service sshd stop

输入:service sshd start

①创建authorized_keys2文件命令如下:

touch /root/.ssh/authorized_keys2     

 (如果已经存在这个文件, 跳过这条)

 ②追加公钥到authorized_keys2中命令如下:

 cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys2

(将id_rsa.pub的内容追加到 authorized_keys2 中)

 chmod 600 ~/.ssh/authorized_keys2 赋权

A端执行shell脚本看看是否能直接备份~如果不行百度

成功后rm -f /root/.ssh/id_rsa.pub 删除 安全起见

附录:MongoDB数据库恢复

#恢复全部数据库
mongorestore -u $DB_USER -p $DB_PASS –authenticationDatabase “admin” –noIndexRestore –dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/
#恢复单个数据库
mongorestore -u $DB_USER -p $DB_PASS –authenticationDatabase “admin” –noIndexRestore -d dbname –dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/dbname

部分参数说明

–drop参数:恢复数据之前删除原来的数据,避免数据重复

–noIndexRestore参数:恢复数据时不创建索引

–dir参数:数据库备份目录

-d参数:后面跟要恢复的数据库名称

或下面方法

mongodb 使用 mongorestore 命令来恢复备份的数据

1

>mongorestore -h <hostname><:port> -d dbname <path>

  1、–host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017

  2、–db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

  3、–drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

  4、<path>:

最后的一个参数,设置备份数据所在位置,例如:c:datadumptest。

你不能同时指定 <path> 和 –dir 选项,–dir也可以设置备份目录。

  5、–dir:指定备份的目录

你不能同时指定 <path> 和 –dir 选项。

 

 

mongodb定时备份文档

虚拟机报错要改BIOS 虚拟技术开启

进入root账户  su root 回车输入密码

一、创建MongoDB备份目录

mkdir -p /data1/mongodb_bak/mongodb_bak_now

mkdir -p /data1/mongodb_bak/mongodb_bak_list  

 

二、 新建MongoDB数据库备份脚本(/data1/mongodb_bak

创建:touch 文件名。

如:touch mongodtask.sh

编辑:sudo gedit mongodtask.sh  复制一下脚本代码按需要修改

脚本:

#!/bin/bash

#backup MongoDB

#mongodump命令路径

DUMP=/home/test/Downloads/mongodb/bin/mongodump

#临时备份目录

OUT_DIR=/data1/mongodb_bak/mongodb_bak_now

#备份存放路径

TAR_DIR=/data1/mongodb_bak/mongodb_bak_list

#获取当前系统时间

DATE=`date +%Y_%m_%d`

#数据库账号

DB_USER=root

#数据库密码

DB_PASS=p2005

#DAYS=15代表删除15天前的备份,即只保留近15天的备份

DAYS=15

#最终保存的数据库备份文件

TAR_BAK=”mongodb_bak_$DATE.tar.gz”

cd $OUT_DIR

rm -rf $OUT_DIR/*

mkdir -p $OUT_DIR/$DATE

#备份全部数据库

$DUMP -h 127.0.0.1:27017 -d test -o $OUT_DIR/$DATE

#压缩为.tar.gz格式

tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE

#copy to  192.168.33.129

scp $TAR_DIR/$TAR_BAK root@192.168.33.129:/data/mongodb_bak

#删除15天前的备份文件

find $TAR_DIR/ -mtime +$DAYS -delete

exit   

 

省略了连接文件存储系统的账号和密码因为没设若需要按照下面格式:

 

$DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS –authenticationDatabase “admin” -o $OUT_DIR/$DATE  

 

三、修改文件属性,使其可执行(目录下执行)

给该脚本赋权限:chmod +755 mongodtask.sh

四、 修改/etc/crontab,添加计划任务

1 进入编辑界面 记得要用root用户登录操作不然没有权限

1

crontab -e

2 添加任务 分钟开始执行MongoDB数据库备份脚本

1

* * * * * /data1/mongodb_bak/mongodtask.sh

注意点:linux 下按A为编辑模式ctrl+z中断操作

Ctrl+c 退出编辑模式

SHIFT+Z 两次保存文件

或输入冒号然后输入wq

保存后退出,启动

1

service crond start

设置开机自启动

要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可

注意此脚本在mongodb开启时有效,否则会出错。

是否成功只需要看是否定时能在/data1/mongodb_bak 有文件生成

查看当前用户的crontab,输入 crontab -l

编辑crontab,输入 crontab -e

删除crontab,输入 crontab -r   慎用

五、 A、B端免密登录(为了进行copy不用输入密码和安全性)

一、证书登录的过程:(了解性资料)

       1.客户端生成证书的私钥和公钥。

         私钥放在客户端,公钥上传到服务端(远程登陆端)。

        一般为了安全,访问有黑客拷贝客户端的私钥,客户端在生成私钥时,会设置一个密码,以后每次登录ssh服务器时,客户端都要输入密码解开私钥(如果工作中,你使用了一个没有密码的私钥,有一天服务器被黑了,你是跳到黄河都洗不清)。

        2.服务器添加信用公钥。

        把客户端生成的公钥,上传到ssh服务器,添加到指定的文件中,这样,就完成ssh证书登录的配置了。

        假设客户端想通过私钥要登录其他ssh服务器,同理,可以把公钥上传到其他ssh服务器。

二、具体操作:(生成的证书在/root/.ssh/ 目录下

环境:A通过ssh方式登陆B,即:A为本地机,B为远程登陆server

           1.A机配置

          ①生成公钥和私钥

         ssh-keygen -t rsa           (连续三次回车,即在本地生成了公钥和私钥,不设置密码)

 

         ②将公钥拷到B端

先在B端/root/目录下输入:mkdir .ssh
         scp /root/.ssh/id_rsa.pub 192.168.33.129:./.ssh/id_rsa.pub 

2.  B机配置

输入:vi /etc/ssh/sshd_config

找到

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

修改AuthorizedKeysFile      .ssh/authorized_keys2

去掉#号使其生效 需要输入下面命令重启下sshd

输入:service sshd stop

输入:service sshd start

①创建authorized_keys2文件命令如下:

touch /root/.ssh/authorized_keys2     

 (如果已经存在这个文件, 跳过这条)

 ②追加公钥到authorized_keys2中命令如下:

 cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys2

(将id_rsa.pub的内容追加到 authorized_keys2 中)

 chmod 600 ~/.ssh/authorized_keys2 赋权

A端执行shell脚本看看是否能直接备份~如果不行百度

成功后rm -f /root/.ssh/id_rsa.pub 删除 安全起见

附录:MongoDB数据库恢复

#恢复全部数据库
mongorestore -u $DB_USER -p $DB_PASS –authenticationDatabase “admin” –noIndexRestore –dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/
#恢复单个数据库
mongorestore -u $DB_USER -p $DB_PASS –authenticationDatabase “admin” –noIndexRestore -d dbname –dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/dbname

部分参数说明

–drop参数:恢复数据之前删除原来的数据,避免数据重复

–noIndexRestore参数:恢复数据时不创建索引

–dir参数:数据库备份目录

-d参数:后面跟要恢复的数据库名称

或下面方法

mongodb 使用 mongorestore 命令来恢复备份的数据

1

>mongorestore -h <hostname><:port> -d dbname <path>

 如果失败:可以在目录下./mongorestore -h <hostname><:port> -d dbname <path>

  1、–host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017

  2、–db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

  3、–drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

  4、<path>:

最后的一个参数,设置备份数据所在位置,例如:c:datadumptest。

你不能同时指定 <path> 和 –dir 选项,–dir也可以设置备份目录。

  5、–dir:指定备份的目录

你不能同时指定 <path> 和 –dir 选项。

 

 

    原文作者:MongoDB
    原文地址: https://www.cnblogs.com/chenweida/p/8351990.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞