9、在ubuntu服务器中配置安装和使用MongoDB

一、在ubuntu上安装mongodb

帮助文档:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
1、导入公钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

2、为mongodb创建列表文件(此处选14.04版,大家可以根据自己的ubuntu版本号选择)

echo "deb [ arch=amd64 
] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

3、更新本地资源列表

sudo apt-get update

4、安装mongodb

sudo apt-get install -y mongodb-org

5、配置iptables规则:

# mongodb默认启动端口为27017,因此需在iptables中进行配置
# mongodb connect
-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

执行:sudo iptables-restore < /etc/iptable.up.rules
重启iptables: sudo ufw enable

6、启动mongodb: sudo service mongod start


查看当前mongodb的运行状态:cat /var/log/mongodb/mongod.log

7、连接mongodb: mongo

8、如果要修改mongodb的默认启动端口,则需要修改"/etc/mongod.conf"中的port端口号,修改iptables配置文件中的端口号,然后再重新执行以上步骤。
如果mongo的默认端口改为19999,修改端口后mongo的连接方式:mongo --port 19999

9、如果出现mongodb连接不上的情况,可能需要在阿里云服务器中配置安全组规则,开放相应的端口。如果还是连不上,可以尝试重启服务器。我就是在重启服务器后才最终连接上mongo的。

10、mongodb开机自启动:sudo systemctl enable mongodb

二、往线上 MongoDB 导入单表数据或数据库

我们在本地开发完成后都会有一个本地的MongoDB数据库,上线的时候往往需要将这个本地的数据库和库中的少量基础数据导入到生产环境,因此需要进行以下工作
1、备份本地数据

//将indust-app数据库导出到indust-app-backup目录下
mongodump -h 127.0.0.1:27017 -d indust-app -o indust-app-backup

2、将本地备份的数据库文件indust-app-backup打包压缩

tar zcvf indust-app.tar.gz indust-app-backup

此时本地将多出一个indust-app.tar.gz压缩包

3、在本地通过scp命令将本地压缩包上传到服务器

//将当前目录下的indust-app.tar.gz文件传到生产服务器上的xiaoke家目录下的dbbackup目录中
scp -P 39999 ./indust-app.tar.gz xiaoke@47.52.28.218:/home/xiaoke/dbbackup/

4、在服务器中,对/home/xiaoke/dbbackup/目录下的tar包进行解压缩

tar xvf indust-app.tar.gz

5、在服务器中导入数据库

mongorestore --host 127.0.0.1:19999 -d indust-app ./dbbackup/indust-app-backup/indust-app/

6、以上过程是导入完整数据库,如果只是想要导入本地库中的某张表则执行以下流程:

//本地导出单表(mongodb中称作集合)
mongoexport -d imooc-movie -c users -q '{"name":{$ne:null}}' -o ./movie-users.json

//在本地用scp将movie-users.json传到服务器
scp -P 39999 ./movie-users.json xiaoke@47.52.28.218:/home/xiaoke/dbbackup/

//在服务器将movie-users.json导入到数据库中
mongoimport --host 127.0.0.1:19999 -d  imooc-movie -c users ./movie-users.json




三、为上线项目配置mongodb读写权限:

数据库是一个网站或一个互联网应用的大脑,里面存储着整个网站或者整个公司的数据资产,所以它一定要具备一定的安全性,最好带着“头盔”再来飙车。我们知道的关系型数据库都是有权限控制的。什么用户可以访问什么库什么表,有的用户可以进行插入或者更新的操作,而有的用户则只有读取的权限。比如说,mysql安装配置之后,会有一个默认自带的数据库,其中会有user表用来存放用户和用户的权限。而mongodb也有这样的表。这节课就带大家看一下最基本的mongodb权限控制。
1、mongodb没有默认的管理员账号,所以要先添加管理员账号,然后再开启权限来认证;
2、只有切换到admin数据库之后,添加的账号才算是管理员账号;
3、用户只能在用户所在的数据库来进行登录,包括管理员账号;
4、管理员可以管理所有的数据库,但不能直接管理其他的数据库,首先要到admin里面认证之后才可以。

首先,我们对mongodb数据库设置一个超级权限(管理员)

//进入mongo的命令行环境下
mongo --port 19999

//切换到admin数据库
use admin

//添加管理员
db.createUser({user:'xiaoke',pwd:'********',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})

新建并配置其他数据库:

//在admin数据库下对用户进行授权
db.auth('xiaoke','********')

//新建并切换到“xiaoke_blog”数据库(数据库名称不可使用“_”之外的任何特使字符)
use xiaoke_blog

//创建xiaoke_blog数据库管理用户并给与读写权限:
db.createUser({user:'blog-runner',pwd:'********',roles:[{role:'readWrite',db:'xiaoke_blog'}]})

//创建xiaoke_blog数据库的备份角色:
db.createUser({user:'blog-wheel',pwd:'********',roles:[{role:'read',db:'xiaoke_blog'}]})

在服务器中修改配置文件以开启权限验证

sudo vi /etc/mongod.conf 
//配置文件中加入:
security:
    authorization:'enabled'
//重启数据库
sudo service mongod restart

验证修改是否生效:

//重新登录mongo
mongo --port 19999
show dbs

由于没有权限执行此脚本,所以会报错:



为了获取权限需要用管理员授权:

use admin
db.auth('xiaoke','********')
show dbs

此时,显示数据库成功。新加的数据库“xiaoke_blog”由于没有数据所以在此不显示。

如果想登录某个数据库:

mongo 127.0.0.1:19999/xiaoke_blog -u blog-runner -p ********

我们在新部署一台服务器的时候,最好应该像这样,先设想好整个服务器需要部署几个项目,会有多少个数据库。规划好每个数据库有多少个用户多少个权限,以及用户和权限的对应关系。这样会使应用的部署更可靠一点。


四、从一台服务器迁移项目到另一台服务器:

如果要迁移整个数据库:

//1、将源服务器中的数据库导出到目录中
mongodump -h 127.0.0.1:27017 -d indust-app -o indust-app-backup

//2、将目录中的数据库文件打包压缩
tar zcvf indust-app.tar.gz indust-app-backup

//3、将压缩后的数据库文件导出到本地(本地操作)
scp -P 39999 xiaoke@47.52.28.218/home/xiaoke/db/indust-app.tar.gz ./

//4、将本地的数据库文件导入到新服务器
scp -P 39999 ./indust-app.tar.gz xiaoke@47.52.28.218:/home/xiaoke/newdb/

//6、在新服务器中对数据库文件进行解压缩
tar xvf indust-app.tar.gz

//7、在服务器中新建数据库indust-app
mongo --port 19999
use admin
db.auth('xiaoke','********')
use indust-app
db.createUser({user:'indust-runner',pwd:'********',roles:[{role:'readWrite',db:'indust-app'}]})

//8、在服务器中导入数据库
mongorestore --host 127.0.0.1:19999 -d indust-app -u indust-runner -p ******** 
 ./dbbackup/indust-app-backup/indust-app/

如果要迁移库中的某个表:

//1、将源服务器中的数据表导出到目录中
mongoexport -h 127.0.0.1:27017 -d imooc-movie -u username -p password -c users -q '{"name":{$ne:null}}' -o ./movie-users-old.json

//2、将数据表文件导出到本地
scp -P 39999 xiaoke@47.52.28.218/home/xiaoke/db/movie-users-old.json ./

//3、将本地的数据表文件导入到新服务器
scp -P 39999 ./movie-users-old.json xiaoke@47.52.28.218:/home/xiaoke/newdb/


//4、在新服务器中的数据库中新建数据表movie-users
mongo --port 19999
use admin
db.auth('xiaoke','********')
use movie-app
db.createUser({user:'movie-runner',pwd:'********',roles:[{role:'readWrite',db:'movie-app'}]})

//5、在服务器中导入数据表文件
mongorestore --host 127.0.0.1:19999 -d movie-app -c users ./newdb/movie-users-old.json


五、为数据库实现定时备份方案:

编写一个脚本文件:vim mongo-backup.sh

#!/bin/sh
backUpFolder=/home/imooc_manager/backup/movie
date_now=`data +%Y_%m_%d_%H%M`
backFileName=movie_$data_now

cd $backUpFolder
mkdir -p $backFileName
mongodump -h 127.0.0.1:19999 -d imooc_movie -u imooc_movie_wheel -p B**kup2017$ -o $backFileName

tar zcvf $backFileName.tar.gz $backFileName

进入系统的crontab -e启动系统设置界面按2选择进入nano编辑器

#m  h  dom   mon   dow command
13   00 *        *         *      sh  /home/xiaoke/task/mongo-backup.sh

这样每天凌晨的13分会进行自动备份

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容