本篇为备份篇。

因为装的东西不多,所以需要备份的只有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 -it 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 # 判断新的压缩文件是否已存在
    if [ -e "${NewFile}" ]; then
    echo "[${NewFile}] The Backup File is exists, Can't Backup" >> ${LogFile}
    else
    # 生成临时备份文件
    docker exec -it 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
  4. 执行脚本

    # 这是格式
    ./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}
    # 需要备份的目录不存在则退出
    [ ! -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
  2. 执行脚本

    ./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
  2. 使用

    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:需要执行的命令

从零开始在centos搭建博客(二)的更多相关文章

  1. 从零开始在centos搭建博客(一)

    本篇为安装篇. 基于centos 7.9,大部分东西使用docker安装. 软件列表:docker + mysql + wordpress 安装docker yum install -y yum-ut ...

  2. hexo零基础搭建博客系列(一)

    关于其他搭建 [hexo4快速搭建博客(二)更换主题](https://blog.csdn.net/weixin_41800884/article/details/103750634)[hexo4快速 ...

  3. hexo搭建博客系列(三)美化主题

    文章目录 其他搭建 1. 添加博客图标 2. 鼠标点击特效(二选一) 2.1 红心特效 2.2 爆炸烟花 3. 设置头像 4. 侧边栏社交小图标设置 5. 文章末尾的标签图标修改 6. 访问量统计 7 ...

  4. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  5. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  6. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  7. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置

    前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...

  8. flask tutorial => make a blog :) flask 搭建博客系统从零开始!

    please follow the tutorial from the official site :) http://flask.pocoo.org/docs/ You could download ...

  9. Django搭建博客网站(二)

    Django搭建自己的博客网站(二) 这里主要讲构建系统数据库Model. Django搭建博客网站(一) model 目前就只提供一个文章model和一个文章分类标签model,在post/mode ...

随机推荐

  1. nova服务的基本使用

    创建flavor类型 [root@controller ~]# openstack help flavor create usage: openstack flavor create [-h] [-f ...

  2. 进程线程协程补充、docker-compose一键部署项目、搭建代理池、requests超时设置、认证设置、异常处理、上传文件

    今日内容概要 补充:进程,线程,协程 docker-compose一键部署演示 搭建代理池 requests超时设置 requests认证设置 requests异常处理 requests上传文件 内容 ...

  3. html单页面通过cdn引入element-ui组件样式不显示问题

    html单页面通过cdn引入element-ui组件样式不显示问题 必须先引入vue,再通过cdn引入element,否则element-ui组件与样式无效. <!DOCTYPE html> ...

  4. 微信H5页面唤醒APP并传参跳转uniapp

    主要实现是利用微信内置浏览器支持的<wx-open-launch-app>开放标签可以让你的H5网页拉起APP   在链接https://developers.weixin.qq.com/ ...

  5. 一文带你读懂 Hbase 的架构组成

    hi,大家好,我是大D.今天咱们继续深挖一下 HBase 的架构组成. Hbase 作为 NoSQL 数据库的代表,属于三驾马车之一 BigTable 的对应实现,HBase 的出现很好地弥补了大数据 ...

  6. 性能测试:tcpcopy

    简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去. 曾经应用于网易的广告投放系统,urs系统,nginx hmux协议等系统,避免了上线带来的 ...

  7. 日期和时间API - 读《Java 8实战》

    日期与时间 LocalDate 创建一个LocalDate对象并读取其值 // 根据年月日创建日期 LocalDate date1 = LocalDate.of(2014, 3, 18); // 读取 ...

  8. MySQL执行计划explain

    一.简介 分析查询慢的原因,在查询语句前加explain即可.如: 二.输出格式 2.0 测试数据 # 表user_info CREATE TABLE `user_info` ( `id` bigin ...

  9. 一些GIT操作的技巧

    一.git stash 我们有时会遇到这样的情况,正在分支a上开发一半,然后分支b上发现Bug,需要马上处理.这时候分支a上的修改怎么办呢,git add 是不行的,有的git客户端版本会提示还有ad ...

  10. 104_Power Query 数据库条件查询

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载 1.应用场景 底层数据在数据库(sql server数据库,其他数据库同理,下文不再说明.)中,Excel中有查询的字段,需要 ...