在Github被微软收购后,私人仓库开始免费了,拿来折腾下用来做为网站数据备份还是非常不错的,都说数据无价,一旦数据丢失便失去了所有。下面就说说 Linux 如何定时备份数据库并且上传到 Git 中的私有库中。

moewah.jpg

教程

首先你肯定需要一个Github账号,没有的可以去注册一个,地址:https://github.com。有了账号就继续看。

配置Git SSH密钥

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

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

cd ~
ssh-keygen -t rsa

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

cat ~/.ssh/id_rsa.pub

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

Githubback(1).png

建立私人仓库

我们需要先访问https://github.com/new,新建一个仓库用来存放备份文件,名称自己随意,记得下面一定要勾选Private,也就是私人仓库。不然你辛辛苦苦备份的小姐姐就要被别人偷走了。

moewah1.png

配置本地仓库

由于博主是用来备份网站,所以需要备份文件夹为/home/www.moewah.com,也就是把该文件夹定为本地仓库,使用命令:

#进入需要备份的文件夹
cd /home/www.moewah.com
#初始化你的github仓库
git init
#关联到远程github仓库
git remote add origin [email protected]:moewah/moewah.git

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

moewah2.png

初次备份

#进入备份的文件夹
cd /home/www.moewah.com
#把目录下所有文件更改状况提交到暂存区,包括增,删,改。
git add -A
#提交更改的说明,说明随意了,这里为backsite
git commit -m "backsite"
#开始推送到Github
git push -u origin master

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

moewah7.png

设置定时备份

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

nano ~/gitback.sh

代码如下:

#!/bin/bash
#进入到网站根目录,记得修改为自己的站点
cd /home/xxx.com
#将数据库导入到该目录,这里以mysql为例,passwd为数据库密码,typecho为数据库名称,typecho.sql为备份的数据库文件
mysqldump -uroot -ppasswd typecho > typecho.sql
git add -A
git commit -m "backsite"
git push -u origin master

然后编辑好了后,使用ctrl+xy保存退出。再测试下脚本,使用命令:

chmod a+x ~/gitbach.sh
bash ~/gitback.sh

脚本没问题的话,通过crontab再设置为每天05:15执行一次:

#并输出名为siteback.log的日志文件
15 05 * * * bash ~/gitback.sh >> /var/log/siteback.log 2>&1 &

最后使用crontab -l命令查看添加成功没。成功的话,就基本上算完成了。

常见问题

如果你将本地文件夹推送到Github失败的话,常见原因有2种,具体如下。

1、邮件问题

报错提示:Your push would publish a private email address.

这里可能是你将你的邮件地址私密了,解决方法如下:

#方法一,如果你想一直保持私密,可以选择方法二
访问https://github.com/settings/emails,将Keep my email address private的勾去掉。

#方法二
1、访问https://github.com/settings/emails,将Block command line pushes that expose my email的勾去掉。
2、设置你的用户名和github邮箱,修改成自己的再运行命令:
git config --global user.email "[email protected]"
git config --global user.name "moewah"

2、密匙问题

报错提示:Permission denied (publickey).

大概的原因就是,你设置密匙的时候改成了其它名称,而ssh默认只读取id_rsa,所以会显示没权限。解决方法如下:

#方法一
进入根目录的.ssh文件夹,将你的github密匙文件,重新更名为id_rsa。

#方法二
将github密匙添加到ssh agent,比如密匙名称为github,使用命令:
ssh-agent bash
ssh-add ~/.ssh/github

3、安全问题

此脚本默认将数据库sql文件导出到网站根目录,如果你的Nginx服务器没有做限制,很容易导致文件暴露被人私自下载。

这里以军哥LNMP环境下的Nginx为例,请修改/usr/local/nginx/conf/vhost/路径下的 www.moewah.com.conf 虚拟主机配置文件(文件路径和名称请根据自己的网站进行修改)在 server 内追加下面的内容:

    if ($uri ~ ^/typecho.sql) {
                return 403;
        }

保存并重启nginx即可。

Apache 可以尝试在域名对应的虚拟主机配置文件中的Directory目录权限配置内增加Files选项来控制,比如要不允许访问 .sql 扩展名的文件,保护数据库:

<Files ~ ".sql$">
   Order allow,deny
   Deny from all
</Files>

然后保存并重启apache。

总结

使用该方法备份网站是个不错的选择,不过别用来备份大文件东西,比如电影什么的,听说有限制,具体多少暂时还没测试。


相关推荐

  1. Duplicacy CLI 快速入门指南
  2. Duplicity:企业级的增量备份与数据恢复工具
  3. Ubuntu/Debian 系统安装配置 UFW 简单防火墙
  4. CentOS 7 安装使用 iptables 防火墙方法介绍
  5. Linux 服务器配置密钥实现远程免密登录
  6. CentOS 7 firewalld 防火墙常用命令汇总
文章作者:喵斯基部落
原文地址:https://www.moewah.com/archives/755.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。