博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongdb备份恢复
阅读量:6704 次
发布时间:2019-06-25

本文共 3684 字,大约阅读时间需要 12 分钟。

原创作品,允许转载,转载时请务必以超链接形式标明文章   、作者信息和本声明。否则将追究法律责任。

一、物理备份(拷贝文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/sh
DATE=`
date 
+%Y%m%d`
DEL_DATE=$(
date 
-d 
'-30 days' 
"+%Y%m%d"
)
HOST=10.10.17.27
PORT=27000
USER=admin
PASSWORD=123456
DATA_DIR=
"/data/mongodb/navy_db/db"
BACKUP_PATH=
"/data/mongodbbackup/$DATE"
 
date 
+%Y%m%d%H%M >>
/data/log/mongodb_bak
.log
#第一步锁表
lock()
{
echo 
"db.fsyncLock()"
|  mongo  --host $HOST --port $PORT -u $USER -p $PASSWORD  admin
}
execute()
{
  
lock
  
if 
[ $? -
eq 
0 ]
  
then
    
echo 
"mongodb lock successfully!" 
>>
/data/log/mongodb_bak
.log
  
else
    
echo 
"mongodb lock fail!" 
>>
/data/log/mongodb_bak
.log
  
fi
}
execute
#第二步备份
back()
{
rsync 
-av $DATA_DIR $BACKUP_PATH/
}
execute()
{
  
back
  
if 
[ $? -
eq 
0 ]
  
then
    
echo 
"mongodb back successfully!" 
>>
/data/log/mongodb_bak
.log
  
else
    
echo 
"mongodb back fail!" 
>>
/data/log/mongodb_bak
.log
  
fi
}
execute
#第三部解锁
unlock()
{
echo 
"db.fsyncUnlock()"
|  mongo  --host $HOST --port $PORT -u $USER -p $PASSWORD  admin
}
execute()
{
  
unlock
  
if 
[ $? -
eq 
0 ]
  
then
    
echo 
"mongodb unlock successfully!" 
>>
/data/log/mongodb_bak
.log
  
else
    
echo 
"mongodb unlock fail!" 
>>
/data/log/mongodb_bak
.log
  
fi
}
execute
#删除历史数据
rm 
-rf 
"/data/mongodbbackup/${DEL_DATE}/"

PS:

物理备份只能全库恢复,不能恢复单个表

恢复步骤:

1
2
3
4
5
1、停止需要恢复的实例
2、备份清空
/data/mongodb/navy_db/db
目录
3、拷贝
/data/mongodbbackup/
$DATE下面的所有文件和文件夹到
/data/mongodb/navy_db/db
目录
4、
chown 
mongod:mongod 
/data/mongodb/navy_db/db/ 
-R
5、启动实例

二、mongodump备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
DATE=`
date 
+%Y%m%d`
DEL_DATE=$(
date 
-d 
'-30 days' 
"+%Y%m%d"
)
HOST=10.10.17.27:27000
USER=admin
PASSWORD=123456
BACKUP_PATH=
"/backup/mongodbbackup/$DATE"
date 
+%Y%m%d%H%M >>
/data/log/mongodb_bak
.log
start()
{
mongodump -h $HOST -u $USER -p $PASSWORD   -o $BACKUP_PATH
}
execute()
{
  
start
  
if 
[ $? -
eq 
0 ]
  
then
    
echo 
"mongodb back successfully!" 
>>
/data/log/mongodb_bak
.log
  
else
    
echo 
"mongodb back fail!" 
>>
/data/log/mongodb_bak
.log
  
fi
}
execute
rm 
-rf 
"/backup/mongodbbackup/${DEL_DATE}/"

恢复:

1、全库恢复

1
mongorestore --host 10.10.17.27 --port  27000   
/backup/mongodbbackup/20150818/

2、单集合(表的概念)恢复

1
 
mongorestore --host 10.10.17.27 --port  27001 --db navy_db_new --collection navy_db_table_new   
/backup/mongodbbackup/20150818/navy_db/navy_db_table
.bson

三、复制集备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
DATE=`
date 
+%Y%m%d`
DEL_DATE=$(
date 
-d 
'-30 days' 
"+%Y%m%d"
)
HOST=
"dbset/10.10.17.27:27000,10.10.17.26:27000"
USER=admin
PASSWORD=123456
BACKUP_PATH=
"/data/mongodbbackup/$DATE"
date 
+%Y%m%d%H%M >>
/data/log/mongodb_bak
.log
start()
{
mongodump -h $HOST -u $USER -p $PASSWORD  --oplog  -o $BACKUP_PATH
}
execute()
{
  
start
  
if 
[ $? -
eq 
0 ]
  
then
    
echo 
"mongodb back successfully!" 
>>
/data/log/mongodb_bak
.log
  
else
    
echo 
"mongodb back fail!" 
>>
/data/log/mongodb_bak
.log
  
fi
}
execute
rm 
-rf 
"/backup/mongodbbackup/${DEL_DATE}/"

PS:

备份复制集和备份单个mongodb实例用mongodump备份的方法差不多,只是host的写法不一样,需要指定复制集名称,还有就是加上 --oplog参数,来跟踪备份时主库上发生的所有写操作,获取一个pointin-time快照,否则备份的状态将与集 群中其他节点不匹配。在恢复时,还必须创建oplog,并指定--oplogReplay参数来应用这些操作,否则恢复的成员将不知道从何处开始同步,从 而在某个时间点上与源服务器保持一致。

恢复:

1、降复制集中要恢复的节点移除

1
rs.remove(
"10.10.17.26:27000"
)

2、运行mongorestore --oplogReplay命令

1
mongorestore --host 10.10.17.26 --port  27000 --oplogReplay  
/data/mongodbbackup/20150820/

3、创建oplog

1
2
use 
local 
db.createCollection(
"oplog.rs"
, {
"capped" 
true
"size" 
: 10000000})

4、恢复oplog

1
mongorestore --host 10.10.17.26 --port  27000 -d 
local 
-c oplog.rs  
/data/mongodbbackup/20150820/oplog
.bson

5、将该节点加入到复制集 

1
 
rs.add(
"10.10.17.26:27000"
)

本文出自 “” 博客,请务必保留此出处

你可能感兴趣的文章
from disk cache 与 from memory cache
查看>>
应用图片加载服务与第三方实现库的解耦
查看>>
高并发的核心技术-幂等的实现方案
查看>>
微波炉炖蛋
查看>>
C#调用C/C++ DLL 参数传递和回调函数的总结
查看>>
非spring组件servlet、filter、interceptor中注入spring bean
查看>>
SQL Server中SELECT会真的阻塞SELECT吗?
查看>>
class path and classloader
查看>>
文字检测与识别 资源
查看>>
外包筛选心得
查看>>
Warning: skipping non-radio button in group
查看>>
dotnet检测类型是否为泛型
查看>>
Android 悬浮窗权限校验
查看>>
使用CefSharp在.Net程序中嵌入Chrome浏览器(九)——性能问题
查看>>
mysql 创建数据库 并设置utf8格式
查看>>
IDA 逆向工程 反汇编使用
查看>>
CentOS7单独安装Apache Bench压力测试工具
查看>>
python植入后门backdoor程序的方法?
查看>>
WPF 使用 Direct2D1 画图 绘制基本图形
查看>>
导入其他python文件或者python文件的函数
查看>>