标签存档: shell

Linux自动备份网站文件和数据库上传FTP

因为A大的关系。导致数据丢失了不少。花了2个晚上写了个脚本备份数据。参考了hostloc上不少前辈的脚本。

为了安全,不使用root作为数据库用户备份数据。用root登录mysql server后,创建一个专门的备份用户 (创建用户名backup密码backup的mysql登录帐号,并且这个帐号的权限只有select和lock权限,即mysqldump备份的时候最低的权限要求)

grant select,lock tables on *.* to 'bakup'@'localhost' identified by 'bakup';
flush privileges ;

ftp空间问题。我使用了godaddy域名赠送的免费10g ftp空间

  1. 登录godaddy,左上角登录
  2. 登录后,点击左上角 my account. 或者打开 https://mya.godaddy.com/default.aspx?ci=60016
  3. 出现一个列表。如下图。选择WEB HOSTING。下面有个free plan 就是赠送的空间路。点申请。大概需要30分钟时间开通

godaddy-free-host

脚本如下:

#!/bin/bash
dbname="wordpress zjxhjs" #需要备份的数据库列表,多个数据库用空格分割
dbuser="backup" #备份用户名
dbpass="*******" #备份用户密码

webs="fredzhu.com demo.fredzhu.com" #需要备份的网站列表,多个网站用空格分割
webspath="/home/xxxxx/wwwroot" #网站列表所在的根路径

output="/home/xxxxx/bak/tmp" # 临时备份的目录,备份文件在这里打包压缩。

ftphost="72.167.232.101" #ftp地址
ftpuser="xxxxx" #ftp用户名
ftppass="xxxxx" #ftp密码
ftpbackup=/vps_backup #ftp上备份目录

#-------------------------don't modify follow---------------------
date=$(date '+%Y%m%d%H')

tmp_db_output=$output/db
tmp_web_output=$output/web
log_file=$output/info.log
backup_file=backup"_"$date.tar
old_backup_file=backup_$(date -d -3day +%Y%m%d%H).tar

echo "---------------------Auto Bakup Script-------------------" >> $log_file

echo "[$date] clean backup" >> $log_file
echo "	clean tmp backup" >> $log_file
rm -rf $tmp_db_output $tmp_web_output
echo "	clean old local backup file:$old_backup_file" >> $log_file
rm -rf $output/../$old_backup_file

echo "[$date]mysql starting bakup" >> $log_file
if [ ! -d $tmp_db_output ];
then
	echo "  create db temp path[$tmp_db_output]" >> $log_file
	mkdir $tmp_db_output
fi

for i in $dbname
do
	echo "  bakup db $i" >> $log_file
	mysqldump -u$dbuser -p$dbpass -hlocalhost $i|gzip > $tmp_db_output/$i"_"$date.sql.gz
done

echo "[$date] web starting bakup" >> $log_file
if [ ! -d $tmp_web_output ];
then
	echo "  create web temp path[$tmp_web_output]" >> $log_file
	mkdir $tmp_web_output
fi

for i in $webs
do
	echo "  bakup web $i" >> $log_file
	tar zcf $tmp_web_output/$i"_"$date.tar.gz -C $webspath $i >> $log_file
done

echo "[$date] package files" >> $log_file
tar cvf $output/$backup_file $output/* >> $log_file

echo "[$date] movie local backup" >> $log_file
if [ -f $output/$backup_file];
then
	echo "  backupfile already exist,del it" >> $log_file
	rm -rf $output/$backup_file	
fi
mv $output/$backup_file $output/../

echo "[$date] upload to ftp servier" >> $log_file
ftp -v -n $ftphost << END
user $ftpuser $ftppass
type binay
passive on
cd $ftpbackup
delete $old_backup_file
put $output/../$backup_file $ftpbackup/$backup_file
bye
END