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

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

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

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

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

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

环境

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 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • 备份
    13 引用 • 18 回帖
  • 邮件
    17 引用 • 39 回帖

相关帖子

欢迎来到这里!

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

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