博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker安装mongodb开启权限认证以及mongodb数据定时脚本备份与恢复
阅读量:4165 次
发布时间:2019-05-26

本文共 5782 字,大约阅读时间需要 19 分钟。

docker安装mongodb与mongodb数据定时备份

一、安装mongodb

docker run  \--name mymongo \-p 27017:27017  \-v /usr/local/docker/mongo/config:/data/configdb/ \-v /usr/local/docker/mongo/data:/data/db/ \-v /usr/local/docker/mongo/backup/data:/data/backup \-v /usr/local/docker/mongo/backup/data_tar:/data/backup_tar \--restart=always \-d mongo:3.4 --auth说明:/usr/local/docker/mongo/config          容器映射到主机的配置文件夹/usr/local/docker/mongo/data            容器映射到主机的数据文件夹/usr/local/docker/mongo/backup/data     容器映射到主机的最近一次备份数据(未打包)/usr/local/docker/mongo/backup/data_tar 容器映射到主机的最近7天备份的数据(已打包)--auth  开启访问认证

二、创建用户与角色授权

# 以admin的身份进入容器docker exec -it containerID/containerName mongo admin# 创建用户,并添加密码db.createUser({
user: 'admin', pwd: 'admin123456', roles: [ {
role: "userAdminAnyDatabase", db: "admin" } ] });# 尝试认证用户db.auth("admin","admin123456")# 另外创建一个用户db.createUser({
user: 'test', pwd: 'test123456', roles: [ {
role: "readWrite", db: "test" } ] });# 现在给用户授权,这里是给用户授权 参数依次是 用户名,角色[这里用的是系统自带角色], 数据库名# 添加读写的角色db.grantRolesToUser("admin", [ {
role: "readWrite", db: "admin" } ])# 添加备份角色db.grantRolesToUser("admin", [ {
role: "backup", db: "admin" } ])# 添加恢复角色db.grantRolesToUser("admin", [ {
role: "restore", db: "admin" } ])# 查看所有用户show users# 退出操作exit

这是mongodb数据库自带角色及其说明:

(1).数据库用户角色针对每一个数据库进行控制。read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespacesreadWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.(2).数据库管理角色每一个数据库包含了下面的数据库管理角色。dbOwner:该数据库的所有者,具有该数据库的全部权限。dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。(3).集群管理权限admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)clusterMonitor:仅仅监控集群和复制集。hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。(4).所有数据库角色admin数据库提供了一个mongod实例中所有数据库的权限角色:readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。和read相似,但它是全局。的。readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。(5). 超级管理员权限root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。(6). 备份恢复角色:backup、restore;(7). 内部角色:__system

三、开启认证

https://docs.mongodb.com/manual/tutorial/enable-authentication/

# 进入容器docker exec -it containerID/containerName /bin/bash# 编辑配置文件vi /etc/mongod.conf.orig# 若没有安装vim请 安装vimapt-get updateapt-get install vim# 这是定时任务,暂时不用apt-get -y install cron

在配置文件 /etc/mongo.conf 中加入开启认证:

security:    authorization: enabled

四、mongodb定时备份到另外一台服务上

**注意:**这里备份时候需要 此用户有系统自带的 【备份和恢复】 的角色

开启备份的backup-db.sh脚本:

#!/bin/bashsource /etc/profile# 主机的备份日志LOG_DIR=/usr/local/docker/mongo/backup/log# 远程服务器ipREMOTE_IP=114.1.1.0# 远程服务器用户REMOTE_USER=root# 远程服务器备份目录REMOTE_DIR=/usr/data# 主机上备份压缩文件目录BACK_DIR=/usr/local/docker/mongo/backup/data_tar# mongodb容器的名称CONTAINERNAME=mymongo# 容器内的备份文件夹OUT_DIR=/data/backup# 容器内打包的备份文件TAR_DIR=/data/backup_tarfunction log(){  echo "[ `date '+%Y-%m-%d %H:%M:%S'` ] $1"}# 备份function main(){DATE=`date +%\Y\%m\%d\%H\%M\%S`# 数据库用户名DB_USER=admin# 数据库密码DB_PASS=admin123456# 数据保留天数DAYS=7TAR_BAK="mongod_bak_$DATE.tar.gz"docker exec -i $CONTAINERNAME /bin/bash -c 'cd $OUT_DIR'log "删除上一次的数据"docker exec -i $CONTAINERNAME /bin/bash -c 'rm -rf $OUT_DIR'log "容器中开始备份 ${TAR_BAK}"docker exec -i $CONTAINERNAME mongodump -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS -d admin -o $OUT_DIRlog "容器中开始打包 ${TAR_BAK}"docker exec -it $CONTAINERNAME tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR# 通过scp的方式备份到另外一台服务器,需要在另外一台服务器上加 认证key, 自行百度log "主机开始远程备份 ${TAR_BAK}"scp $BACK_DIR/$TAR_BAK $REMOTE_USER@$REMOTE_IP:$REMOTE_DIRlog "备份到远程成功"log "开始删除7天前的备份"find $BACK_DIR/ -mtime +$DAYS -deletelog "删除完毕"}main >> ${LOG_DIR}/backup.log  2>&1

注意:

​ 若是在Windows上编辑过脚本,上传脚本后,需要执行以下命令,清除脚本中的空格和换行

# 去除脚本中的空格和换行sed -i 's/\r$//' /usr/local/docker/mongo/backup/backup-db.sh

脚本中 scp 的方式备份文件需要设置 ssh 免密登录

定时执行脚本备份:

利用 linux 系统自带的 crontab 定时任务,每天定时执行以上脚本。

新建定时任务:

$ crontab -e

在最后一行写上:

# 每日凌晨2点,执行相应脚本0 2 * * * sh /usr/local/docker/mongo/backup/backup-mongodb.sh

定时任务参数部分说明:

**加入开机自动启动:**chkconfig –level 35 crond on

crontab -e # 创建自己的一个任务调度,此时会进入到vi编辑界面,来编写我们要调度的任务

crontab -l # 列出定时的任务

crontab -r con_name # 删除crontab文件

which ifconfig # 获取命令路径

服务操作说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

/sbin/service crond status //启动服务

五、数据库恢复

将之前备份的数据拷贝到 容器内部 备份文件夹:

mongorestore -h IP:port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径--drop:先删除所有的记录,然后恢复.【drop慎用】docker exec -it 
/
mongorestore -h IP:port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径# 执行命令恢复 docker exec -it mymongo mongorestore -h 127.0.0.1:27017 -u admin -p admin123456 -d admin --dir /data/backup/admin

# 容器内备份的文件夹/data/backup/admin
>mongorestore -h 
<:port> -d dbname
-h <:port>:MongoDB所在服务器地址,默认为: localhost:27017--db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
:mongorestore 最后的一个参数,设置备份数据所在位置,例如:/data/backup/admin你不能同时指定
和 --dir 选项,--dir也可以设置备份目录。--dir:指定备份的目录你不能同时指定
和 --dir 选项新建mongodb数据库smp_maint_2_restore,然后执行如下命令:mongorestore -h 192.168.1.18:27017 -d smp_maint_2_restore --dir E:\data\home\momgodump\smp_maint_2

gorestore 最后的一个参数,设置备份数据所在位置,例如:/data/backup/admin

你不能同时指定
和 --dir 选项,–dir也可以设置备份目录。

–dir:

指定备份的目录

你不能同时指定

和 --dir 选项

新建mongodb数据库smp_maint_2_restore,然后执行如下命令:

mongorestore -h 192.168.1.18:27017 -d smp_maint_2_restore --dir E:\data\home\momgodump\smp_maint_2

``

转载地址:http://shxxi.baihongyu.com/

你可能感兴趣的文章
Linux中获取CPU数目确定多线程数
查看>>
C/C++ windows 获取CPU数
查看>>
最好用的Hash
查看>>
srs提供的rtmp客户端srs-librtmp
查看>>
使用c-ares进行DNS域名解析
查看>>
Linux永久后台启动程序nohup commmand &
查看>>
HTTP请求支持keep-alive
查看>>
autogen.sh 的使用
查看>>
ios使用VoIP推送通知
查看>>
HTTP之put/post请求头中的Expect:100-continue
查看>>
通过https发请求时出现“curle_out_of_memory”错误
查看>>
Linux编译libcurl依赖openssl和cares
查看>>
Excel中按照数字和汉字列对所有列排序
查看>>
go语言实现两个goroutine交替执行打印数字和字母,效果:12AB34CD56EF...
查看>>
Go语言websocket (一)
查看>>
多房间聊天室 websocket(一)
查看>>
go语言多房间聊天室websocket(二)
查看>>
Golang实现输入两个日期时间转换为周时间
查看>>
2002 - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13 "权限不够")
查看>>
k8s外部访问的几种方法实践
查看>>