mongodb备份与恢复(下)(一)

2014-11-24 15:41:45 · 作者: · 浏览: 3
mongodb备份与恢复(下)
代码这东西,仁者见仁智者见智,一分价钱一分货,所以对于优秀的程序员不要抠门。对语言的熟练度高, 编程经验丰富的程序员,写出来的代码,两个字:漂亮!
下面的脚本只需更改变量$mongodb相关参数即可,如有更好的更便捷的方法请赐教。
001
#!/bin/perl
002
#################################
003
### author: www.ttlsa.com     ###
004
### QQ群: 39514058            ###
005
### E-mail: service@ttlsa.com ###
006
#################################
007

008
use strict;
009
use File::Path;
010
use POSIX;
011
use MongoDB;
012
use Data::Dumper;
013

014
my $mongodump='/usr/local/mongodb/bin/mongodump';
015
my $mongodb={
016
    'admin_1'=>{    #定义组别
017
        'email'=>'39514058@qq.com',  #定义备份出错时邮件通知地址,此处未包含该功能。
018
        'server'=>[     #定义mongodb相关信息
019
            {
020
            'replset'=>1,    #是否复制集
021
            'sharding'=>0,   #是否分片
022
            'setname'=>"TTLSA_COM",  #复制集名称
023
            'mongodsvr'=>["10.1.11.155:27017","10.1.11.156:27017","10.1.11.157:27017"],   #mongod服务器IP和端口号
024
            'configsvr'=>[],  #config server服务器IP和端口号
025
            'mongossvr'=>[],  #mongos server服务器IP和端口号
026
            'backupdir'=>"/data/backup/mongodb_ttlsa_com",  #备份目录
027
            'user'=>"",      #用户名
028
            'passwd'=>"",    #密码
029
            'interval'=>15,  #备份轮滚周期
030
            },
031

032
            {
033
            'replset'=>1,
034
            'sharding'=>1,
035
            'setname'=>"shard1",
036
            'mongodsvr'=>["10.1.22.21:27029","10.1.22.22:27029","10.1.22.23:27029"],
037
            'configsvr'=>["10.1.22.21:27028","10.1.22.22:27028","10.1.22.23:27028"],
038
            'mongossvr'=>["10.1.22.21:27027","10.1.22.22:27027","10.1.22.23:27027"],
039
            'backupdir'=>
"/data/backup/mongodb_shard1", 040 'user'=>"", 041 'passwd'=>"", 042 'interval'=>15, 043 }, 044 045 { 046 'replset'=>0, 047 'sharding'=>0, 048 'setname'=>"shard1", 049 'mongodsvr'=>["10.1.27.22:30000","10.1.27.22:30001","10.1.20.16"], 050 'configsvr'=>[], 051 'mongossvr'=>[], 052 'backupdir'=>"/data/backup/mongodb_standalon", 053 'user'=>"root", 054 'passwd'=>"www.ttlsa.com", 055 'interval'=>15, 056 } 057 ]}, 058 #'admin_2'=>{} 059 }; 060 061 while(my($group,$value)=each(%$mongodb)){ 062 foreach my $node (@{$value->{'server'}}){ 063 my $tmp_stdout = tmpnam(); 064 my $tmp_stderr = tmpnam(); 065 if($node->{'replset'} && !$node->{'sharding'}){ 066 my $dir = $node->{'backupdir'}; 067 mkpath $dir unless -e $dir; 068 my $return=backup_rotate($dir,$node->{'interval'}); 069 my $hosts = $node->{'setname'}.'/'.join(',', @{$node->{'mongodsvr'}}); 070 if(($node->{'user'} ne '') && ($node->{'passwd'} ne '')){ 071 my $retval=system("$mongodump -vvvvv -h $hosts -u $node->{'user'} -p $node->{'passwd'} --oplog -o $dir/dump.1 >$tmp_stdout 2>$tmp_stderr"); 072 }else{ 073 my $retval=system("$mongodump -vvvvv -h $hosts --oplog -o $dir/dump.1 >$tmp_stdout 2>$tmp_stderr"); 074 } 075 }elsif($node->{'sharding'}){ 076 my $mongod_hosts=$node->{'setname'}.'/'.join(',', @{$node->{'mongodsvr'}}); 077 my $mongos_hosts=$node->{'setname'}.'/'.join(',', @{$node->{'mongossvr'}}); 078 my $mongod_dir = $node->{'backupdir'}.'/'.'mongodsvr'; 079 my $config_dir = $node->{'backupdir'}.'/'.'configsvr'; 080 mkpath $mongod_dir unless -e $mongod_dir; 081 mkpath $config_dir unless -e $config_dir; 082