实现思路:
- 验证当前使用系统的用户,root才可以执行脚本
- 备份操作打印日志需要时间戳信息
- 要备份的文件需要先在本地打包,zip压缩和tar压缩
- mkdir备份路径,每次保留最新版本
- 脚本执行失败,退出:exit 1
- $? != 0表示上一条指令执行失败
#!/bin/bash
user=`whoami`
if [ "$user" != "root" ];then
echo "you are not root,su root:"
su root
else
echo "check root successfully"
fi
today=`date +%Y-%m-%d-%H:%M:%S`
srcdir_sql=/root
srcdir_pic=/root/pic
localsrcdir=/root/backupsrcdir # not exist
remoteip=x.x.x.x
remotedir=/root/backupdesdir # not exist
backuplog=$srcdir_sql/mybackup.log # will touch a mybackup.log in srcdir_sql
echo $today"*****************************************">>$backuplog
echo $today"-info----------back up init success">>$backuplog
# tar local srcfile:sql and pic
# mkdir localsrcdir
if [ ! -d $localsrcdir ];then
mkdir $localsrcdir
if [ "$?" != 0 ];then
echo $today"-error----------fail to mkdir localsrcdir">>$backuplog
exit 1
else
echo $today"-info----------success to mkdir localsrcdir">>$backuplog
fi
else
rm -rf $localsrcdir
mkdir $localsrcdir
if [ "$?" != 0 ];then
echo $today"-error----------can not create localsrcdir,please try again">>$backuplog
exit 1
else
echo $today"-info----------rm and create localsrcdir success">>$backuplog
fi
fi
echo $today"-info----------start gzip pic file">>$backuplog
# zip pic file
piczip=piczip.zip
if [ ! -d $piczip ];then
zip -r piczip.zip $srcdir_pic
if [ "$?" != 0 ];then
echo $today"-error----------fail to zip pic">>$backuplog
exit 1
else
echo $today"-info----------success to zip pic">>$backuplog
fi
else
rm -rf $piczip
zip -r piczip.zip $srcdir_pic
fi
cp $srcdir_sql/shop.sql $localsrcdir
cp $piczip $localsrcdir
# tar localsrcdir
localsrcdir_tar=backup_sqlandpic.tar.gz
if [ ! -d $localsrcdir_tar ];then
tar -zcPf backup_sqlandpic.tar.gz $localsrcdir
if [ "$?" != 0 ];then
echo $today"-error----------fail to tar localsrcdir">>$backuplog
exit 1
else
echo $today"-info----------success to tar localsrcdir">>$backuplog
fi
else
rm -rf $localsrcdir_tar
tar -zcPf backup_sqlandpic.tar.gz $localsrcdir
fi
if [ ! -d $remotedir ];then
mkdir $remotedir
if [ "$?" != 0 ];then
echo $today"-error----------fail to mkdir remotedir">>$backuplog
exit 1
else
echo $today"-info----------success to mkdir remotedir">>$backuplog
fi
else
rm -rf $remotedir
mkdir $remotedir
fi
# send tar backup to remote
scp $localsrcdir_tar $remoteip:$remotedes
passwd="0000000000"
/usr/bin/expect<<-EOF
set timeout 3
spawn ssh root@x.x.x.x
expect{
"*password:"{send "$passwd\r"}
}
interact
expect eof
EOF
if [ "$?" != 0 ]
then
echo $today"-error----------scp backup file error" >> $backuplog
exit 1
fi
echo $today"-info----------scp bakup file successfully" >> $backuplog
echo "scp bakup file successfully"