Hugo博客公告弹窗

利用免费GitHub私人仓库:定时备份网站数据

   
文章摘要
摘要小助理今天溜号啦……😜

随着GitHub被微软收购后,私人仓库已经变得免费,为我们提供了一个无限的创造空间。现在,我们可以尽情发挥其潜力,将其用于定时备份网站和服务器重要数据,确保数据安全与可靠性。

教程

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

1、配置Git SSH密钥

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

设置github 用户名和邮箱

git config --global user.name "name" 
git config --global user.email "xxxx@qq.com"

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

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添加即可。

Pasted image 20230905225818

2、建立私人仓库

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

3、配置本地仓库

进入需要备份的文件夹,比如/www/wwwroot/lala,也就是把该文件夹设定为本地仓库,使用命令:

#进入需要备份的文件夹
cd /www/wwwroot/lala
#初始化你的github仓库
git init
#关联到远程github仓库
git remote add origin git@github.com:Blichus/back_website.git

如果已经备份过了,拉取github仓库代码到服务器 (关联远程github仓库后)

git pull origin master

4、初次备份

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

推送的时候可能会警告提示:

The authenticity of host 'github.com' can't be established.

Are you sure you want to continue connecting (yes/no/[fingerprint])?

直进yes即可。 然后可以看到仓库的备份文件了。

5、设置定时备份

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

nano ~/gitback.sh

代码如下:

#!/bin/bash
#进入到网站根目录,记得修改为自己的站点
cd /www/wwwroot/lala
#将数据库导入到该目录
mysqldump -uaaa -pbbb ccc > dddd.sql
# 把目录下所有文件更改状况提交到暂存区,包括增,删,改。
git add -A
# 提交更改的说明,说明随意了,这里为backsite
git commit -m "backsite"
# 开始推送到Github
git push -u origin master
  • -uaaa 注意:前面带 -u 后面的aaa为数据库用户名,通常是root
  • -pbbb 后面的bbb为数据库密码
  • ccc 为数据库名称
  • dddd 为备份的数据库文件

然后编辑好了后,使用ctrl+xy保存,回车退出。

给与权限: chmod 777 gitback.sh

再测试下脚本,使用命令

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

如果使用的是宝塔面板,直接计划任务里添加shell脚本

bash ~/gitback.sh

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

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

6、其他问题

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 "admin@moerats.com"

2、密钥问题

报错提示:Permission denied (publickey).

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

方法一:

进入根目录的.ssh文件夹,将你的github密钥文件,重新更名为id_rsa

方法二:

将github密钥添加到ssh agent,比如密匙名称为github,使用命令:

ssh-agent bash
ssh-add ~/.ssh/github

3、mysql command not found

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

完结撒花~~~

CC BY-NC-SA 4.0 转载请注明
最后更新于 2024-11-20 16:13
clarity统计