天天看點

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主從配置