最近Linux搞得比较多,之前有个精简版的VPS服务器,今天又拿过来测试,主要是定期为上面的网站做个备份,大概看了一下,需要备份的分别有两个地方:1. 网站的主目录;2. MySQL数据库。于是想搞个定时发送备份文件到指定邮箱的做法。Linux刚上手,也不是很熟练,参考了一些命令,以及前辈们的备份做法,硬着头皮写了Bash Shell脚本,初步测试下来基本满足了要求,在这里分享给大家参考,不过建议大家使用前在实验环境下测试确保正常,如果因为潜在问题造成损失我可不负责哦:-)当然对于我这种新手而言,这样的脚本难免会有Bug,希望高手不吝指出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #!/bin/bash # Author: wangye # For more information please visit: # http://wangye.org/ # 请在使用本脚本前做好测试工作,脚本功能仅供参考, # 对于可能的潜在问题造成损失,本人不承担责任。 MYSQL_USERNAME="mysql-username" MYSQL_PASSWORD="mysql-password" # 下面这行指示接收备份文件的电子邮件地址 BACKUP_RECEVIER="[email protected]" BACKUP_FILENAME="/var/sample-site" # 需要备份的目录 BACKUP_DBNAME="sample" # 需要备份的数据库名称 BACKUP_PREFIX="backup_" # 备份文件的前缀 # 下面一些命令路径可以通过whereis获取 MYSQLDUMP_PATH="/usr/bin" # mysqldump 命令所在的路径 TARCOMPRESSOR_PATH="/bin" # tar 命令所在的路径 RM_PATH="/bin" # rm 命令所在的路径 MUTTMAIL_PATH="/usr/bin" # mutt 命令所在的路径 TEMP_PATH="/tmp" # 临时目录 # 产生临时名称形如 backup_20120221 名称 make_backup_name() { TEMPNAME=${BACKUP_PREFIX}$(date +"%Y%m%d") } # 产生临时备份目录 make_backup_dir() { make_backup_name TEMPDIR=${TEMP_PATH}/$? mkdir -m 777 -p $TEMPDIR } backup_files() { ${TARCOMPRESSOR_PATH}/tar -zcvf \ ${TEMP_PATH}/${TEMPNAME}.tar.gz ${BACKUP_FILENAME} } backup_databases() { local EXPORTDIR=$1 ${MYSQLDUMP_PATH}/mysqldump -u${MYSQL_USERNAME} \ -p${MYSQL_PASSWORD} \ ${BACKUP_DBNAME} >${EXPORTDIR}/${BACKUP_DBNAME}.sql ${TARCOMPRESSOR_PATH}/tar -zcvf \ ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz ${EXPORTDIR} } send_byemail() { echo "**IMPORTANT BACKUP** Hi! :-)\n\n$(uname -a)"| \ $MUTTMAIL_PATH/mutt -s "** System Backup$(date +%Y-%m-%d)" \ -a ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz \ ${TEMP_PATH}/${TEMPNAME}.tar.gz -- \ ${BACKUP_RECEVIER} } # 清除产生的临时文件(使用了rm -rf怕怕中,不过目标路径正确就OK啦) cleanup() { $RM_PATH/rm -rf $TEMPDIR $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}.tar.gz } main() { make_backup_dir backup_databases $TEMPDIR backup_files send_byemail cleanup } main exit 0 |