天天看点

mongdb备份恢复

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

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

<code>#!/bin/sh</code>

<code>date=`</code><code>date</code> <code>+%y%m%d`</code>

<code>del_date=$(</code><code>date</code> <code>-d </code><code>'-30 days'</code> <code>"+%y%m%d"</code><code>)</code>

<code>host=10.10.17.27</code>

<code>port=27000</code>

<code>user=admin</code>

<code>password=123456</code>

<code>data_dir=</code><code>"/data/mongodb/navy_db/db"</code>

<code>backup_path=</code><code>"/data/mongodbbackup/$date"</code>

<code>date</code> <code>+%y%m%d%h%m &gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>#第一步锁表</code>

<code>lock()</code>

<code>{</code>

<code>echo</code> <code>"db.fsynclock()"</code><code>|  mongo  --host $host --port $port -u $user -p $password  admin</code>

<code>}</code>

<code>execute()</code>

<code>  </code><code>lock</code>

<code>  </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ]</code>

<code>  </code><code>then</code>

<code>    </code><code>echo</code> <code>"mongodb lock successfully!"</code> <code>&gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>  </code><code>else</code>

<code>    </code><code>echo</code> <code>"mongodb lock fail!"</code> <code>&gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>  </code><code>fi</code>

<code>execute</code>

<code>#第二步备份</code>

<code>back()</code>

<code>rsync</code> <code>-av $data_dir $backup_path/</code>

<code>  </code><code>back</code>

<code>    </code><code>echo</code> <code>"mongodb back successfully!"</code> <code>&gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>    </code><code>echo</code> <code>"mongodb back fail!"</code> <code>&gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>#第三部解锁</code>

<code>unlock()</code>

<code>echo</code> <code>"db.fsyncunlock()"</code><code>|  mongo  --host $host --port $port -u $user -p $password  admin</code>

<code>  </code><code>unlock</code>

<code>    </code><code>echo</code> <code>"mongodb unlock successfully!"</code> <code>&gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>    </code><code>echo</code> <code>"mongodb unlock fail!"</code> <code>&gt;&gt;</code><code>/data/log/mongodb_bak</code><code>.log</code>

<code>#删除历史数据</code>

<code>rm</code> <code>-rf </code><code>"/data/mongodbbackup/${del_date}/"</code>

ps:

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

恢复步骤:

<code>1、停止需要恢复的实例</code>

<code>2、备份清空</code><code>/data/mongodb/navy_db/db</code><code>目录</code>

<code>3、拷贝</code><code>/data/mongodbbackup/</code><code>$date下面的所有文件和文件夹到</code><code>/data/mongodb/navy_db/db</code><code>目录</code>

<code>4、</code><code>chown</code> <code>mongod:mongod </code><code>/data/mongodb/navy_db/db/</code> <code>-r</code>

<code>5、启动实例</code>

二、mongodump备份

<code>host=10.10.17.27:27000</code>

<code>backup_path=</code><code>"/backup/mongodbbackup/$date"</code>

<code>start()</code>

<code>mongodump -h $host -u $user -p $password   -o $backup_path</code>

<code>  </code><code>start</code>

<code>rm</code> <code>-rf </code><code>"/backup/mongodbbackup/${del_date}/"</code>

恢复:

1、全库恢复

<code>mongorestore --host 10.10.17.27 --port  27000   </code><code>/backup/mongodbbackup/20150818/</code>

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

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

三、复制集备份

<code>host=</code><code>"dbset/10.10.17.27:27000,10.10.17.26:27000"</code>

<code>mongodump -h $host -u $user -p $password  --oplog  -o $backup_path</code>

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

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

<code>rs.remove(</code><code>"10.10.17.26:27000"</code><code>)</code>

2、运行mongorestore --oplogreplay命令

<code>mongorestore --host 10.10.17.26 --port  27000 --oplogreplay  </code><code>/data/mongodbbackup/20150820/</code>

3、创建oplog

<code>use </code><code>local</code> 

<code>db.createcollection(</code><code>"oplog.rs"</code><code>, {</code><code>"capped"</code> <code>: </code><code>true</code><code>, </code><code>"size"</code> <code>: 10000000})</code>

4、恢复oplog

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

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

<code> </code><code>rs.add(</code><code>"10.10.17.26:27000"</code><code>)</code>

上一篇: bind主从配置