思路:如何快速写一个全面的数据库 增备+全备+删除,自动化的脚本?

1、数据作用:

数据对我们来说是非常非常的重要,如果你是管理数据员、运维人员的,数据丢失了,找不回来,也就意味着,你的职业生涯就结束了,为了避免数据丢失,我们也做了很多的维护、备份,比如做主从复制、做全备、增备等等。这个可以参考我的另一篇文章Mysql主从复制

我这里就不多说,今天我们要怎么写一个比较好的数据备份自动化脚本,让我们更好的管理数据库。

2、mysql备份脚本思路

首先要有一个思路,我的要求是每个的周一到周五做增量备份,周六做全备,对前两天的增备的日志删除,对两个星期前的全备也进行删除

整个过程都是涉及shell命令,所以果断的抛弃了python,使用shell脚本,数据库做全备需要应用mysqldump命令,这里命令mysql自带有,如果你的备份数据大于10G的话,请你使用xtrackbackup来做全备。增量的命令比较简单,只要刷新一下日志就好。

3、备份脚本编写

#!/bin/bash 
Mysqldump() {   
mysqldump -uroot -p123456 --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > /databack/data_all/`date +%F"-%H:%M"`.sql
}                   ###这里写个函数,把全备命名写进去
$1                  ###$1是我们执行脚本的参数,这样来实现该函数执行可变性
Mysql_log (){
mysqladmin -u root -p123456  flush-logs
}
$1                  ###增量备份,同样把命令写进去
##下面创建计划任务,只需要写到/etc/crontab,就可以了
crontab_dump () {       
  cat /etc/crontab | grep "bash $0 Mysqldump "    ##这里找一找使用有写执行全备的命令是否已经写到/etc/crontab里面。
  if [ $? -eq 0 ]; then                           ##定义一个判断语句,如果在/etc/crontab里面找到执行全备的脚本命令,就输出一句话,没有就把时间任务写入进去
     echo "The port test has been written to the time task, and 00:00 will perform the task" 
  else
     echo "0 0 * * 6   bash $0 Mysqldump " >> /etc/crontab
  fi
     
} crontab_dump
crontab_mysqladmin () {
  cat /etc/crontab | grep "bash $0 Mysql_log "   ##这里找一找使用有写执行增备的命令是否已经写到/etc/crontab里面。
  if [ $? -eq 0 ]; then                           ##定义一个判断语句,如果在/etc/crontab里面找到执行增备的脚本命令,就输出一句话,没有就把时间任务写入进去
     echo "The port test has been written to the time task, and 00:00 will perform the task"
  else
     echo "0 0 * * 1-5 bash $0 Mysql_log " >> /etc/crontab
  fi
     
} crontab_mysqladmin

4、每天生成的日志会累积,我们需要把不要的删除掉,继续完善。

#!/bin/bash 
Mysqldump() {
mysqldump -uroot -p123456 --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > /databack/data_all/`date +%F"-%H:%M"`.sql
num1=`ls -rt  /databack/data_all  | wc -l`     ##按时间列出,你的全备的数据里面有多少个文件我这里的全备是备到/databack/data_all/目录下
file1=`ls -rt  /databack/data_all | head  -n 1`  ##使用ls命令结合head命令,找出时间最远久的文件
    for i in $num1 ; do                          ###做一个for循环,如果列出了的文件大于2,然后就删除时间最久远的那个文件
        if  [ $i -gt 2 ] ; then
        rm -rf   /databack/data_all/$file1
        fi
    done
}
$1
Mysql_log (){
mysqladmin -u root -p123456  flush-logs
for a in {1..5};do                           ###这里做一个for循环,表示循环五次,应为二制日志,比较多,检测五次,还是比较好的,你的可以自己设
num2=`ls -rt  /databack/data_logbin/ | wc -l`   ##按时间列出,你的全备的数据里面有多少个文件我这里的全备是备到/databack/data_all/目录下
file2`ls -rt  /databack/data_logbin/ | head  -n 1`  ##使用ls命令结合head命令,找出时间最远久的文件
    for i in $num2; do
        if  [ $i -gt 3 ] ; then                   ###做一个for循环,如果列出了的文件大于3,然后就删除时间最久远的那个文件,循环后退出,进入下一次循环。连续五次
        rm -rf   /databack/data_logbin/$file2
       # else 
       #echo "log-bin was update"
        fi
    done
done
}
$1
crontab_dump () {
  cat /etc/crontab | grep "bash $0 Mysqldump "  
  if [ $? -eq 0 ]; then
     echo "The port test has been written to the time task, and 00:00 will perform the task"
  else
     echo "0 0 * * 6   bash $0 Mysqldump " >> /etc/crontab
  fi
     
} crontab_dump
crontab_mysqladmin () {
  cat /etc/crontab | grep "bash $0 Mysql_log "  
  if [ $? -eq 0 ]; then
     echo "The port test has been written to the time task, and 00:00 will perform the task"
  else
     echo "0 0 * * 1-5 bash $0 Mysql_log " >> /etc/crontab
  fi
     
} crontab_mysqladmin

5、总结

一个mysql备份脚本就完成了,算不上难,但是,在写任何脚本的时候,你需要先理清思路最重要,先把大概的轮廓写出了的,再慢慢补充,相信会越写越好。

原文地址:http://blog.51cto.com/xiaozhagn/2064738

时间: 2024-11-07 09:34:17

思路:如何快速写一个全面的数据库 增备+全备+删除,自动化的脚本?的相关文章

快速写一个babel插件

es6/7/8的出现,给我们带来了很多方便,但是浏览器并不怎么支持,目前chrome应该是支持率最高的,所以为了兼容我们只能把代码转成es5,这应该算是我们最初使用babel的一个缘由,随着业务的开发,我们会有很多自己定制化的需求,单纯的bebel并不能解决我们所有的问题,所以babel插件应用而来,本文将会采用较为通俗的语言来描述如何快速写一个babel插件. 一.babel的作用 babel的作用其实就是一个转换器,把我们的代码转成浏览器可以运行的代码,类似于加工厂的概念.解析代码都是一个文

如何快速写一个分布式实时应用程序

在开源搜索引擎Iveely的0.8.0中,我们有提到Iveely Computing实时计算平台,因为Iveely搜索引擎也是基于这个平台做的开发,因此,我们可以利用这个平台,轻松构建分布式实时应用程序.在开始构建程序之前,请按照这里部署Iveely Computing,确定部署无误之后,我们可以从下面代码开始学习. 不管是hadoop还是storm,都会在入门的时候,有一个WordCount示例,Iveely Computing也不例外. 首先,WordCount代码如下: /* * To c

如何快速写出一个陌生人推荐系统

如何快速写出一个陌生人推荐系统 在社交游戏中,除了和好友互动,经常还会设计陌生人互动的游戏环节.下面两张图分别是QQ水浒和全民农场的陌生人推荐界面. QQ水浒陌生人界面 全民农场陌生人界面 那么,陌生人推荐系统一般是怎么做的呢?下面以全民农场的陌生人推荐系统为例来阐述如何快速构建一个陌生人推荐系统,由于采用了boost::multi_index库,整个推荐系统代码在400行左右,非常简洁. 首先,我们简单介绍一下全民农场的陌生人推荐系统规则: 1. 等级相近 2. 城市相近 3. 性别相反 4.

根据用户需求快速写原创文章的技巧

每天有时间就在QQ群里看看大家聊什么问题,发现这几天在讨论如何写原创文章?原创文章好还是伪原创好?伪原创怎么写?等等这些问题.今天我总结了一下,根据我的经验给大家说一下如何根据用户需求快速写原创文章. 案例网站:太原雅辉装修公司 太原雅辉装修网的文章全部是高度伪原创,加上可以匹配的图片,写一篇文章需要半个小时左右. 文章实例: <a href="http://www.0351zhuangxiu.com/112.html">40平米小户型装修效果图</a> 为什么

如何设计一个优秀的数据库

如何设计一个优秀的数据库 (2014-04-02 12:43:21) 标   一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键.如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分. 有关数据库设计的材料汗牛充栋,大学学位课程里也有专门的讲述.不过,就如我们反复强调的那样,再好的老师也比不过经验的教诲.所以我归纳历年来所走的弯路及体会,并在网

现有一个商店的数据库,记录顾客及其购物情况,根据要求解答问题

题目: 现有一个商店的数据库,记录顾客及其购物情况,由下面三个表组成: 商品product(商品号productid,商品名productname,单价unitprice,商品类别category,供应商provider): 顾客customer(顾客号customerid,姓名name,住址location): 购买purcase(顾客号customerid,商品号productid,购买数量quantity): 每个顾客可以购买多件商品,每件商品可以被多个顾客购买,属于多对多的关系. 试用S

[转]一个备份MySQL数据库的简单Shell脚本

本文翻译自 iSystemAdmin 的 <A Simple Shell Script to Backup MySQL Database> Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行.我们也可以逐一敲入命令手动执行.如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反复运行这些命令了. 我首先要在本文带给你的是完整脚本.后面会对该脚本做说明.我假定你已经知道shell scripting. mysqldump和cronta

用聚合数据API快速写出小程序(苏州实时公交)

利用聚合数据API快速写出小程序,过程简单. 1.申请小程序账号 2.进入开发 3.调用API.比如"苏州实时公交"小程序,选择的是苏州实时公交API. 苏州实时公交API文档:https://www.juhe.cn/docs/api/id/31 如下,是"苏州实时公交"小程序调用代码:  var url = "https://apis.juhe.cn/szbusline/bus";    //为了您的密钥安全,建议使用服务端代码中转请求,事例代

PHP实现的一个简单的数据库操作类

PHP实现的一个简单的数据库操作类 实现的功能: - 在实例化的时候能设置连接字符集 - 在实例化的时候能连接数据库 - 在实例化的时候能选择默认数据库 - 销毁对象时关闭数据库 代码如下: <?php // 数据库操作类MySQLDB class MySQLDB { // 声明属性 private $server; private $username; private $password; public $default_db; public $link; // 声明构造函数 public f