目 录CONTENT

文章目录

mysql定时备份并上传Gitee私有仓库

aprilz
2023-01-20 / 0 评论 / 0 点赞 / 1,381 阅读 / 1,606 字

1.服务器设置密钥 为了能让备份好的数据脚本,能够上传到 Gitee 私有仓库中 首先,就需要创建秘钥,用于配置服务器的无密提交,通过下面命令创建秘钥

ssh-keygen -t rsa -C "aprilz777@163.com"

按几次回车,完成秘钥的生成

然后到ssh目录,查看刚刚生成的秘钥

cd ~/.ssh

ll

image-20220305232011770

然后我们把 id_rsa.pub 文件的内容拷贝,打开 Gitee 网站

https://gitee.com/profile/sshkeys 并添加

image-20230119155224668

添加完成后,保存即可,然后回到服务器中,使用下面的命令,测试自己刚刚添加是否成功

ssh -T git@gitee.com

并输入yes

image-20230119155342523

然后就会提示成功完成校验,并输出自己的 Gitee 昵称

同时,细心的同学可能还注意到了后面的一句话

but GITEE.COM does not provide shell access.

这是啥意思呢?为了解答大家的疑惑,陌溪特意去搜索了一下

大致意思是:Gitee不提供shell(ssh)访问/接入权限。ssh -T 选项的意思为,不分配伪终端。

当你在使用ssh协议连接到自己或者其他服务器时,本地终端会显示命令提示符,你可以在上面操作输入命令Is等。

结合上面几点,这句话的意思即为你无法使用 ssh 协议直接登录 Gitee,在 Gitee 服务器上建立一个伪终端,并进行操作。所以,这句提示并不是一个错误,而是Gitee 输出的一句提示语。同样你可以在本地使用 ssh 协议进行 git 相关操作,并提交到 Gitee,没有任何影响。

2.创建自己的私库

image-20230119155542919

配置完成后,选择 SSH 的方式

image-20230119155634843

输入命令

git config --global user.name "Aprilz"
git config --global user.email "aprilz777@163.com"

注意下面两个文件待会有用

mysqlbackup.sh

#!/bin/bash

dt_now=`date +%Y%m%d`

cd /home/mysql8.0/mysql-files/bak

mkdir $dt_now

find  /home/mysql8.0/mysql-files/bak/  -mtime +21 -exec rm -rf {} \;(删除超过21天的备份)

echo "start backup mysql"    #(这里我们随便找一个数据库为例)
#mysqldump -uroot -ppeiqi666 mi > /home/mysql8.0/mysql-files/bak/$dt_now/mi.sql
mysqldump --defaults-extra-file=/etc/my.cnf mi > /home/mysql8.0/mysql-files/bak/$dt_now/mi.sql

pushGitee.sh

#!/bin/sh
echo start backup mysql
docker exec -i mysql /home/mysql8.0/mysql-files/mysqlbackup.sh

echo "start push gitee" 

# 切换到外部bak路径进行git提交
cd /home/mysql8.0/mysql-files 

# 将全部信息添加到暂存区
git add -A .

# 提交
git commit -m "commit"

# push到远程层库
git push -u origin master

在my.cnf中添加

[mysqldump]
user = root
password = 'peiqi666'

否则会报错,参考:https://blog.csdn.net/m0_63410395/article/details/126821972

先放出我的docker-compose-mysql.yml

version: '3.1'
services:
  mysql:
    image: mysql:8.0.30
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: peiqi666
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./mysql8.0/my.cnf:/etc/my.cnf
      - ./mysql8.0/data:/var/lib/mysql
      - ./mysql8.0/mysql-files:/home/mysql8.0/mysql-files
      - ./mysql8.0/init/:/docker-entrypoint-initdb.d/
    networks:
      - ap
networks:
  ap:
    external: true

采用mysql8.0.30,有一个目录mysql-files专门用来处理数据库的备份和导入,所以我们将mysql备份的文件均放入此目录种

新建这两个文件,填入上方内容,使用vim,vi或者touch等

# 配置执行权限
chmod +x mysqlbackup.sh
chmod +x pushGitee.sh

image-20230119233526336

cd /home/mysql8.0/mysql-files
mkdir bak
# 初始化仓库
git init 
# 将仓库与远程仓库进行关联 注意需要ssh的
git remote add origin git@gitee.com:white_white_123456/mysql-bak.git

然后执行

./pushGitee.sh

image-20230120002514945

image-20230120002435443

3. 设置定时任务

最后一步,只需要开启每天定时同步任务即可,这里就需要用到 crontabs

crondlinux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的 crontab 文件都被保存在 /var/spool/cron 目录中。其文件名与用户名一致。

下面是crontab 的常用命令

# centos 检查是否安装了crontab,如图所示,云服务器默认是由安装crontab的
type crontab

image-20230120003003173

假如没有安装的话也没有关系,自己敲命令安装即可

# 安装
yum install crontabs

# crond启动命令
systemctl start crond

# 关闭
systemctl stop crond

#查看状态
systemctl status crond

#开启自启
systemctl enable crond

image-20230120003207368

那么介绍就到这里了,下面我们需要开始创建定时任务了!

首先使用 crontab -e 命令 ,会打开一个创建定时任务的 vi 窗口,在上面输入需要执行脚本的命令

10 2 * * *   sh  /home/mysql8.0/mysql-files/pushGitee.sh > /root/bak.log  2>&1 &

第一行是云服务器,默认云监控启动的任务,暂不管他

image-20230120003805294

 #查看所有的定时任务
 crontab -l

好了,等待晚上2点10分是否有推送Gitee吧!

拓展以及可能出现的问题:

1、/bin/sh是/bin/bash的软连接,在一般的linux系统当中,使用sh调用执行脚本相当于打开了bash的POSIX标准模式,也就是说 /bin/sh 相当于 /bin/bash --posix
2、/bin/sh执行过程中,若出现命令执行失败,则会停止执行;/bin/bash执行过程中,若命令执行失败,仍然会继续执行
test.sh

#!/bin/sh
source pcy.sh #pcy.sh并不存在
echo hello


image-20230120000854846

改成

#!/bin/bash
source pcy.sh #pcy.sh并不存在
echo hello


image-20230120000941596

如果使用finalshell,默认编辑器使用notepad++的话,主要看左下角格式要改成unix(LF),否则会如下错误

image-20230120002059688

image-20230120002238319

0

评论区