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