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 一样有可视化的管理工具。这请自行查找下载。
最后感谢您的收看。