一、在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分会进行自动备份
网友评论