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


一、数据做用:python

数据对咱们来讲是很是很是的重要,若是你是管理数据员、运维人员的,数据丢失了,找不回来,也就意味着,你的职业生涯就结束了,为了不数据丢失,咱们也作了不少的维护、备份,好比作主从复制、作全备、增备等等。这个能够参考个人另外一篇文章Mysql主从复制mysql

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

二、mysql备份脚本思路shell

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

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

三、备份脚本编写运维

#!/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  root 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  root bash $0 Mysql_log " >> /etc/crontab
  fi
     
} crontab_mysqladmin

四、天天生成的日志会累积,咱们须要把不要的删除掉,继续完善。ide

#!/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 5 ] ; then                   ###作一个for循环,若是列出了的文件大于5,而后就删除时间最久远的那个文件,循环后退出,进入下一次循环。连续五次
        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   root 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 root bash $0 Mysql_log " >> /etc/crontab
  fi
     
} crontab_mysqladmin

五、总结
函数

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

相关文章
相关标签/搜索