上个周在服务器上安装了MongoDB,刚刚过了几天就已经记不起是怎么安装的了,甚至是通过包管理器安装还是下载安装包安装的也不记得,因此今天专门写一篇教程。安装MongoDB是因为一个项目基于Keystonejs,它需要MongoDB数据库。这篇文章安装的是社区版MongoDB,对于如何通过Docker运行MongoDB会专门通过一篇文章介绍。
安装MongoDB社区版
1 导入Public Key
执行下面的命令导入MongoDB的GPG公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
2 创建MongoDB源列表文件
创建/etc/apt/sources.list.d/mongodb-org-3.4.list
源列表文件,不同版本的Ubuntu需要的命令不一样
Ubntu 12.04
echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
Ubuntu 14.04
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
Ubuntu 16.04
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
3 更新本地包数据库
执行下面的命令更新本地包数据库
sudo apt-get update
4 安装MongoDB包
执行下面的命令安装MongoDB最新稳定版本
sudo apt-get install -y mongodb-org
运行MongoDB
1 启动MongoDB
执行下面的命令启动MongoDB
sudo service mongod start
2 验证MongoDB是否启动成功
检查/var/log/mongodb/mongod.log
的日志文件确定是否启动成功,如包含下面的内容则表示启动成功
[initandlisten] waiting for connections on port <port>
<port>是在/etc/mongod.conf
中配置的,默认为27017
3 停止MongoDB
执行下面的命令停止MongoDB
sudo service mongod stop
4 重启MongoDB
执行下面的命令重启MongoDB
sudo service mongod restart
卸载MongoDB
完全删除MongoDB,需要删除MongoDB程序本身,配置文件,以及包含数据和日志的目录,下面的卸载的步骤。
1 先停止MongoDB
执行下面的命令停止MongoDB
sudo service mongod stop
2 删除MongoDB包
删除安装的MongoDB包
sudo apt-get purge mongodb-org*
3 删除数据目录
删除MongoDB数据库和日志文件
sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongodb
配置MongoDB
MongoDB运行默认使用的配置文件是/etc/mongod.conf
启动MongoDB的时候可以指定使用的配置文件
sudo service mongod start --config /etc/mongod.conf
一般安装MongoDB之后,要做一些基本的配置,比如新建用户、启用登录认证、允许远程连接等。MongoDB自带一个Javascript shell,在Terminal中执行mongo
就可进入。
1 创建用户
首先切换到admin数据库
use admin
创建一个名为cxlt的管理员用户
db.createUser({ user:'cxlt', pwd:'123456', roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'dbAdminAnyDatabase',db:'admin'}] })
也可以为指定的数据库创建用户,下面的命令是为demo数据库创建了一个demo01的用户
use demo db.createUser({ user:'demo01',pwd:'123456',roles:[{role:'dbOwner',db:'demo'}]})
2 启用登录认证
打开/etc/mongod.conf
,找到security,去掉注释
security: authorization: enabled
启用登录后,就需要使用db.auth('cxlt','123456')
认证后,才能操作。
3 启用远程连接
打开/etc/mongod.conf
,找到bindIp,注释掉
net: port: 27017 # bindIp: 127.0.0.1
备份/还原MongoDB数据库
MongoDB可以备份整个数据库,也可以备份单个Collection
1 备份数据库
备份数据库的命令为mongodump
,它有一些常用参数
-h 要备份的MongoDB所在的主机地址,默认为localhost:27017
-u 用户名
-p 密码
--authenticationDatabase 用户所在的数据库,默认为admin
-d 要备份的数据库,如果不指定备份的数据库,则备份所有的数据库
-c 要备份的collection,如果不指定collection,则备份整个数据库
--gzip 压缩备份,备份的时候使用该参数,还原的时候也要指定该参数
-o 备份存放的目录,如果不指定,默认为当前目录的dump目录下
--archive 备份为档案文件
2 还原数据库
还原数据库的命令为mongorestore
,它的一些常用参数
-h 要还原的MongoDB所在的主机地址,默认为localhost:27017
-u 用户名
-p 密码
--authenticationDatabase 用户所在的数据库,默认为admin
-d 要还原的数据库
-c 要还原的collection
--gzip 备份的时候使用该参数,还原的时候也要指定该参数
--archive 从档案文件还原
3 一些例子
备份所有的数据库
mongodump
备份数据库demo
mongodump -d demo
压缩备份数据库文件
mongodump --gzip -d demo
备份数据库demo的user集合
mongodump -d demo -c user
备份数据库demo,将备份文件存储到~/mongodump目录
mongodump -d demo -o ~/mongodump
备份154.23.42.10服务器上的demo数据库
mongodump -h 154.23.42.10 -u cxlt -p 123456
备份demo数据库为一个档案文件
mongodump --archive=demo.20170717.archive -d demo
压缩备份的档案文件
mongodump --gzip --archive=demo.20170717.gz -d demo
还原数据库demo
mongorestore -d demo dump/demo
从压缩的备份文件还原demo数据库
mongorestore --gzip -d demo dump/demo
从档案文件还原demo数据库
mongorestore --archive=demo.20170717.archive -d demo
从压缩的档案文件还原demo数据库
mongorestore --gzip --archive=demo.20170717.gz -d demo
MongoDB客户端
目前我使用的MongoDB客户端是Robo 3T,免费,当然它也有更专业强大的Studio 3T,不过Robo 3T已经足够用了。
官网地址:https://www.robomongo.org/,用法也很简单,这里就不再介绍了
参考文档
https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/
https://docs.mongodb.com/manual/reference/method/db.createUser/
https://docs.mongodb.com/manual/reference/program/mongodump/
https://docs.mongodb.com/manual/reference/program/mongorestore/
https://docs.mongodb.com/manual/reference/program/mongoimport/
https://docs.mongodb.com/manual/reference/program/mongoexport/
如果有什么问题欢迎扫描下方二维码关注“chengxulvtu"公众号。