用脚本实现服务器数据的自动备份
做一名好的服务器运维,必然要未雨绸缪,定期做好备份服务器数据的备份。备份工作属于重复性工作,在Linux上完全可以写个SHELL脚本完成备份工作的批处理,如果需要定期自动备份,还可以利用系统的计划任务来自动执行,实现完全无人工干预的自动备份,自动上传备份文件。
为了便于管理和传输,备份文件需要打包压缩,二者是通过SHELL脚本完成。因为批处理的SHELL脚本是自动备份的关键,这里小卓以实例着重说明。
一、文件夹打包压缩
可以直接使用tar命令加压缩参数,如:
- tar czf to-be-tar-and-zip-folder target.tgz
- 或者用bzip2
- tar cjf to-be-tar-and-zip-folder target.tar.bz2
也可以使用管道,加tar打包的内容作为压缩命令的参数:
- tar cf – to-be-tar-and-zip-folder | gzip > target.tgz
- 或者用bzip2
- tar cf- to-be-tar-and-zip-filter |bzip2 -z > target.tar.bz2
二、mysqldump直接生成压缩包
mysqldump生成的是.sql为后缀名的数据库文件,生成后在压缩的话,会产生中间文件。如果不希望生成中间文件,直接导出mysql数据库后生成压缩文件,可以借助管道完成:
- mysqldump –opt –single-transaction -h HOST -u USER -pPASS -c –default-character-set=utf8 DATABASENAME| gzip > OUTPUT.sql.gz
- 或者用bzip2
- mysqldump –opt –single-transaction -h HOST -u USER -pPASS -c –default-character-set=utf8 DATABASENAME| bzip2 -z> OUTPUT.sql.bz2
上面的命令使用了“–single-transaction”来避免导出文件时需要锁死表格的限制,这样比用“–lock-tables=false”更高效。
三、给生成的备份文件加上时间戳
首先需要获取当前系统时间,存在变量里:
- NOW=“$(date +”%Y-%m-%d“)”
命令里需要使用时间戳时,直接用$NOW就可以了。所以结合上面的打包压缩文件和mysqldump生成压缩包,在SHELL命令环境里就是这样:
- NOW=“$(date +”%Y-%m-%d“)”
- tar cf – to-be-tar-and-zip-folder | gzip > target_$NOW.tar.gz)
- mysqldump –opt –single-transaction -h HOST -u USER -pPASS -c –default-character-set=utf8 DATABASENAME| gzip > OUTPUT_$NOW.sql.gz
好了,实现服务器数据自动备份所需的SHELL脚本方面的内容就介绍到这儿,如果需要用系统的计划任务,请参考小卓之前介绍过文章《LINUX下的计划任务CRONTAB》,结合相关内容实现定期自动备份。