Docker----基于docker搭建mongodb数据库以及备份脚本

1.docker启动命令:

docker run -d --name mongo --restart=always -p 27017:27017 -v /qj/mongo/conf/mongod.conf:/etc/mongod.conf:ro -v /qj/mongo/data/db:/data/db:rw -v /qj/mongo/log/mongod.log:/var/log/mongodb/mongod.log  -v /etc/localtime:/etc/localtime:ro -v /qj/mongo/mongod.log:/data/log/mongod.log:rw registry.cn-beijing.aliyuncs.com/qianjia_public/mongo:4.0.5 mongod -f /etc/mongod.conf --auth

最后的 -v /qj/mongo/mongod.log:/data/log/mongod.log:rw是因为搭建时会报错,无法打开/data/log/mongod.log文件,所以我们在本地进行映射时,将文件映射路径权限变成777最高权限,

chmon 777 /qj/mongo/mongod.log 

这时再启动时就不会报错了,也可以直接将log文件夹直接变成777属性。

2.mongodb数据库的操作命令

1.使用docker搭建的数据库进入方法
指定mongo用户admin

docker exec -it mongo mongo admin
#或者也可以进入容器后进行用户登录
docker exec -it mongo bash
mongo
mongo -u admin -p admin

2.用户授权验证
需要切换到指定库进行验证,第一个admin是用户名,第二个是用户密码,当返回值是“1”时,代表验证成功,否则失败

use admin
db.auth("admin","admin")

3.创建用户,并指定role权限

db.createUser({ user: 'admin', pwd: 'admin', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

4.创建数据库

#有就切换数据库,没有就创建数据库
use  admin

5.查看全局所有账户

db.system.users.find().pretty()

6.查看当前库下的账户

show users
#查看数据库
show dbs

7.数据插入

 db.runoob.insert({"name":"ydt"})

8.删除用户

use mydb
db.dropUser('mydbuser')

9.删除当前使用数据库

 db.dropDatabase();

3.mongo数据库的备份

1.数据库备份:

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径

事例:

mongodump -h 127.0.0.1 -u admin -p admin  -d blog -o /home/timeless/桌面/mongodump --authenticationDatabase admin
  • 如果没有用户谁,可以去掉-u和-p
  • 如果导出本机的数据库,可以去掉-h
  • 如果是默认端口,可以去掉–port
  • 如果想导出所有数据库,可以去掉-d
  • 也可以指定导出的集合 -collection
    注意 --authenticationDatabase 参数制定认证数据库 否则会提示错误:
Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.   //提示认证失败

2.还原数据库实例

mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径

该也可以指定要恢复的集合 -collection
参数或名:

  • -h: MongoDB所在服务器地址
  • -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
  • -dir: 备份数据所在位置,例如:/home/mongodump/itcast/
  • -drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
mongorestore -h 127.0.0.1 -u admin -p admin -d blog  --drop /home/timeless/桌面/mongodump/blog --authenticationDatabase admin  

3.导出工具:mongoexport
1、概念:
mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
2、语法:
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
参数说明:

  • -d :数据库名

  • -c :collection名

  • -o :输出的文件名

  • -type : 输出的格式,默认为json

  • -f :输出的字段,如果-type为csv,则需要加上-f “字段名”

    3、示例:

sudo mongoexport -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json -f  "_id,user_id,user_name,age,status"

2、数据导入:mongoimport
1、语法:

mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
    参数说明:
  • -d :数据库名
  • -c :collection名
  • -type :导入的格式默认json
  • -f :导入的字段名
  • -headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
  • -file :要导入的文件

2、示例:

sudo mongoimport -d mongotest -c users --file /home/mongodump/articles.json --type json

4.mongodb数据库备份脚本

#!/bin/bash 

DB=data
USER=admin
PASS=admin
DAYS=15

#docker备份目录
OUT_DIR=/data/db/backup
#本地备份存放路径 
TAR_DIR=/docker/mongodb/data/db/backup
#获取当前系统时间
DATE=`date +%Y_%m_%d`

set -e

#判断备份命令文件、备份目录是否存在
if [ ! -d "$TAR_DIR" ];then
	echo "创建备份文件目录!"
	mkdir -p $TAR_DIR
else
	echo "开始备份!"
fi

echo "备份的路径是:$TAR_DIR/$DATE.tar.gz"

#cd $TAR_DIR && rm -rf *
#备份单个数据库
#docker exec -it mongo $DUMP -u $DB_USER -p $DB_PASS -d $DB -o $OUT_DIR/$DATE

#备份全部数据库
docker exec -it mongo mongodump -u $USER -p $PASS -o $OUT_DIR/$DATE
#docker exec -it mongo mongodump -u $USER -p $PASS --authenticationDatabase "admin" -o $OUT_DIR/$DATE

#判断mongo备份是否成功
if [ $? -eq 0 ]; then
	echo "mongo数据备份成功"
else
	echo "mongo数据备份失败"
fi

#压缩为.tar.gz格式
cd $TAR_DIR 
tar -zcvf $DATE.tar.gz $DATE

#删除除.tat.gz文件之外所有文件
#rm -rf `ls | grep -v "tar.gz"`
rm -rf $DATE

#删除15天前的备份文件
find $TAR_DIR/ -mtime +$DAYS -delete
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值