07月17, 2017

备份Ghost至Bitbucket

关于如何为Ghost做备份,Google一下,你会找到有很多种方式,不过由于本博客使用了Mysql作为Ghost的数据库,平时自己又习惯于使用Git做版本管理,所以就衍生了一个用Git来备份博客数据的想法。

大致的思路就是,先用mysqldump备份Ghost的database,将其压缩存储至Ghost根目录的content/data文件夹中,通过git commit将其添加入Git仓库,然后push至[Bitbucket]。

PS: 市面上有很多可以提供私有仓库的Git服务,孰优孰劣各有不同,这里就选用了自己常用的Bitbucket

那么首先就来建立一个名为cron_backup.sh的文件,具体代码如下:

#!/bin/sh
# Set variables
DB_NAME="xxx"  
MYSQL_USER="xxx"  
MYSQL_PASSWORD="xxx"

BACKUP_TIME=$(date +"%Y%m%d%H%M")  
BACKUP_DIR="path/to/ghost/content/data"  
FULLDATE=$(date +"%Y-%d-%m %H:%M")

# Check current Git status and update
git status  
git pull origin HEAD

# 判断MYSQL是否启动,mysql没有启动则备份退出
MYSQL_PS=`ps -ef |grep mysql |wc -l`  
MYSQL_LISTEN=`netstat -an |grep LISTEN |grep 3306|wc -l`  
if [ [$MYSQL_PS == 0] -o [$MYSQL_LISTEN == 0] ]; then  
  echo "ERROR:MySQL is not running! backup stop!"
  exit
else  
  echo "Welcome to use MySQL backup tools!"
fi

# 连接到mysql数据库,无法连接则备份退出
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD <<end  
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = "$DB_NAME";  
exit  
end

FLAG=`echo $?`  
if [ $FLAG != "0" ]; then  
  echo "ERROR:Can't connect mysql server! backup stop!"
  exit
else  
  echo "MySQL connect ok! Please wait......"
  echo "The database $DB_NAME backup start..."
  # 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
  `mysqldump -hlocalhost -P3306 -u$MYSQL_USER -p$MYSQL_PASSWORD $DB_NAME --default-character-set="utf8" | gzip > $BACKUP_DIR/$BACKUP_TIME.sql.gz`
  FLAG=`echo $?`
  if [ $FLAG == "0" ];then
    echo "database $DB_NAME success backup to $BACKUP_DIR/$BACKUP_TIME.sql.gz"
  else
    echo "database $DB_NAME backup fail!"
  fi
fi

# 删除过期备份,则进行删除操作,暂定为7天以前的备份数据
find $BACKUP_DIR -mtime +7 -exec rm -f {} \;

# Add to Git and commit
git add -A  
git commit -m "Automatic backup - $FULLDATE"  
git push origin HEAD  

以上脚本中的DB_NAMEMYSQL_USERMYSQL_PASSWORDpath/to/ghost/content/data请自行替换。

接着你先为Ghost的根目录下初始化Git,并连接Bitbucket远程仓库,如有疑问,可以Google,这点在这里就不描述了。

现在,来测试一下这个脚本,如果遇到权限问题,请赋予当前用户chmod +x的权限,如果没有问题,你的备份脚本就已经OK了。

不过,如果仅仅是这样感觉还是麻烦了一些,做好能做个定时脚本,这时候我们就用到了crontab,为当前的用户添加一个定时任务吧,让系统自动每天凌晨帮你备份一次:

# crontab command
00 00 * * * cd path/to/ghost && ./cron_backup.sh > /dev/null 2>&1  

这里有一点小提示,为何不是直接运行path/to/ghost/cron_backup.sh,因为有可能你执行crontab并非Ghost目录的拥有者,会导致Git操作失败。

以上想法及示例代码仅供参考。

参考链接
  1. https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/12.4.md
  2. https://jabran.me/articles/automatic-database-backup-using-git-hosting
  3. https://gist.github.com/oodavid/2206527
  4. https://gist.github.com/pakcheong/6570839
  5. https://zh.wikipedia.org/wiki/Cron

本文链接:https://itony.net/post/ghost-backup-bitbucket.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。