Linux MySQL定时备份并上传到git仓库

算法探云师
• 阅读 4556

简介

我们在部署我们的中小型项目时 在数据存储 我们通常选择mysql作为我们的存储工具 那么对于一个大的项目来说

每天的数据量是十分大的 对于每天产生的数据 如果哪一天我们的网站或者服务器受到攻击 我们的数据丢失是个很爆炸的事情

所以说自然这设计到数据库的备份 那么怎样的备份是我们想要的呢

对于备份的数据文件我们可能会存放在服务器目录 备份周期的话当然是按照数据量来说的 这里我们一般都是每天的凌晨备份一次

备份后的文件存放在我们的服务器的目录下面 但是万一有一天服务器也崩溃了 那么备份的文件也就没了

所以我们设想一个好的方案就是数据库每天备份 每次备份自动提交到远程仓库 这里我以码云为例

码云

首先建立好远程仓库 在这里我选择了码云

新建一个私有仓库 当然为了每次可以免密码提交文件 在服务器里可以生成ssh key 具体的可以看我的以前的一篇博客

服务器新建备份

在服务器为了存储备份后的文件 新建一个备份目录

$ mkdir /bak

进入该目录后 继续新建两个文件夹 mysqlBakshDir 一个是放脚本文件 一个是放具体备份后的文件

下面我们可以去新建脚本了 进入shDir目录后 执行

$ vim mysqlBak.sh

具体的代码如下:

#!bin/sh
###################数据库配置信息#######################
createAt=`date +%Y-%m-%d-%H:%M:%S`
user=root
passwd=ghc1996
dbname=ispace
mysql_back_path=/bak/mysqlBak
###################执行命令#######################
mysqldump -u $user -p$passwd $dbname > $mysql_back_path/$createAt.sql
cd /bak/mysqlBak
/usr/local/git/bin/git add .
/usr/local/git/bin/git commit -m $createAt
/usr/local/git/bin/git push

这里只是一个简单的脚本 我想了解linux的很容易看的懂 执行的就是备份数据库并push到远程仓库

那么既然是脚本 我们需要指明什么时候执行这个脚本 指定脚本执行

$ crontab -e

我们希望是每天的凌晨执行一次备份 并添加到远程仓库 那么添加

$ 0 0 * * * /bin/sh /bak/shDir/mysqlbak.sh

linuxcrontab指定的时间只有个部分

段位 时间
第一段 代表分钟 0—59
第二段 代表小时 0—23
第三段 代表日期 1—31
第四段 代表月份 1—12
第五段 代表星期几,0代表星期日 0—6

使用命令 crontab -e 然后直接编辑定时脚本。 时间 +具体的名字

举个列子来说就是

0 0,3,7,9,12,15,18,21,23 * * * /bin/sh /bak/shell/mysqlBak.sh

这样的话就是我每天0,,3,7,9,12,15,18,21,23点时会去执行这个脚本文件 那么这就实现了基本的数据库的备份

执行定时任务

$ crontab -l

如果服务没有启动 那么重新启动定时任务

$ systemctl restart crond

那么现在这个定时任务就已经启动了 对于提交远程仓库前提是在服务器生成ssh key并添加到码云 这在上面也提到过

对于需要提交文件的目录初始化git目录就可以了 这样局可以构成了我们需要的本分任务

当然过程中可能会遇到一些问题 我在下面的相关链接都已经罗列出来了

这样一来我们就可以实现了每天的凌晨备份我们的数据库 并同时提交到我们的码云这个远程仓库 这也是我们想要的效果

我也说过备份的周期视我们的项目的数据量的大小而定

对于每个框架都有自己的备份机制 我这里所写的是我们自己实现的一个通用的备份机制

相关链接

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Vitess全局唯一ID生成的实现方案 | 京东云技术团队
为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键。但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足全局唯一的需求。因此,产生了多种解决方案,如UUID,Sn
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这