建站系列 - - - - 备份网站数据

本贴最后更新于 2102 天前,其中的信息可能已经时移世异

建站系列 - - - - 备份网站数据

一个网站最重要的就是数据。备份数据就是重中之重的事。

网上搜索的一些常用的备份方法

本次使用备份系统文件并邮件发送

环境

CentOS 7.2

操作步骤

安装配置 mail

#安装
[root@mail etc]# yum install mail -y
#配置外部SMTP服务器
[root@mail etc]# vi /etc/mail.rc
# 在mail.rc文件底部添加:
set bsdcompat
set from=pan247989011@163.com
set smtp=smtp.163.com
set smtp-auth-user=pan247989011@163.com
set smtp-auth-password=123456   #目前大部分的外部邮件服务使用第三方客户端时,都需要使用授权码,这里的smtp-auth-password使用的就是授权码,而不是邮件帐号的密码。
set smtp-auth=login

# 测试发送
[root@mail etc]# echo hello word | mail -s 'title' 247989011@qq.com

1538015840723png

如果发现 connection timed out ,并且自己已经开放了 25 端口,则看看自己所用的云服务器是否封禁 25 端口,以下是腾讯云的 25 端口解封。

1538016156778png

  • 发送邮件

    • 命令行: mail -s "theme" addressee, 回车后输入内容按 Ctrl+D 发送邮件.
    • 管道符: echo "mail main content" | mail -s "theme" addressee
    • 文件内容作为邮件内容: mail -s "theme" addressee < /tmp/t.txt
    • 发送带附件的邮件:echo 'test' mail -s 'test' -a www.part1.rar 247989011@qq.com
    mail -eiIUdEFntBDNHRVv~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users
    
  • mail 查看与删除

 mail 命令进入
	 & p                  # 显示当前邮件
	 & 2                  # 显示标号为 2 的文件
	 & d 1-100        # 删除标号 1-100 的邮件,务必随后执行 q 命令,保存该操作,否则删不掉;
	 & q                  # 退出并保存命令操作内容
	 & z                  # 最新的 20 封邮件列表
	 & Z                  # 最后一页(20 封) 邮件列表

创建脚本

#/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin::/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin;
export PATH
export LANG=C
# 系统文件备份路径
basedir=/data/backup/daily
# 数据库信息
user=root
passwd=123456
# 安装rar
rar=$(rar | grep RAR | awk '{print $1}'| sed -n '1p')
if [ $? != 0 ];then
 rar=null
fi
sys_version=$(uname -m)
rar_path="/usr/local/rar"
if [ $rar != 'RAR' ];then
  if [ $sys_version == 'x86_64' ];then
    wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gz
    tar zxvf rarlinux-x64-4.2.0.tar.gz
    mv rar $rar_path
    cd $rar_path
    make
  else
    wget http://www.rarlab.com/rar/rarlinux-4.2.0.tar.gz
    tar zxvf rarlinux-4.2.0.tar.gz
    mv rar $rar_path
    cd $rar_path
    make
  fi
fi
# 定义mysql备份路径
mysql_db_bak=$basedir/mysql_db_bak/$(date +%F_%H%M)
if [ ! -d "$mysql_db_bak" ];
then
  mkdir -p $mysql_db_bak
fi
# 定义www备份路径
www_src_bak=$basedir/www_src_bak/$(date +%F_%H%M)
if [ ! -d "$www_src_bak" ];
then
  mkdir -p $www_src_bak
fi
# 备份文件
mysql_bak=$mysql_db_bak/solo.sql.gz
www_bak=$www_src_bak/www.rar
www_bak_part1=$www_src_bak/www.part1.rar
www_bak_part2=$www_src_bak/www.part2.rar
www_bak_part3=$www_src_bak/www.part3.rar
www_bak_part4=$www_src_bak/www.part4.rar
www_bak_part5=$www_src_bak/www.part5.rar
# 定义附件数组
all_bak=($mysql_bak $www_bak_part1 $www_bak_part2 $www_bak_part3 $www_bak_part4 $www_bak_part5)
# 邮件标题
mail_subject="p-qq_top_daily_backup"
# 邮件内容
mail_content_mysql="send MySQL_BAK at $(date +%F_%H%M)"
mail_content_www_p1="send WWW_SRC rarball part1 at $(date +%F_%H%M)"
mail_content_www_p2="send WWW_SRC rarball part2 at $(date +%F_%H%M)"
mail_content_www_p3="send WWW_SRC rarball part3 at $(date +%F_%H%M)"
mail_content_www_p4="send WWW_SRC rarball part4 at $(date +%F_%H%M)"
mail_content_www_p5="send WWW_SRC rarball part5 at $(date +%F_%H%M)"
# 定义内容数组
mail_content=("$mail_content_mysql" "$mail_content_www_p1" "$mail_content_www_p2" "$mail_content_www_p3" "$mail_content_www_p4" "$mail_content_www_p5")
# 邮件地址  TODO 修改接收邮箱
mail_address1="247989011@qq.com"
mail_address2="propitiousomen@hotmail.com"
# 1. 备份MySQL   TODO 修改数据库 库名
mysqldump -u $user -p$passwd --opt --skip-lock-tables --flush-logs --database solo | gzip > $mysql_bak
# 2.备份www源代码(分割若干个45m的tar包)
if [ -z $rar ];then
   exit 0
fi
cd /data
# TODO 修改待备份目录
rar a -v30000k $www_bak /data/soloupfile 


# 3.发送附件
echo "所有备份文件:${all_bak[@]}"
for((i=0; i!=${#all_bak[@]}; ++i))
{
if [ -f ${all_bak[i]} ]; then
  echo "备份文件:${all_bak[i]}"
  sleep 2
  echo ${mail_content[i]} | mail -s $mail_subject  -a ${all_bak[i]} $mail_address1 $mail_address2
else
  echo "wwwbak路径:$www_bak"
  sleep 2
  echo ${mail_content[i]} | mail -s $mail_subject -a $www_bak $mail_address1 $mail_address2 
  break
fi
}
# 4.清理临时文件
cat /dev/null > ~/sent
# 5.清理1个月前的备份文件
dir=/data/backup/daily/
find $dir -mtime +30 -type d -name "201*" -print |xargs -i rm -rf {} 2>/dev/null
# 6.释放系统缓存
echo 1 > /proc/sys/vm/drop_caches

执行脚本

sh /etc/rc.d/mail_to_bak_daily.sh

报错:

1537585508549png

解决方法:

把rar安装提取出来手动安装

设置定时任务

每天凌晨 0 点执行一次

[root@mail ~]# crontab -e
#在文件中添加一行,一行一个任务

   0 0 * * * /etc/rc.d/mail_to_back_daily.sh
   
#保存退出:wq
#重启定时器
[root@mail ~]# service crond restart

crontab 语法:minute hour day month week command 顺序:分 时 日 月 周 任务

  • minute: 表示分钟,可以是从 0 到 59 之间的任何整数。
  • hour:表示小时,可以是从 0 到 23 之间的任何整数。
  • day:表示日期,可以是从 1 到 31 之间的任何整数。
  • month:表示月份,可以是从 1 到 12 之间的任何整数。
  • week:表示星期几,可以是从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

特殊字符:

  • 星号(*):代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如 “2-6” 表示 “2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如 “0-23/2” 表示每两小时执行一次。同时正斜线可以和星号一起使用

参考:

centos7 利用 mailx 发送邮件

3 个备份系统文件并邮件发送的 Shell 脚本分享

  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖 • 1 关注
  • 备份
    12 引用 • 18 回帖
  • 邮件
    17 引用 • 39 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...