建站系列 - - - - 备份网站数据
一个网站最重要的就是数据。备份数据就是重中之重的事。
网上搜索的一些常用的备份方法
本次使用备份系统文件并邮件发送
环境
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
如果发现 connection timed out ,并且自己已经开放了 25 端口,则看看自己所用的云服务器是否封禁 25 端口,以下是腾讯云的 25 端口解封。
-
发送邮件
- 命令行:
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
报错:
解决方法:
把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” 表示每两小时执行一次。同时正斜线可以和星号一起使用
参考:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于