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...

推荐阅读
mysql的使用 mysql与pymysql的设置 Hive安装部署 CentOS7安装Python3 一键安装ecs服务器的web环境(阿里云) Ubuntu 20.04 LTS 在虚拟机中的安装配置

留言区

Notes
CentOS
本文目录
Are You A Robot?