网络异常,图片无法展示
|
最近有个内部项目需要用到mongodb,去阿里云看了下最少的一年也要2000多,想着省钱的原则准备在服务器自己搭建个mongodb。
安装部署
准备
- 准备一台服务器,最好是centos的
- 在服务器上安装docker并启用
sudo yum install docker sudo systemctl start docker
安装运行
- 拉取对应mongodb的docker镜像,
sudo docker pull mongo:4.2
- 在宿主机中新建mongodb/ect(配置文件目录),mongodb/data(存储目录),mongodb/logs(日志),mongodb/backup(备份)
- 启动mongodb镜像并且将docker中mongodb的配置文件,数据存储目录,数据备份目录,日志目录挂载至宿主机方便后续维护处理。
sudo docker run -p $port:27017 --name $MONGONAME ****
- 为了方便后续的安装将整个流程整理为shell脚本,完整的脚本如下
- 功能一:自定义用户端口号输入
- 功能二:根据用户输入的端口初始化mongodb所需要的文件
- 功能三:获取mongodb v4.2版本镜像
- 功能四:创建mongodb容器并运行且容器的端口号映射至输入的端口号,并挂载相关的目录
read -p '请输端口号(只支持5位数字): ' -n 5 port echo "您输入的端口号为:$port" MONGONAME=mongo$port ROOTDIR=/home/workspace/mongodb$port # docker拉取mongodb 4.2版本镜像 sudo docker pull mongo:4.2 # docker运行镜像:配置文件挂载到宿主机 # 创建mongodb目录 if [ ! -d $ROOTDIR ];then sudo mkdir $ROOTDIR sudo mkdir $ROOTDIR/etc sudo cp ./mongodb.conf $ROOTDIR/etc # 创建mongodb数据存放目录 sudo mkdir $ROOTDIR/data # 创建mongodb数据备份目录 sudo mkdir $ROOTDIR/backup # 创建mongodb日志目录 sudo mkdir $ROOTDIR/logs else echo "$ROOTDIR目录已经存在,请检查目录!" exit fi # 创建容器 echo "容器名称:${MONGONAME}" sudo docker run -p $port:27017 --name $MONGONAME --restart=always -v $ROOTDIR/data:/data/db -v $ROOTDIR/etc:/data/conf -v $ROOTDIR/backup:/data/backup -v $ROOTDIR/logs:/data/log -d mongo:4.2 # 查看容器情况 echo "正在运行的容器如下:" sudo docker ps
数据备份
数据库是整个服务的重中之重,数据备份必不可少,数据丢失的问题是我们难以承受的。docker启动的mongodb和我们正常启用的区别不是很大,甚至是比我们正常启动更简单。但是用docker部署的mongodb我们需要使用docker来进行备份。具体分为以下几个步骤:
- 宿主机新建备份文件保存的目录
- 进入运行的mongo docker容器,在docker容器中备份数据
- 执行备份命令,将备份文件挂载到宿主机
- 将上述步骤整理到shell脚本,使用linux crontab定时启动该备份
# $1:容器id或容器名车 $2: 是否挂载备份文件夹,0未挂载 1挂载 # 日期 DATE=`date +%Y_%m_%d_%H_%M` echo "今天是:$DATE,开始执行数据备份" # 初始化宿主机备份文件目录 if [ ! -d /home/workspace/backup ];then echo "新建宿主机backup目录" sudo mkdir /home/workspace/backup sudo chmod 777 /home/workspace/backup else echo "宿主机backup目录已存在" fi # 进入运行的容器,执行备份命令并将文件保存至宿主机/home/workspace/backup/目录下 if [ "$2" = '1' ];then echo "开始执行mongodb备份,文件保存至/home/workspace/backup/$DATE.gz" sudo docker exec -it $1 sh -c 'mongodump --archive' > /home/workspace/backup/$DATE.gz else if [ "$2" = '2' ];then echo "开始执行mongodb恢复,文件保存至/home/workspace/backup/$3" sudo docker exec -it $1 sh -c 'mongostore --archive' > /home/workspace/backup/$3 fi exit
总结
数据库可以说是编程中的难点之一,在大型项目中数据基本都会有专门的DB来维护,程序员做的基本都是增删改查,但这并不意味着我们不用去学习他,要知道整个互联网中小型项目还是占比大部分的,我们要想在这个职业可持续发展,那了解当前主流数据库并掌握一门主流数据库是必不可少的。