服务器、vps,难免会遇到各种问题,丢失数据,则必然痛心疾首啊!!!
数据无价,so建议养成定期备份的习惯!而且,要多备份几份,本地、网盘、FTP空间等,都多保存几份!
这里,就为大家带来一个linux下,利用lftp作为上传方式的shell脚本,配合系统crontab定时计划任务实现每天自动备份网站数据,并上传到FTP空间!
脚本内容如下:
!/bin/bash
建议使用root账户登录执行本脚本
赋予脚本执行权限 chmod +x BackupToFtp.sh
修改相关账户和路径配置
开始
MYSQL_USER=root #mysql用户名
MYSQL_PASS=123456 #mysql密码
FTP_USER=ftpuser #ftp用户名
FTP_PASS=123456 #ftp密码
FTP_IP=123.123.123.123 #ftp地址
FTP_backup=backup #ftp上存放备份文件的目录,请提前自己在ftp空间上创建
WEB_DATA=/home/www #要备份的网站数据目录
MYSQL_PATH=/usr/local/mysql #MYSQL安装路径
DBNAME=dbname #要备份的数据库名称
LOCALbackup_path=/home/backup #本地备份文件存放路径
结束
安装FTP LFTP命令工具
echo "#---------------------------------------------------------------------#"
echo "正在ftp lftp客户端工具...."
echo "默认适用CentOS,Debian等系统请先修改本脚本相应位置命令"
echo "若已经安装,请忽略即可"
echo "installing Ftp Lftp...."
echo "#---------------------------------------------------------------------#"
yum install -y ftp lftp
apt-get install-y ftp lftp
设置数据库备份文件的名字和旧数据库备份文件的名字(旧:默认为5天前的)
DataBakName=Data_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
设置网站数据备份文件的名字和旧网站数据备份文件的名字(旧:默认为5天前的)
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz
删除本地5天前的备份数据
echo "#---------------------------------------------------------------------#"
echo "自动删除本地5天前的备份数据文件...."
echo "Auto delete local backup data files 5 days ago...."
rm -rf $LOCALbackup_path/Data_$(date -d -5day +"%Y%m%d").tar.gz $LOCALbackup_path/Web_$(date -d -5day +"%Y%m%d").tar.gz
cd $LOCALbackup_path
导出需要备份的数据库为数据库SQL格式
echo "#---------------------------------------------------------------------#"
echo "正在导出需要备份的 $DBNAME 数据库sql备份文件...."
echo "Exporting you set database:$DBNAME to SQL file...."
$MYSQL_PATH/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS $DBNAME > $LOCALbackup_path/$DBNAME.sql
压缩数据库文件并删除sql文件
echo "正在压缩打包数据库sql备份文件...."
echo "Tar the Database SQL file to tar.gz And delete SQL file...."
tar zvcf $LOCALbackup_path/$DataBakName $LOCALbackup_path/*.sql
rm -rf $LOCALbackup_path/*.sql
压缩网站数据
echo "#---------------------------------------------------------------------#"
echo "正在压缩打包网站程序文件...."
echo "Tar the WebData file to tar.gz...."
tar zvcf $LOCALbackup_path/$WebBakName $WEB_DATA
cd $WEB_DATA
tar zvcf $LOCALbackup_path/$WebBakName *
上传到FTP空间
echo "#---------------------------------------------------------------------#"
echo "数据打包完成,开始登录FTP空间...."
echo "Start to login to FTP...."
先进入备份文件路径
cd $LOCALbackup_path
默认方式:镜像同步,与下面的单个方式任选其一
------------------------------------------------------------------
lftp -u $FTP_USER,$FTP_PASS -e "mirror -R --only-newer $LOCALbackup_path $FTP_backup" $FTP_IP << EOF
bye
EOF
------------------------------------------------------------------
单个文件上传方式,请取消横线内的注释符#并注释掉前面的默认方式
------------------------------------------------------------------
lftp -u $FTP_USER,$FTP_PASS $FTP_IP << EOF
lftp << EOF
open ftp://$FTP_USER:$FTP_PASS@$FTP_IP
cd $FTP_backup
echo "正在上传数据库备份文件...."
echo "Uploading Database file...."
put $DataBakName
echo "正在上传网站程序备份文件...."
echo "Uploading WebData file...."
put $WebBakName
bye
EOF
------------------------------------------------------------------
echo "#---------------------------------------------------------------------#"
echo "上传所有备份文件完成..."
echo "Upload all backup files complete..."
echo "请登录FTP空间查看!"
echo "Please login to the FTP check!"
echo "#---------------------------------------------------------------------#"
脚本内容结束
emmm...请原谅博主英语比较差,大部分都是机翻过来的,懒得校正了!
配合系统crontab定时计划任务实现每天自动备份
命令:crontab -e
添加定时计划内容:00 00 * /BackupToFtp.sh
(其中00 00为时间,格式:分/小时,可自行修改,例如:30 23,就是每天23.30运行这个脚本,/BackupToFtp.sh为脚本文件存放路径)
结束语就是,没有结束语!希望能帮到有需要的人吧!就是这样!