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

  • 从零开始在centos搭建博客(二)已关闭评论
  • 155 次浏览
  • A+
所属分类:linux技术
摘要

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

本篇为备份篇。

因为装的东西不多,所以需要备份的只有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 databasesG" | 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:需要执行的命令