美文网首页
使用脚本备份Typecho博客数据

使用脚本备份Typecho博客数据

作者: 馒头先生啊 | 来源:发表于2019-07-15 14:19 被阅读0次

以下文章内容首发于本人博客:https://www.chiloh.cn,原Hexo博客已废弃,有问题可以评论咨询联系。

数据无价!基于此理念,决定对本博客的数据(网站内容及数据库)进行定期备份。但人工备份过程繁琐,容易疏忽,因此采用脚本进行备份。

脚本使用

作用:Typecho备份脚本。将数据库和usr目录备份打包。

用法:上传脚本至VPS,执行./backup_typecho.sh /path/to/yoursite.com/即可开始备份,其中/path/to/yoursite.com为博客程序安装位置。备份结果放在/var/backups/typecho/yoursite.com/目录下。另外使用时注意给/var/backups/目录添加写入权限。

定期:由于博客更新不是很频繁,因此未采用Crontab定期执行脚本备份,转而采用人工更新内容后执行备份,也能帮助自己建立定期更新博客的习惯。

脚本代码

#设置备份目录
backup_dir="/var/backups/typecho/"
function print_help(){
    echo 'Usage: $shell dir_to_typecho'
}

function die(){
    test -z "$1" || echo "$1"
    exit 1
}

function parse_db(){
    config_file=$2
    db_key=$1
    cat "$config_file" | grep -A 6 '$db' | grep '=>' | grep "$db_key" | awk -F "'" '{print $4}'
}


if [ "$#" -lt "1" ] 
then
    print_help
    exit 1
fi
te_dir="$1"
backup_dir="$backup_dir`basename "$te_dir"`"

#判断备份时间是否过频
min_time="43200" #12H
flag="/tmp/last_backup_typecho_`echo $te_dir | md5sum | awk '{print $1}'`"
last_backup="0"
test -f $flag && last_backup="`ls -l --time-style=+%s "$flag" | awk '{print $6}'`"
delta_time=$(expr "`date +%s`" - "$last_backup")

test "$delta_time" -lt "$min_time" && die "Time from last backup is less then $min_time, skip this time"


#初始化变量
te_config="$te_dir/config.inc.php"
te_usr_dir="$te_dir/usr"

#初始化环境
test -f "$te_config" || die "Can not find config file: $te_config"
test -d "$backup_dir" || mkdir -p "$backup_dir" || die "Can not create backup dir"

db_host=$(parse_db 'host' "$te_config")
db_port=$(parse_db 'port' "$te_config")
db_user=$(parse_db 'user' "$te_config")
db_pass=$(parse_db 'password' "$te_config")
db_name=$(parse_db 'database' "$te_config")

#备份数据库
echo "Found database config: host=$db_host, port=$db_port, user=$db_user, pass=**** and database=$db_name"
echo 'Try to dump database....'
dump_target='/tmp/database.sql';
test -f "$dump_target" && rm "$dump_target"
mysqldump -h"$db_host" -P"$db_port" -u"$db_user" -p"$db_pass" "$db_name" > "$dump_target"
echo 'Dump done.'

#备份usr目录
echo "Try to tar usr dir..."
tar_target="/tmp/user.tar.gz"
test -f "$tar_target" && rm "$tar_target"
tar czvf "$tar_target" "$te_usr_dir"
echo "Tar done."

echo "Try to pack..."
md5sum "$dump_target" > "$dump_target.md5sum"
md5sum "$tar_target" > "$tar_target.md5sum"
backup_file="$backup_dir/`basename "$te_dir"`.`date +%s`.tar.gz"
tar czvf "$backup_file" "$dump_target" "$dump_target.md5sum" "$tar_target" "$tar_target.md5sum"

#清理临时文件
rm $tar_target
rm "$tar_target.md5sum"
rm $dump_target
rm "$dump_target.md5sum"

touch "$flag"
echo "Backup to $backup_file done."

相关文章

网友评论

      本文标题:使用脚本备份Typecho博客数据

      本文链接:https://www.haomeiwen.com/subject/lhdnkctx.html