一個腳本實現Mysql的備份

對於數據庫的備份和恢復是DBA的主要責任,而如何纔能有效的備份數據庫,並且能在數據庫崩潰的時候及時恢復便變的相當重要了,如果在Linux上純手動的備份數據庫,將會帶來很大的麻煩,所有我就寫了個腳本,把腳本加入到定期任務列表中,定期執行數據備份,這就變得更加容易管理數據庫了,我這裏是一個簡單的小腳本,當然在實際引用中還要修改,比如添加用戶和密碼,可以根據自己的需要在做修改。
下面簡單的介紹一下這個腳本,這個腳本執行的時候有四個參數:
/PATH/mysqlbak.sh -f  //完全備份,這個可以根據自己數據庫變動的情況設置多長時間執行一次,加入一個月執行一次吧!
/PATH/mysqlbak.sh -d //這個是從最後一次完全備份到目前的時間的一次差異備份,這樣就減少了備份數據庫的時間。
/PATH/mysqlbak.sh -i //這個參數可以實現增量備份,也就是上一次備份和這次備份之間數據庫的變動,這個時間可以短一點,這樣可以在數據庫崩潰的時候減少損失,可以一個小時一次。
/PATH/mysqlbak.sh -h //這個是幫助信息
把這些都加入到定期執行計劃中,就可以實現自動執行腳本了,不用管理員手動進行備份了。
#!/bin/bash
#
function HELPTXT {
  echo "/PATH/mysqlbak.sh -f: You can backup all databases"
  echo "/PATH/mysqlbak.sh -i: Just backup the exter change from the last backup"
  echo "/PATH/mysqlbak.sh -d: Backup from the last full-backup to the current time"
}
DATE=`date "+%F-%H-%M-%S"`
mysql -e "FLUSH TABLES WITH READ LOCK;"
mysql -e "SHOW MASTER STATUS;">/dev/null
startfile=/tmp/startposition
exterfile=/tmp/exterposition
while getopts "fdih" OPTS;do
  case $OPTS in
    f)
      mysqldump   --all-databases  >/mybackup/db.$DATE
      STARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$startfile`
      ESTARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$exterfile`
      cd /mybackup
      tar -cjf /root/bakmysql/db.$DATE.tar.gz2 db.$DATE >/dev/null
    ;;
    d)
      mysql -e "FLUSH TABLES WITH READ LOCK;"
      mysql -e "SHOW MASTER STATUS;">/dev/null
      FILE=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $1}'`
      STARTPOSITION=`cat $startfile`
      ENDPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'`
      mysqlbinlog --start-position $STARTPOSITION  --stop-position $ENDPOSITION /mydata/data/$FILE >/mybackup/incre.$DATE
      cd /mybackup
      tar -cjf /root/bakmysql/incre.$DATE.tar.gz2  incre.$DATE >/dev/null
    ;;
    i)
      mysql -e "FLUSH TABLES WITH READ LOCK;"
      mysql -e "SHOW MASTER STATUS;">/dev/null
      FILE=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $1}'`
      EENDPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}' >>$exterfile`
      ESTARTPOSITION=`tail -n 2 $exterfile | head -n 1`
      Exendposition=`tail -n 1 $exterfile`
      mysqlbinlog --start-position $ESTARTPOSITION  --stop-position $Exendposition  /mydata/data/$FILE >/mybackup/exter.$DATE
      cd /mybackup
      tar -cjf /root/bakmysql/exter.$DATE.tar.gz2  exter.$DATE >/dev/null
    ;;
    h)
      HELPTXT 
    ;;
  esac
done
 
在crontab -e中添加任務計劃,就能實現自動備份數據庫了!!
 
希望這個小腳本能夠讓你更加便捷的管理mysql數據庫,如有問題,可以共同探討!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章