MongoDB 簡介與安裝
---
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
總的來說,MongoDB 會是將來的主流
當然這部分 Shadow 也不是很熟。因為我以前是用 PHP+Mysql 的
Nodejs、MongoDB 和 JavaScript 也是剛接觸不久
## 部署
#### 1.安裝 MongoDB
>`sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5`
>`sudo echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee `/etc/apt/sources.list.d/mongodb-org-3.6.list``
>`sudo apt-get update`
>`sudo apt-get install -y mongodb-org`
#### 2.驗證 MongoDB 的版本號
>`mongod --version`
>服務器返回內容 db version vx.x
#### 3.啟動 MongoDB
>`$ sudo systemctl start mongod`
#### 4.查看 MongoDB 狀態
>`$ sudo systemctl status mongod`
#### 5.配置 MongoDB
>輸入命令進入數據庫
>`mongo`
>裝載數據庫admin
>`use admin`
>創建用戶admin至數據庫admin并給予管理員權限
>`db.createUser( { user: "admin", pwd: "這里改成你要設置的密碼", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )`
>創建并裝載您要使用的數據庫 例如shadow
>`use shadow`
>創建用戶shadow至數據庫shadow并給予管理員權限
>`db.createUser( { user: "shadow", pwd: "這里改成你要設置的密碼", roles: [ { role: "readWrite", db: "shadow" }, { role: "clusterMonitor", db: "admin" } ] } )`
>退出Mongodb
>`quit()`
#### 6.修改 mongod.conf
>更改MongoDB的mongod.conf來達到需要認證才能進入MongoDB程序的效果
>`sudo nano /etc/mongod.conf`
>在最后添加以下內容
>```
>security:
> authorization: enabled
>```
#### 7.重啟 MongoDB
>`sudo systemctl restart mongod`
>輸入命令驗證進入 mongodb
>`mongo -u admin -p 這里改成你設置好的密碼 --authenticationDatabase=admin`
至此 MongoDB 安裝配置完成
---
## 備份還原與遷移
以下以備份 Shadow 數據庫為例
#### 1.備份
>備份MongoDB數據庫
>創建一個文件夾讓你來備份文件
>`sudo mkdir /var/sqlbackups/mongodb`
>然后輸入命令備份
>`sudo mongodump –db Shadow ––out /var/sqlbackups/mongodb/date +"%m-%d-%y"`
>其中 Shadow (注意:所有Linux系統都是區分大小寫的)為你要備份的數據庫 /var/sqlbackups/mongodb/ 剛剛創建的文件夾 date +"%m-%d-%y" 新建一個文件夾名為目前的時間
>服務器應該返回的結果為:
>```
>Output of mongodump
>
>2018-04-15T13:17:47.685-0500 writing Shadow.restaurants to /var/sqlbackups/mongodb/04-48-18/Shadow/restaurants.bson
>2018-04-15T13:17:47.907-0500 writing Shadow.restaurants metadata to /var/sqlbackups/mongodb/04-48-18/Shadow/restaurants.metadata.json
>2018-04-15T13:17:47.911-0500 done dumping Shadow.restaurants (0 documents)
>2018-04-15T13:17:47.911-0500 writing Shadow.system.indexes to /var/sqlbackups/mongodb/04-48-18/Shadow/system.indexes.bson``
>```
>一般來說,我們需要對數據庫進行定期備份。因此,大家可以將mongodump命令設置為cron任務以定期執行備份.
>sudo crontab -e
>在crontab提示符下輸入以下命令:
>```
>Crontab window
>
>3 3 * * * mongodump --out /var/sqlbackups/mongodb/`date +"%m-%d-%y"`
>```
>根據MongoDB的具體規模,過頻的備份可能導致磁盤空間不足。因此我們還需要定期清理一些舊的備份或者進行壓縮。例>如通過以下命令每七天刪除全部舊有備份:
>`find /var/sqlbackups/mongodb/ -mtime +7 -exec rm -rf {} \;`
>當然這也是可以加入到crontab中的
>`sudo crontab -e`
>在crontab提示符下輸入以下命令:
>```
>Crontab window
>
>3 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;
>```
>這樣一來我們就不用擔心數據會丟失了。
#### 2.還原
>還原很簡單就一句命令,也不用去設置定期任務。
>`sudo mongorestore ––db Shadow ––drop /var/sqlbackups/mongodb/04-48-18/Shadow/`
>服務器應該返回的結果為
>```
>Output of mongorestore
>
>2018-04-15T13:41:27.876-0500 building a list of collections to restore from /var/sqlbackups/mongodb/04-48-18/Shadow/ dir
>2018-04-15T13:41:27.908-0500 reading metadata file from /var/sqlbackups/mongodb/04-48-18/Shadow/restaurants.metadata.json
>2018-04-15T13:41:27.909-0500 restoring Shadow.restaurants from file /var/sqlbackups/mongodb/04-48-18/Shadow/restaurants.bson
>2018-04-15T13:41:28.591-0500 restoring indexes for collection Shadow.restaurants from metadata
>2018-04-15T13:41:28.592-0500 finished restoring Shadow.restaurants (0 documents)
>2018-04-15T13:41:28.592-0500 done
>```
>這樣就成功的還原了數據庫
#### 3.遷移
>這我就不多說了,就是把備份時生成的Shadow文件夾復制到另外一臺服務器進行還原。
---
好了。因為Shadow研究 MongoDB 時間也不長。自己也在學習當中。其他的就不多寫了。
另外 MongoDB 和 Mysql 一樣有可視化的管理工具。這請自行查找下載。
最后感謝您的收看。