之前都是手动进行备份即麻烦又不节能,于是今天心血来潮写了个脚本挂服务器上一到时间让它自己备份到GitHub。话不多说,具体做法如下
头图来源:青色の風-みふる-pixiv
初始化本地仓库
既然要将备份上传到GitHub,那就得先建一个仓库(ps:记得将仓库设置为private),这部分具体过程随便一搜就有于是省略。仓库目录大致如下
.
├── .git
├── backup.log #备份日志
├── db_bak #数据库备份(sql文件)所在路径
│ └── ***.sql
├── README.md
└── wwwroot
└── yukinekoneko.com
├── config.inc.php
├── admin
├── index.php
├── install
├── install.php
├── LICENSE.txt
├── usr #usr文件夹所在路径
└── var
编写脚本
对于typecho博客,我们主要备份的就两样东西:数据库和usr
文件夹,将这两样备份起来推送至远程仓库即可。为了方便调试排错,可将当前脚本执行动作输出打印至日志文件(backup.log)。采用https的方式推送至远程仓库(这里用ssh的话可能会更方便一点)
#! /bin/bash
cd 你本地仓库路径
INTERVAL=21 #删除现在距之前指定间隔天数的数据库备份
DB_BAK_DIR= 数据库备份(sql文件)所在路径
BLOG_BAK_DIR= usr文件夹所在路径
DATE=`date +%Y/%m/%d` #当前系统时间
DB_USER= 数据库账户
DB_PWD= 数据库密码
DATABASE= 所要备份的数据库(就是typecho所用的数据库)
DEL_DATE=`date -d "${DATE} -${INTERVAL} day" +%Y/%m/%d`
#数据库备份
echo "-------$(date +%F_%T) start-------">>backup.log
mysqldump -u${DB_USER} -p${DB_PWD} ${DATABASE}>${DB_BAK_DIR}/data_backup_${DATE}.sql
echo "--- data backup completed">>backup.log
#删除早期的数据库备份
if [ -a "${DB_BAK_DIR}/data_backup_${DEL_DATE}.sql" ];then
rm -f ${DB_BAK_DIR}/data_backup_${DEL_DATE}.sql
echo "---delete data_backup_${DEL_DATE}.sql">>backup.log
fi
#推送至远程仓库
echo "---push to remote repository">>backup.log
git add ${DB_BAK_DIR}
git add ${BLOG_BAK_DIR}
echo `git commit -m "bak-${DATE}"`>>backup.log
echo `git push -u origin main`>>backup.log
echo "---git push completed">>backup.log
$ git config --global credential.helper store
一项,这样只需输入一次用户名和Token之后就无需再输入
使用crontab制定定时任务
在编写好脚本之后接下来的就是重头戏了,关于crontab的用法这里有一篇文章讲得很仔细crontab 定时任务
做法就是输入命令$ crontab -e
来设定你所需执行的定时任务,具体格式如下:
- 第1列分钟0~59
- 第2列小时0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要运行的命令
至于备份的频率按各自喜好设定即可,我更博的频率比较佛系所以就设定一周执行一次备份
0 11 * * 3 /root/backup.sh #每周三十一点执行脚本
这里我是将备份脚本放在了根路径。设定好定时任务后重启一下crontab
systemctl restart crond.service
备份后通知(可做可不做)
这一步主要是通过在IFTTT上挂个webhook,这样每次自动备份到GitHub的时候能够通知你博客已经备份完成。
创建你的Applet
步骤非常简单,当然首先你需要有一个IFTTT帐号,没有的话快速申请一个。
进入IFTTT页面后单击右上角的create就能开始制定Applet了。
点击If This后面的Add来设置所要监听的Action,搜索github
点进去之后会让你选择Action,我们需要的是仓库每次有新的commit时通知我们,所以这里我们选择Any new commit
输入仓库的名称后我们要监听的Action就设定好了,之后就是设置触发事件了,点击Then That后面的Add来设置所要触发的事件。可以选择邮箱、短信等,亦或者你愿意折腾的话也可以是其他任意你希望接收通知的方式,比较自由。具体做法就跟之前类似了,选择邮箱的话则会直接使用你IFTTT帐号所绑定的邮箱,邮件内容可以自定义,也能使用预设的变量(如commit message等)。
创建完Applet后,点击大大的connect激活它即可。
enjoy!
3 comments
[...]自动备份 typecho 博客至 Github – 甜甜圈の杂物间[...]
博主是改过字体大小吗?感觉你的字体比我的字体更加明显,立体一些。我是默认的,感觉有点淡淡的,读起来废眼睛
我之前应该是把字体改大了一些。