从零开始在centos搭建博客(二)

本篇为备份篇。

因为装的东西不多,所以需要备份的只有mysql和wordpress的文件夹。

备份mysql

  1. mysql备份命令 使用mysqldump命令,格式如下:
这是格式
mysqldump -u${username} -p${dbrootpwd} --databases ${DBname} > ${DumpFile}
这是例子
mysqldump -uroot -proot --databases wordpress > /home/backup.sql

使用${}代表的是变量,请自行替换 username:数据库用户名 dbrootpwd:数据库用户的密码 DBname:需要备份的数据库 DumpFile:输出的文件路径+文件名
2. 搭配docker使用 因为mysql使用的是docker安装的,服务器所在的Centos中是没有mysql的相关命令的,执行命令需要到mysql的docker容器中。

这是格式
docker exec -it ${container} ${sqlCmd}
这是例子
docker exec -it 123321 mysqldump -uroot -proot --databases wordpress > /home/backup.sql

使用${}代表的是变量,请自行替换 container:docker容器的别名或id sqlCmd:需要执行的备份命令
3. 备份脚本 此脚本是基于oneinstack修改的 逻辑是:
– mysqldump生成xxx.sql文件
– 压缩xxx.sql为xxx.tgz
– 删除xxx.sql和旧的压缩文件 新建db_bk.sh文件,以下是内容:

#!/bin/bash
引用同目录下的options.conf文件
. ./options.conf

传递参数
DBname=$1
日志
LogFile=${backup_dir}/db.log
临时文件
DumpFile=${backup_dir}/DB_${DBname}_$(date +%Y%m%d_%H).sql
新的压缩文件
NewFile=${backup_dir}/DB_${DBname}_$(date +%Y%m%d_%H).tgz
旧的压缩文件
OldFile=${backup_dir}/DB_${DBname}_$(date +%Y%m%d --date="${expired_days} days ago")*.tgz
备份目录不存在则创建
[ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}

使用mysql的show databases判断数据库是否存在
DB_tmp=docker exec mysql mysql -uroot -p${dbrootpwd} -e "show databases\G" | grep ${DBname}
[ -z "${DB_tmp}" ] && { echo "[${DBname}] not exist" >> ${LogFile} ;  exit 1 ; }

删除旧的压缩文件
if [ -n "ls ${OldFile} 2>/dev/null" ]; then
  rm -f ${OldFile}
  echo "[${OldFile}] Delete Old File Success" >> ${LogFile}
else
  echo "[${OldFile}] Delete Old Backup File" >> ${LogFile}
fi

确定新的压缩文件是否已存在<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Determine whether the new compressed file already exists</font>*</details>
if [ -e "${NewFile}" ]; then
  echo "[${NewFile}] The Backup File is exists, Can't Backup" >> ${LogFile}
else
    # 生成临时备份文件
  docker exec mysql mysqldump -uroot -p${dbrootpwd} --databases ${DBname} > ${DumpFile}
  # 进入到备份目录
    pushd ${backup_dir} > /dev/null
    # 压缩临时文件
  tar czf ${NewFile} ${DumpFile##*/} >> ${LogFile} 2>&1
    # 输出日志
  echo "[${NewFile}] Backup success ">> ${LogFile}
    # 删除临时文件
  rm -f ${DumpFile}
    # 退回之前的目录
  popd > /dev/null
fi

以下是options.conf文件的部分内容

mysql相关
backup_dir=/home/backup
dbrootpwd='root'
expired_days=5
  1. 执行脚本
这是格式
./db_bk.sh #{DBname}
这是例子,数据库名为wordpress
./db_bk.sh wordpress

备份wordpress

  1. 编写脚本 备份wordpress其实只需要备份wordpress所在的html目录即可。 所以脚本也很简单,就是压缩相关目录,删除旧的压缩文件。 新建website_bk.sh文件,以下是内容:
#!/bin/bash

. ./options.conf

变量定义
WebSite=$1
LogFile=${backup_dir}/web.log
NewFile=${backup_dir}/Web_${WebSite}_$(date +%Y%m%d_%H).tgz
OldFile=${backup_dir}/Web_${WebSite}_$(date +%Y%m%d --date="${expired_days} days ago")*.tgz
备份文件夹不存在则创建
[ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
如果需要备份的目录不存在,则退出<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Exit if the directory that needs to be backed up does not exist</font>*</details>
[ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist" >> ${LogFile} ;  exit 1 ; }

判断大小,如果小于1024m
if [ du -sm "${wwwroot_dir}/${WebSite}" | awk '{print $1}' -lt 1024 ]; then
  if [ -n "ls ${OldFile} 2>/dev/null" ]; then
    rm -f ${OldFile}
    echo "[${OldFile}] Delete Old File Success" >> ${LogFile}
  else
    echo "[${OldFile}] Delete Old Backup File" >> ${LogFile}
  fi

    # 如果文件已存在,则不重复备份
  if [ -e "${NewFile}" ]; then
    echo "[${NewFile}] The Backup File is exists, Can't Backup" >> ${LogFile}
  else
    pushd ${wwwroot_dir} > /dev/null
    tar czf ${NewFile} ./${WebSite} >> ${LogFile} 2>&1
    echo "[${NewFile}] Backup success ">> ${LogFile}
    popd > /dev/null
  fi
else
  rsync -crazP --delete ${wwwroot_dir}/${WebSite} ${backup_dir}
fi

以下是options.conf文件的部分内容

backup_dir=/home/backup
wwwroot_dir=/home/docker-workspace/wordpress
website_name=html
expired_days=5
  1. 执行脚本
./website_bk.sh html

备份OSS

使用的是ossutil

以下是相关命令:

上传文件
./ossutil64 cp -f file_url cloud_url
删除命令
./ossutil64 rm oss://bucketname[/prefix]

定时执行

备份的脚本需要定时执行,这里用的是crontab。

  1. 安装 一般centos都有安装crontab,检查是否安装:
rpm -qa | grep crontab

安装命令:

yum -y install vixie-cronyum -y install crontabs
  1. 使用 crontab -e进入编辑页或者vi /etc/crontab 区别在于:前者配置是针对当前用户的,后者是针对系统的 添加执行脚本的定时任务:
这是格式
${cron} ${cmd}
这是例子
0 0 * * 1 /home/xxx.sh > /dev/null 2>&1

使用${}代表的是变量,请自行替换 cron:cron表达式,注意,crontab所使用的cron表达式,与java使用的cron有所区别,是不包含秒的,看 /etc/crontab的注释就知道了 cmd:需要执行的命令

Original: https://www.cnblogs.com/konghuanxi/p/16250069.html
Author: 王谷雨
Title: 从零开始在centos搭建博客(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523660/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球