思路:如何快速寫一個全面的數據庫 增備+全備+刪除,自動化的腳本?


一、數據做用: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

相關文章
相關標籤/搜索