8 月 26 2012
用邮箱备份VPS的数据 超简易教程
本文共被喵星人侦察过17,104次。。。最近入了一个VPS玩儿,虽然没有证据表明这个服务商不靠谱,可是数据无价啊。。。所以自己备份还是很有必要的。原来都用的cPanel的虚拟主机,也有一个cPanel自动备份的脚本,一直用着也挺方便的。但是现在用的VPS,所有的东西都要自己动手。别和我说买个cPanel授权,没那么多闲钱。。。况且我还是很喜欢自己动手的。
上网上Google了好半天,找到的脚本基本上都是备份到FTP服务器的。本来我都打算就这样了,结果突然看见一个可以把文件备份到邮箱的脚本,突然想起QQ邮箱还有500多G的空间没有用,而且应该比我的FTP空间要稳定,最重要的是这个应该不会经常性的丢失数据也不用担心空间会过期哈。于是我马上拿下来脚本试了下,结果却发现不能用。。。这让我着实郁闷啊,难道就要浪费了这大好的免费备份空间么?OH当然不是,我决定自己动手稍微改造下这玩意儿~于是乎就有了成果~~
好了废话不多说,接下来就是脚本和使用方法。。。
首先你要有自己的VPS(这是废话)。。。我的是CENTOS 5.8 32BIT,别的么,应该也可以把?除了安装MUTT的时候不大一样以外,脚本什么的应该都是通用的。。。这个脚本会自动吧过大的文件分割成20M一个的小文件,这个大小可以自己改。。。不过不建议太大,因为要通过邮箱发送。。。
华丽的分割线。。。以下教程正文。。。
#后面标注的,蓝色的内容都是注释哦~ 有注释的行可以自己修改,别的最好就别动了呢~~如果你用VI命令在VPS上面直接创建脚本文件,请吧所有的中文注释去掉。。。当然你也可以在本地用Uedit之类的软件编辑好再上传到V。。。不要用记事本,否则脚本是不能运行的。。。因为Windows和Linux的换行符不一样~~
安装并简单配置mutt
yum -y install mutt sendmail
vi ~/.muttrc
# 添加以下内容。。。
set envelope_from=yes
set from=backup@yourdomain.com #设定发件人地址
set realname=”Backup” #设定发件人姓名
set use_from=yes
DataBackUP.sh
额刚才忘了说了,这个脚本分为两部分,一部分是备份数据,一部分是备份数据库和配置文件的。。。这一部分是备份网站数据用得。。。
你要是觉得麻烦可以用最后一个整合的脚本。。。
#!/bin/bash
str_time=$(date +”%Y-%m-%d”)
dir_back=/home/BackUP/
tar_file=${dir_back}backup-$str_time.tar
mail=”your@email.com” #在这里设定收件人地址
text=”Backup File $str_time” #这里可以设置邮件的标题 最后的$str_time不要动
#Script Modified by LazyCat http://iLazyCat.com
declare -a file
file[0]=/var/www/html #在这里设置需要备份的数据 每行可设置一个文件或文件夹 如果数量不够可以自己加
file[1]=/other-file #格式为 file[N]=路径 其中 N请按顺序填写
if [ -d $dir_back ]; then
rm -rf $dir_back
fi
mkdir -p $dir_back
list=${dir_back}file.lst
# files
for var in ${file[@]}; do
echo $var >> $list
done
tar zcPf $tar_file.gz `cat $list`
split -b 20m -a 3 -d $tar_file.gz ${dir_back}backup-$str_time.part.
#cat ${dir_back}backup-* > ${dir_back}backup.tar.gz
for var in ${dir_back}*.part.*; do
echo $text | mutt -a $var -s “$text” $mail
sleep 30s
done
ConfigBackUP.sh
这个脚本用来备份httpd 配置等。。。其实配置文件可以和上面的一起备份,这个备份主要管的是数据库。。。
#!/bin/bash
str_time=$(date +”%Y-%m-%d”)
sql_user=your_mysql_user #你的MySql用户名 推荐使用root用户,以免出现权限问题
sql_pass=your_mysql_pwd #上面的用户对应的密码
dir_back=/home/BackUp/
tar_file=${dir_back}config-$str_time.tar
tsk_list=${dir_back}crontab-$str_time
#Script Modified by LazyCat http://iLazyCat.com
mail=”your@email.com” #依旧在这里填写接收邮件的邮箱
text=”Config File $str_time” #还是在这里修改邮件的内容 最后的$str_time不要动
declare -a data
data[0]=mysql_db_1 #在这里填写要备份的数据库名 依旧一行一个 不够了自己加
data[1]=mysql_db_2
declare -a file
file[0]=/etc/httpd #这里填写要备份的配置文件 不够了自己加
file[1]=/etc/php.ini
file[2]=/etc/php.d
file[3]=/usr/lib/php/modulesif [ -d $dir_back ]; then
rm -rf $dir_back
fi
mkdir -p $dir_back
list=${dir_back}file.lst
# crontab
crontab -l >> $tsk_list
echo $tsk_list >> $list
# mysql
for var in ${data[@]}; do
sql_file=${dir_back}db-$var-$str_time.sql
mysqldump -u$sql_user -p$sql_pass $var > $sql_file
echo $sql_file >> $list
done
# files
for var in ${file[@]}; do
echo $var >> $list
done
tar zcPf $tar_file.gz `cat $list`
#split -b 20m -a 3 -d $tar_file.gz ${dir_back}backup-$str_time.part.
#cat ${dir_back}backup-* > ${dir_back}backup.tar.gz
for var in ${dir_back}config-*; do
echo $text | mutt -a $var -s “$text” $mail
sleep 30s
done
恩,上面两个就是脚本的所有内容了。。。在提醒下,没有蓝色注释的地方自己不要随便乱动。。。
这两个脚本修改好后上传到 文件夹里面,然后运行 (/path是你存放脚本的路径)
chmod +x /path/DataBackUP.sh
chmod +x /path/ConfigBackUP.sh
给脚本加上执行的权限~之后你可以分别运行一下这两个脚本看看是否正常工作。
sh /path/DataBackUP.sh
sh /path/ConfigBackUP.sh
运行命令后请稍等下,脚本运行完后会自己退出。如果邮箱里面收到了备份的文件(数据备份文件应该是邮件附件),并且内容没问题那说明这两个脚本正常工作。接下来要实现自动备份的话我们就需要用 crontab了。。。
crontab -e
点击键盘上的 I 进入编辑模式,然后粘贴以下内容
0 2 * * 2 /bin/bash /path/DataBackUP.sh
0 1 * * * /bin/bash /path/ConfigBackUP.sh
然后点击ESC键,退出编辑模式,输入 :wq 回车保存并退出。
这两行的含义分别是 每周二凌晨两点运行DataBackUP.sh备份网站数据,每天凌晨一点运行ConfigBackUP.sh备份网站配置和数据库。这是以VPS的时间为准的。。。当然你也可以自己修改运行的时间,这我就不介绍了,自己去搜索Crontab的用法吧。。。
最后,如果你不想数据和数据库分开备份的话,其实你可以用一个脚本就搞定了。其实也很简单,后面的ConfigBackUP.sh 你把里面的file里面除了需要备份的配置文件以外,把网站数据的文件夹放进来,就能达到一个脚本备份所有数据的作用了。
本文章搜集自网络,懒猫做了很多修改,也可以算半原创了?转载请注明出处。。。
三十岁
2012 年 08 月 29 日 @ 16:25
看了,太麻烦.期待有更简单的办法,小猫
大懒猫
2012 年 09 月 19 日 @ 13:39
其实吧。。。有一个整合了的,最近没时间弄。。。
周末发出来恩。
腾讯你这是要闹哪样。。。
2012 年 10 月 07 日 @ 10:22
[…] 额,前一段时间懒猫发了一个邮箱备份VPS的脚本,一直用的QQ邮箱,地方也大也够用了。谁知到今天查看邮箱突然看到这样一封邮件。。。 […]
Cat
2013 年 01 月 28 日 @ 23:27
@大懒猫 :TestTestTest…