用 shell 脚本备份服务器

出于安全考虑,服务器需要定期进行备份,对于 Linux 我们可以直接使用 sh 脚本备份

简单的文件备份脚本

(本例将 /website 备份到 /backup/ 下,名称为当天的年月日.tar.gz,并删除 30 天以前的备份)

#!/bin/sh
nowDate=`date +%Y%m%d`
backupDir=/backup/
dbDir=/website
logFile=/var/log/backup.log

oldBackupFile=$backupDir`date -d '-30 days' +%Y%m%d`.tar.gz
backupFile=${backupDir}${nowDate}.tar.gz

echo "--------------------------------------" >> $logFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile

rm -f $oldBackupFile  >> $logFile 2>&1
echo "delete old backup file $oldBackupFile">> $logFile

tar zcpf $backupFile $dbDir  >> $logFile 2>&1
echo "backup dir $dbDir as new file $backupFile" >> $logFile

简单的 Mysql 备份脚本

(本例将 database123 数据库备份到 /backup/database123/ 下,名称为当天的年月日.tar.gz,并删除 30 天以前的备份)

#!/bin/sh
nowDate=`date +%Y%m%d`
backupDir=/backup/database123/
Tempdata=/backup/tmp/
logFile=/var/log/sql-backup.log
mysqluser='username'
mysqlpasswd='123456789'
mysqldb='database123'

oldBackupFile=$backupDir`date -d '-30 days' +%Y%m%d`.tar.gz
backupFile=${backupDir}${nowDate}_sql.tar.gz

echo "--------------------------------------" >> $logFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile

mkdir $Tempdata >> $logFile 2>&1
rm -f $oldBackupFile >> $logFile 2>&1
echo "delete old backup file $oldBackupFile">> $logFile

mysqldump -u ${mysqluser} -p${mysqlpasswd} ${mysqldb} > $Tempdata${mysqldb}.sql
tar zcpf $backupFile ${Tempdata}${mysqldb}.sql >> $logFile 2>&1
rm -f ${Tempdata}${mysqldb}.sql >> $logFile 2>&1
rmdir $Tempdata >> $logFile 2>&1
echo "backup database $mysqldb as new file $backupFile" >> $logFile

简单说明,第一句的 #!/bin/sh 是必不可少的
通常第一句的声明使用两种,#!/bin/sh#!/bin/bash
前者代表了使用 sh 命令,后者使用 bash 命令
主要区别在于 sh 命令遇到执行失败则全部停止,bash 命令无视错误则继续执行

而后,例如 nowDate=date +%Y%m%d 的命令,都是将等号右侧的值赋予左侧,调用时使用 $nowDate 调用,如果需要在后面添加字符,则使用 ${nowDate} 将其区分开来

点赞