MongoDB 数据库避免踩坑记录(宝塔面板)

前言

在宝塔里安装MongoDB,踩了几次坑,估记录一下。

设置用户账号密码登录

进入MongoDB安装目录,下面是宝塔面板的默认目录

cd /www/server/mongodb/bin

输入命令行mongo,进入mongodb环境

mongo

切换到 admin 数据库(这里可根据实际需求来)

use admin

admin设置用户密码

  • user: 用户名
  • pwd: 用户密码
  • roles: 用来设置用户的权限,比如读,读写 等等
db.createUser({user: 'root', pwd: 'admin_mima', roles: ['root']})

验证是否添加成功

db.auth('root', 'admin_mima') 

如果返回 '1’表示验证成功, 如果是 ‘0’ 表示验证失败。

设置其他库权限

例如:切换到demo

use demo

接下来为demo库添加一个用户,并且赋予权限

db.createUser({ user: 'cccc', pwd: 'demo_mima', roles: [{ role: 'readWrite', db: 'demo' }] })

这行代码意思是 创建一个cccc用户 给予读写权限 db表示该用户操作的数据库名。

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

一切搞定,重新开机mongodb,通过增加 --auth 开启安全登录

mongod --dbpath /www/server/mongodb/data --auth

如果是宝塔的话,可以直接修改配置文件,更加方便。

  • bindIp修改为 0.0.0.0 允许外网访问
  • authorization 修改为 enabled 开启认证

修改后记得重启一下MongoDB

Mongo 备份与还原

备份

可以使用shell脚本定时备份mongo数据库,宝塔面板可以借助定时任务来执行

# 在文件中编写如下内容
## 指定到你安装的Mongodb bin目录下的mongodump
dump=/www/server/mongodb/bin/mongodump
## 填写你创建dump_bak文件的绝对路径
out_dir=/www/wwwroot/yh.dev20.cn/dump_bak
## 填写你创建tar_bak文件的绝对路径
tar_dir=/www/wwwroot/yh.dev20.cn/tar_bak
## 记录备份时间
sysdate=`date +%Y%m%d_%H%M%S`
## 设置删除期限,删除30天前的备份
days=30
## 设置最终压缩的文件名称,带有日期
tar_bak="mondodb_bak_$sysdate.tar.gz"

if [ -d $out_dir ];then
  cd $out_dir
else
  ## "文件夹不存在"
  sudo mkdir -p $out_dir
  cd $out_dir
fi

if [ ! -d $tar_dir ];then
  ## "文件夹不存在"
  sudo mkdir -p $tar_dir
fi


# 删除之前的dump文件
sudo rm -rf $out_dir/*
# 创建新的文件夹存放dump文件
sudo mkdir -p $out_dir/$sysdate
# 导出127.0.0.1机器上的demo库的所有表到$out_dir/$sysdate文件夹
$dump -h 127.0.0.1 --port 27017 -u "用户名" -p "密码" --gzip --authenticationDatabase "认证数据库名" -d demo -o $out_dir/$sysdate
# 压缩$out_dir/$sysdate到目标文件夹
sudo tar -zcvf $tar_dir/$tar_bak $out_dir/$sysdate
# 删除指定期限钱的备份文件
sudo find $tar_dir/ -mtime +$days -delete

echo "===数据库: demo 备份完成==="
# 退出
exit

执行数据库备份那里($dump -h 127.0.0.1 --port 27017 -u "用户名" -p "密码" --gzip --authenticationDatabase "认证数据库名" -d demo -o $out_dir/$sysdate)根据自己需求来修改

  • --gzip 开启压缩输出
  • --authenticationDatabase 账号所认证的数据库

备份我们一般使用 mongodump 命令。常用的备份命令格式如下:

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

还原

MongoDB 数据库还原数据的命令格式如下:

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

需要注意的是,mongodump 和 mongorestore 两个命令操作文件的格式是和 json 类似的 bson 格式。

*文章引用:

  1. https://www.pianshen.com/article/476340478/
  2. https://huangliangbo.com/2303
  3. https://yooer.me/mongodb_backup_restore.html
posted @ 2022-01-29 11:34:00 kuye 阅读(8794) 评论(0)
发表评论
昵称
邮箱
网址