定時備份網站數據到 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://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 腳本
```