MongoDB基礎

一、概述

1.1 MongoDB概念

MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保證服務器性能。MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。在nosql數據庫裏,大部分的查詢都是鍵值對(key、value)的方式。MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中最像關係數據庫的。其特徵NoSQL、文檔存儲、Json數據模型、支持事務。

1.2 NoSQL概念

NoSQL,指的是非關係型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型數據庫的數據庫管理系統的統稱。

NoSQL用於超大規模數據的存儲。(例如谷歌或Facebook每天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。

1.3 NoSQL的特徵

高擴展性:Nosql去掉了關係數據庫的關係型特性,易於橫向擴展。

高性能:Nosql通過簡單的key-value方式獲取數據,非常快速。還有NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多。

靈活的數據模型:相對於關係數據庫裏,增刪字段的繁瑣,NoSQL無需事先爲要存儲的數據建立字段,隨時可以存儲自定義的數據格式。

高可用:NoSQL在不太影響性能的情況,就可以方便的實現高可用的架構。比如mongodb通過mongos、config server replica set,shard就可以快速配置出高可用配置。

1.4 NoSQL分類

類型部分代表特點 
列存儲

Hbase

Cassandra

Hypertable

顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。

文檔存儲

MongoDB

CouchDB

文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段建立索引,實現關係數據庫的某些功能。

key-value存儲

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)

圖存儲

Neo4J

FlockDB

圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,而且設計使用不方便。

對象存儲

db4o

Versant

通過類似面嚮對象語言的語法操作數據庫,通過對象的方式存取數據。

xml數據庫

Berkeley DB XML

BaseX

高效的存儲XML數據,並支持XML的內部查詢語法,比如XQuery,Xpath。

1.5 MongoDB概念解析

在mongodb中基本的概念是文檔、集合、數據庫,對應與關係型數據庫如下表:

SQL術語/概念MongoDB術語/概念解釋/說明
databasedatabase數據庫
tablecollection數據庫表/集合
rowdocument數據記錄行/文檔
columnfield數據字段/域
indexindex索引
table joins
表連接,MongoDB不支持
primary keyprimary key主鍵,MongoDB自動將_id字段設置爲主鍵

數據庫:一個MongoDB 實例可以承載多個數據庫。它們之間可以看作相互獨立,每個數據庫都有獨立的權限控制。在磁盤上,不同的數據庫存放在不同的文件中。MongoDB 中存在以下系統數據庫。

  • Admin 數據庫:一個權限數據庫,如果創建用戶的時候將該用戶添加到admin 數據庫中,那麼該用戶就自動繼承了所有數據庫的權限。

  • Local 數據庫:這個數據庫永遠不會被負責,可以用來存儲本地單臺服務器的任意集合。

  • Config 數據庫:當MongoDB 使用分片模式時,config 數據庫在內部使用,用於保存分片的信息。

集合:集合就是一組文檔,類似於關係數據庫中的表。集合是無模式的,集合中的文檔可以是各式各樣的。在MongoDB中集合用collections表示,每個

collection用一個名字標識,需要注意以下幾點:

  • 名字不允許是空字符串""

  • 名字不能包含\0字符,因爲它表示名字的結束

  • 不能創建以system.開頭的

文檔:文檔是 MongoDB 中數據的基本單位,類似於關係數據庫中的行(但是比行復雜)。多個鍵及其關聯的值有序地放在一起就構成了文檔。

  • 文檔中的鍵/值對是有序的。

  • 文檔中的值不僅可以是在雙引號裏面的字符串,還可以是其他幾種數據類型(甚至可以是整個嵌入的文檔)。

  • MongoDB區分類型和大小寫。

  • MongoDB的文檔不能有重複的鍵。

  • 文檔的鍵是字符串。除了少數例外情況,鍵可以使用任意UTF-8字符。

二、安裝部署

2.1 配置yum安裝

配置mongodb的yum源進行安裝

cat >/etc/yum.repos.d/mongodb.repo<<EOF
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
EOF

yum clean all && yum makecache
yum install -y mongo-10gen mongo-10gen-server

2.2 下載安裝包安裝

cd /usr/local/
wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz            #下載軟件包
tar -zxvf mongodb-linux-x86_64-rhel62-3.4.10.tgz
ln -sv mongodb-linux-x86_64-rhel62-3.4.10 mongodb
mkdir /usr/local/mongodb/{conf,mongoData,mongoLog}                           #創建數據,日誌,配置文件目錄
touch /usr/local/mongodb/mongoLog/mongodb.log                              #創建日誌文件
echo "export PATH=\$PATH:/usr/local/mongodb/bin">/etc/profile.d/mongodb.sh                        
source /etc/profile.d/mongodb.sh                                     #配置環境變量

命令行啓動:

mongod --httpinterface --dbpath /usr/local/mongodb/mongoData --logpath /usr/local/mongodb/mongoLog/mongodb.log --fork

將啓動的各項參數寫入配置文件啓動

cat>/usr/local/mongodb/conf/mongodb.conf<<EOF
dbpath=/usr/local/mongodb/mongoData                    #數據存儲目錄
logpath=/usr/local/mongodb/mongoLog/mongodb.log                    #日誌文件
logappend=true                                      # 使用追加的方式寫日誌
journal=true                    
quiet=true        
port=27017                                        #端口
maxConns=20000                                      #最大連接數
httpinterface=true                                    #開啓web界面端口爲:28017      
fork=true                                        #以守護進程的方式運行MongoDB
EOF

mongod -f /usr/local/mongodb/conf/mongodb.conf                          #指定配置文件啓動

image.png

2.3 mongod配置參數詳解

--quiet# 安靜輸出
--port arg# 指定服務端口號,默認端口27017
--bind_ip arg# 綁定服務IP,若綁定127.0.0.1,則只能本機訪問,不指定默認本地所有IP
--logpath arg# 指定MongoDB日誌文件,注意是指定文件不是目錄
--logappend# 使用追加的方式寫日誌
--pidfilepath arg# PID File 的完整路徑,如果沒有設置,則沒有PID文件
--keyFile arg# 集羣的私鑰的完整路徑,只對於Replica Set 架構有效
--unixSocketPrefix arg# UNIX域套接字替代目錄,(默認爲 /tmp)
--fork# 以守護進程的方式運行MongoDB,創建服務器進程
--auth# 啓用驗證
--cpu# 定期顯示CPU的CPU利用率和iowait
--dbpath arg# 指定數據庫路徑
--diaglog arg# diaglog選項 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb# 設置每個數據庫將被保存在一個單獨的目錄
--journal# 啓用日誌選項,MongoDB的數據操作將會寫入到journal文件夾的文件裏
--journalOptions arg# 啓用日誌診斷選項
--ipv6# 啓用IPv6選項
--jsonp# 允許JSONP形式通過HTTP訪問(有安全影響)
--maxConns arg# 最大同時連接數 默認2000
--noauth# 不啓用驗證
--nohttpinterface# 關閉http接口,默認關閉27018端口訪問
--noprealloc# 禁用數據文件預分配(往往影響性能)
--noscripting# 禁用腳本引擎
--notablescan# 不允許表掃描
--nounixsocket# 禁用Unix套接字監聽
--nssize arg (=16)# 設置信數據庫.ns文件大小(MB)
--objcheck# 在收到客戶數據,檢查的有效性,
--profile arg# 檔案參數 0=off 1=slow, 2=all
--quota# 限制每個數據庫的文件數,設置默認爲8
--quotaFiles arg# number of files allower per db, requires --quota
--rest# 開啓簡單的rest API
--repair# 修復所有數據庫run repair on all dbs
--repairpath arg# 修復庫生成的文件的目錄,默認爲目錄名稱dbpath
--slowms arg (=100)# value of slow for profile and console log
--smallfiles# 使用較小的默認文件
--syncdelay arg (=60)# 數據寫入磁盤的時間秒數(0=never,不推薦)
--sysinfo# 打印一些診斷系統信息
--upgrade# 如果需要升級數據庫

 * Replicaton 參數

--fastsync# 從一個dbpath裏啓用從庫複製服務,該dbpath的數據庫是主庫的快照,可用於快速啓用同步
--autoresync# 如果從庫與主庫同步數據差得多,自動重新同步,
--oplogSize arg# 設置oplog的大小(MB)

 * 主/從參數

--master# 主庫模式
--slave# 從庫模式
--source arg# 從庫 端口號
--only arg# 指定單一的數據庫複製
--slavedelay arg# 設置從庫同步主庫的延遲時間

 * Replica set(副本集)選項:

--replSet arg# 設置副本集名稱

 * Sharding(分片)選項

--configsvr# 聲明這是一個集羣的config服務,默認端口27019,默認目錄/data/configdb
--shardsvr# 聲明這是一個集羣的分片,默認端口27018
--noMoveParanoia# 關閉偏執爲moveChunk數據保存

三、基礎操作

3.1 數據庫操作

a.創建數據庫

MongoDB 創建數據庫的語法格式如下:

use DATABASE_NAME            #如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。
use dbtest;
> db
dbtest

> show dbs;        #查看數據庫
admin   0.000GB
dbtest  0.000GB
local   0.000GB

b.刪除數據庫

MongoDB 刪除數據庫的語法格式如下:

db.dropDatabase()
> use dbtest;
switched to db dbtest
> db.dropDatabase()
{ "dropped" : "dbtest", "ok" : 1 }
> show dbs;
admin  0.000GB
local  0.000GB

3.2 集合操作

a.創建集合

db.createCollection(name,options)
db.createCollection("user",autoindexID=true)
  • capped:類型爲 Boolean,如果爲 true 則創建一個固定大小的集合,當其條目達到最大時可以自動覆蓋以前的條目。在設置其爲 true 時也要指定參數大小;

  • autoIndexID:類型爲 Boolean,默認爲 false,如果設置爲 true,則會在 _id field.s 上自動創建索引;

  • size:如果 capped 爲 true 需要指定,指定參數的最大值,單位爲 byte;

  • max:指定最大的文檔數。 在 Mongodb 中也可以不用創建集合,因爲在創建文檔的時候也會自動的創建集合。

> db.createCollection("user",autoindexID=true)        #創建集合user
{ "ok" : 1 }
> show collections;                                    #查看集合
user

b.刪除集合

db.collection.drop()
> show collections;
user
> db.user.drop()
true
> show collections

3.3 文檔操作

a.插入文檔

MongoDB 使用 insert() 或 save() 方法向集合中插入文檔

db.COLLECTION_NAME.insert(document)
> db.user.insert({name:"kaliarch",age:30})            #insert 插入文檔
WriteResult({ "nInserted" : 1 })
> db.user.insert({name:"xuel",age:31})        
WriteResult({ "nInserted" : 1 })        
> db.user.save({name:"anchnet",age:34})                #save插入文檔
WriteResult({ "nInserted" : 1 })        
> db.user.find()                                        #查看文檔
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "xuel", "age" : 31 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
  • db.collection.insertOne():向指定集合中插入一條文檔數據

  • db.collection.insertMany():向指定集合中插入多條文檔數據

b.更新文檔

MongoDB 使用 update() 和 save() 方法來更新集合中的文檔

--------------------------------------update方式-----------------------------------------

update()方式
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   })

參數說明:

  • query : update的查詢條件,類似sql update查詢內where後面的。

  • update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解爲sql update查詢內set後面的

  • upsert  : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。

  • multi  : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數爲true,就把按條件查出來多條記錄全部更新。

  • writeConcern  :可選,拋出異常的級別。

> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "xuel", "age" : 31 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
> db.user.update({"name":"xuel"},{$set:{"name":"udxuel"}})                                    #更新name
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "udxuel", "age" : 31 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }

-----------------------------------------save方式--------------------------------------

save()方式
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   })

參數說明:

  • document : 文檔數據。

  • writeConcern  :可選,拋出異常的級別。

> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "udxuel", "age" : 31 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
> db.user.save({ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "xuel", "age" : 31 })            #更新name
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "xuel", "age" : 31 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }

c.刪除文檔

remove() 方法的基本語法格式如下

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   })

參數說明:

  • query :(可選)刪除的文檔的條件。

  • justOne : (可選)如果設爲 true 或 1,則只刪除一個文檔。

  • writeConcern  :(可選)拋出異常的級別。


> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a870cceffdd1c65f633ef"), "name" : "xuel", "age" : 31 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
> db.user.remove({"name":"xuel","age":31})                            #刪除文檔
WriteResult({ "nRemoved" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }

d.查看文檔

db.collection.find(query, projection)
  • query :可選,使用查詢操作符指定查詢條件

  • projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。

可以使用 pretty() 方法,語法格式如下:

> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
> db.user.find().pretty()
{
    "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"),
    "name" : "kaliarch",
    "age" : 30
}
{
    "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"),
    "name" : "anchnet",
    "age" : 34
}

3.4 條件操作符

條件操作符用於比較兩個表達式並從mongoDB集合中獲取數據

  • (>) 大於 - $gt

  • (<) 小於 - $lt

  • (>=) 大於等於 - $gte

  • (<= ) 小於等於 - $lte

  • (=)等於- $eq

  • (!=)不等於-$ne

> db.user.find()
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
{ "_id" : ObjectId("5a1a8ddeceffdd1c65f633f1"), "name" : "test", "age" : 50 }
> db.user.find({"age":{$gt:33}})                             #查詢age大於33的文檔
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
{ "_id" : ObjectId("5a1a8ddeceffdd1c65f633f1"), "name" : "test", "age" : 50 }
> db.user.find({"age":{$lt:33}})                             #查詢age小於33的文檔
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
> db.user.find({"age":{$eq:34}})                              #查詢age等於33的文檔
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
> db.user.find({"age":{$ne:10}})                              、#查詢age不等於10的文檔
{ "_id" : ObjectId("5a1a8704ceffdd1c65f633ee"), "name" : "kaliarch", "age" : 30 }
{ "_id" : ObjectId("5a1a8729ceffdd1c65f633f0"), "name" : "anchnet", "age" : 34 }
{ "_id" : ObjectId("5a1a8ddeceffdd1c65f633f1"), "name" : "test", "age" : 50

3.5 創建索引

索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件並選取那些符合查詢條件的記錄。

這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,這對網站的性能是非常致命的。

索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對數據庫表中一列或多列的值進行排序的一種結構

MongoDB使用 ensureIndex() 方法來創建索引。

>db.COLLECTION_NAME.ensureIndex({KEY:1})

語法中 Key 值爲你要創建的索引字段,1爲指定按升序創建索引,如果你想按降序來創建索引指定爲-1即可。

ensureIndex() 方法中你也可以設置使用多個字段創建索引(關係型數據庫中稱作複合索引)。

db.mycol.ensureIndex({"title":1,"description":-1})

3.6 備份恢復

a.mongodb數據備份

mongodump命令腳本語法如下:

mongodump -h dbhost -d dbname -o dbdirectory
  • -h:

    MongDB所在服務器地址,例如:127.0.0.1,當然也可以指定端口號:127.0.0.1:27017

  • -d:

    需要備份的數據庫實例,例如:test

  • -o:

    備份的數據存放位置,例如:c:\data\dump,當然該目錄需要提前建立,在備份完成後,系統自動在dump目錄下建立一個test目錄,這個目錄裏面存放該數據庫實例的備份數據。

圖片.png

語法描述實例
mongodump --host HOST_NAME --port PORT_NUMBER該命令將備份所有MongoDB數據mongodump --host localhost --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY
mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME該命令將備份指定數據庫的集合。mongodump --collection mycol --db test

b.mongodb數據恢復

mongorestore命令腳本語法如下:

>mongorestore -h <hostname><:port> -d dbname <path>
  • --host <:port>, -h <:port>:

    MongoDB所在服務器地址,默認爲: localhost:27017

  • --db , -d :

    需要恢復的數據庫實例,例如:test,當然這個名稱也可以和備份時候的不一樣,比如test2

  • --drop:

    恢復的時候,先刪除當前數據,然後恢復備份的數據。就是說,恢復後,備份後添加修改的數據都會被刪除,慎用哦!

  • <path>:

    mongorestore 最後的一個參數,設置備份數據所在位置,例如:/tmp/testdb

    你不能同時指定 <path> 和 --dir 選項,--dir也可以設置備份目錄。

  • --dir:

    指定備份的目錄

    你不能同時指定 <path> 和 --dir 選項。

圖片.png

圖片.png

此時查看數據已經正常恢復。

3.7 密碼權限

爲mongodb設置密碼,需要進行auth啓動,在配置文件添加auth=true

a.設置數據庫管理員

> use admin
switched to db admin
> db.createUser({user:"root",pwd:"mongopwd",roles:["userAdminAnyDatabase"]})                #創建用戶密碼,並設置權限
Successfully added user: { "user" : "root", "roles" : [ "userAdminAnyDatabase" ] }
> db.auth("root","mongopwd")                            #認證,返回1爲認證成功
1

圖片.png

認證通過進入數據庫db.auth 也可以在登錄的時候直接指定用戶名密碼登錄

mongo -u root -p mongopwd --authenticationDatabase admin

b.創建數據庫用戶

> use test
switched to db test
> db
test
>  db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.auth("testuser","testpass")
1

圖片.png

四、自動備份腳本

最後寫一個mongodb自動備份腳本,配合crond來定時備份數據

github地址


#!/bin/bash
#auth:[email protected]
#backup mongodb

. /etc/profile
CMD=`which mongodump`
DATE=`date +%F`
DB="test"
DB_HOST="localhost"
DB_PORT="27017"
DB_USER="testuser"
DB_PWD="testpass"
BACKUP_DIR="/data/mongodb/"
TAR_DIR="/data/tardir/"
TAR_DIR_DATE="${TAR_DIR}${DATE}"
TAR_BAK="mongodb_bak_$DATE.tar.gz"

check_dir(){
        for DIR in ${BACKUP_DIR} ${TAR_DIR_DATE}
        do
                if [ ! -d $DIR ];then
                        mkdir -p $DIR
                fi
        done
}
backup_mongodb(){
        $CMD -h ${DB_HOST}:${DB_PORT} -u $DB_USER -p $DB_PWD -d ${DB} -o ${BACKUP_DIR}${DATE} >/dev/null
        if [ $? -eq 0 ];then
                tar -zcf ${TAR_DIR_DATE}/${TAR_BAK} ${BACKUP_DIR}${DATE} && return 0
        fi
}
clean_tar() {
        find ${TAR_DIR} -mtime +7 -exec rm -rf {} \; && return 0
}

main() {
        check_dir
        [ $? -eq 0 ] && backup_mongodb
        [ $? -eq 0 ] && clean_tar
}

main


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章