MHuiG

「看庭前花开花落,望天上云卷云舒」

定时备份服务器 / 网站数据到 Github 私人仓库

# 定时备份服务器 / 网站数据到 Github 私人仓库

现在 Github 被微软收购后，私人仓库已经开始免费了，然后就可以拿来折腾下了，让其充分发挥下作用，这里我们可以用来备份下网站或者服务器一些数据。

## 配置 Git SSH 密钥

由于本地 Git 仓库和 GitHub 仓库之间的传输是通过 SSH 加密的，所以必须要让 github 仓库认证你 SSH key，在操作之前，需要先在服务器上生成 SSH key。

我们先去根目录下使用命令：

    cd ~
    ssh-keygen -t rsa

这里会要你命名密匙名称 (这里建议使用默认名称)，然后连续按几次 Enter，这时候会在 /root/.ssh 文件夹生成 2 个 ssh 密钥，然后我们查看公钥 id_rsa.pub。

    cat ~/.ssh/id_rsa.pub

查看后，再复制下公钥，然后打开 Github 官网，进入 https://github.com/settings/ssh/new ，Title 随便填，然后 Key 填入刚刚复制的密匙，最后点击 Add SSH Key 添加即可。

## 建立私人仓库

我们需要先访问 https://github.com/new ，新建一个仓库用来存放备份文件，名称自己随意，记得下面一定要勾选 Private，也就是私人仓库。

## 配置本地仓库

由于博主是用来备份网站，所以需要备份文件夹为网站根目录 /alidata/，也就是把该文件夹定为本地仓库，使用命令：

    #进入需要备份的文件夹
    cd /alidata/
    #安装git
    yum install git
    #初始化你的github仓库
    git init
    #关联到远程github仓库
    git remote add origin git@github.com:MHuiG/BackupWebSite.git

关联仓库的时候，后面可以用 HTTPS 链接也可以用 SSH，这里强烈建议选择 SSH，安全性很高。

## 初次备份

    #进入备份的文件夹
    cd /alidata/
    #忽略大于50.00 MB文件
    find . -size +50M>.gitignore
    sed -i 's/.//' .gitignore
    #把目录下所有文件更改状况提交到暂存区，包括增，删，改。
    git add -A
    #提交更改的说明，说明随意了，这里为BackupWebSite
    git commit -m "BackupWebSite"
    #开始推送到Github
    git push -u origin master

推送的时候可能会提示 The authenticity of host ‘github.com’ can’t be established. 信息，直进 yes 即可。
然后可以看到仓库的备份文件了。

## 设置定时备份

在根目录先新建一个 bash 脚本：

    nano ~/gitback.sh

代码如下：

    #!/bin/bash
    #进入到网站根目录，记得修改为自己的站点
    cd /alidata/
    #将数据库导入到该目录，这里以mysql为例，passwd为数据库密码，all.sql为备份的数据库文件
    mysqldump -uroot -ppasswd --events --all-databases>all.sql
    #忽略大于50.00 MB文件
    find . -size +50M>.gitignore
    sed -i 's/.//' .gitignore
    git add -A
    git commit -m "BackupWebSite"
    git push -u origin master

然后编辑好了后，使用 ctrl+x，y 保存退出。再测试下脚本，使用命令

    bash ~/gitback.sh

脚本没问题的话，再设置为每天 05:15 执行一次：

    #并将运行日志输出到根目录的siteback.log文件
    echo "15 05 * * * bash ~/gitback.sh > ~/siteback.log 2>&1 &" > bt.cron
    crontab bt.cron
    rm -rf bt.cron

最后使用命令查看添加成功。

    crontab -l

## 附录

### crontab 定时任务中提示 command not found 解决方案

写了个脚本定时从 MySQL 中提取数据，但是 crontab 发邮件提示 mysql command not found

很奇怪，因为直接执行此脚本不会报错，正常运行，但加入到 crontab 中就会报错，

经查，MySQL 不在 crontab 执行的环境变量中

解决方案：

找到 MySQL 的安装路径：

    which mysql

假设找到的是:

    /home/user1/mysql/bin/mysql

建立软连接

    cd /usr/bin && ln -fs /home/user1/mysql/bin/mysql mysql

自建https证书

自建 https 证书 自建 https 证书 生成 nginx 的证书与配置 chrome 安全告警的问题 安装 openssl生成根证书openssl req -x509 -nod...

一键安装ecs服务器的web环境(阿里云)

一键安装 ecs 服务器的 web 环境 一键安装 ecs 服务器的 web 环境 (阿里云) 阿里云 Linux 一键安装 web 环境使用教程 教程1. 准备工具阿里云 linu...

留言区

Notes
CentOS
本文目录
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are you Robot?</pjax>