定时备份网站数据到 Git
[TOC]
# 服务器安装配置 Git
```bash
# 安装 git
sudo yum install git
# 配置 git
git config --global user.name "Ryanjie"
git config --global user.email "ryanjiena@foxmail.com"
# 配置 SSH keys
cat ~/.ssh/id_rsa.pub
## 如果你看到一长串以 ssh-rsa 或 ssh-dsa 开头的字符串, 你可以跳过 ssh-keygen 的步骤。
## 提示: 最好的情况是一个密码对应一个 ssh key。
## 完全可以跳过创建密码这个步骤。记住设置的密码并不能被修改或获取。
## 或者按如下命令来生成 ssh key:
ssh-keygen -t rsa -C "ryanjiena@foxmail.com"
## 这里会要求你提供一个位置和文件名去存放键值对和密码 (建议点击 Enter 键去使用默认值),
# 获取生成的公钥
cat ~/.ssh/id_rsa.pub
# 复制公钥到剪切板
## GNU/Linux (requires xclip):
xclip -sel clip < ~/.ssh/id_rsa.pub
## Windows
clip < ~/.ssh/id_rsa.pub
## Mac
pbcopy < ~/.ssh/id_rsa.pub
## 添加公钥到远程仓库
## https://code.aliyun.com/profile/keys
```
![](https://pic.ryanjie.xyz/blog/000003/%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E7%BD%91%E7%AB%99%E6%95%B0%E6%8D%AE%E5%88%B0%20Git-1.jpg)
# 建立远程私人仓库
访问 https://code.aliyun.com/projects/new 建立远程私人仓库。
* 项目路径随便写
* 可见等级选择 `Private`
* 最后点击 `创建项目` 即可。
# 服务器创建本地仓库
```bash
# 克隆远程仓库到本地
git clone git@code.aliyun.com:Ryanjie/www.ryanjie.cn.git
cd www.ryanjie.cn
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
# 同步本地仓库到远程
cd www.ryanjie.cn
git init
git remote add origin git@code.aliyun.com:Ryanjie/www.ryanjie.cn.git
git add .
git commit -m "update"
git push -u origin master
```
# 定时备份脚本
```bash
vim /home/gitbackup.sh
# 创建定时备份脚本
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
endDate=`date +"%Y-%m-%d %H:%M:%S"`
cd /home/www.ryanjie.cn/SchoolLifeData
mysqldump -uroot -p2197030521...Zxj shop > SchoolLifeDatabase_$(endDate).sql
git add -A
git commit -m "[$endDate]"
git push -u origin master
echo "----------------------------------------------------------------------------"
echo "★[$endDate] Successful"
echo "----------------------------------------------------------------------------"
# 添加可执行权限
sudo chmod +x /home/gitbackup.sh
```
或者将下面脚本保存为 `install-gitbackup.sh` 文件,上传到服务器添加可执行权限执行即可。
```bash
#!/bin/sh
set -exo pipefail
gitbackup_file='/home/gitbackup.sh'
if [ -f ${gitbackup_file} ]; then
mv ${gitbackup_file} ${gitbackup_file}.bak
fi
cat >${gitbackup_file} <<'EOF'
## 进入到网站根目录,记得修改为自己的站点
cd /home/www.ryanjie.cn/typecho
## 将数据库导入到该目录,这里以 mysql 为例,passwd 为数据库密码,
## typecho 为数据库名称,typecho.sql 为备份的数据库文件
mysqldump -uroot -ppasswd typecho > typecho_$(date +%Y%m%d).sql
git add .
git commit -m "backupsite"
git push -u origin master
EOF
```
<a id="markdown-0x05-添加定时备份任务" name="0x05-添加定时备份任务"></a>
# 添加定时备份任务
``` bash
# 创建 cron 脚本
## 每天早上 02:22 进行备份
echo "22 02 * * * bash /home/gitbackup.sh" > gitbackup.cron
## 每两分钟 进行备份并且保存运行日志 (把标准错误输出重定向到标准输出)
echo "*/2 * * * * bash /home/www.ryanjie.cn/SchoolLifeData/sitegitbackup/gitbackup.sh >> /home/www.ryanjie.cn/SchoolLifeData/log/$(date +"\%Y-\%m-\%d \%H:\%M:\%S").log 2>&1 &" > gitbackup.cron
# 添加定时备份任务
crontab gitbackup.cron
# 检查定时任务是否添加成功
crontab -l
## 或者检测 /var/spool/cron 下是否生成对应 cron 脚本
```