MySQL 5.7.10 自動備份、自動清理舊備份組

來源:互聯網
上載者:User

標籤:清理   磁碟   rm -rf   mtime   option   insert   add   tle   提交   

http://blog.csdn.net/mchdba/article/details/51527081

 

MySQL版本是5.7.10-log社區版本,需要進行備份,但是備份時間長了後,磁碟不夠用,所以需要對指定舊的備份組合進行清理工作。

 

1,mysqldump備份指令碼

備份指令碼為,裡面有幾個需要注意的參數:

(1)--master-data=2 :這個參數可以在搭建從庫的時候,記錄當前備份的複製點資訊。

 

(2)--extended-insert=false:這個在形成sql語句的時候,一條記錄一個insert語句

 

(3)--single-transaction:來保證備份的一致性,實際上它的工作原理是設定本次會話的隔離等級為:REPEATABLE READ,以確保本次會話(dump)時,不會看到其他會話已經提交了的資料。

 

備份指令碼為:backup_full.sh

date=`date "+%Y%m%d%H%M%S"`

back_path=/data/mysql/backup/data

mysqldump=/usr/local/mysql/bin/mysqldump

cd ${back_path}

${mysqldump} -uroot --password="[email protected]"  -R -E -h localhost --socket=/usr/local/mysql/mysql.sock --skip-opt --single-transaction --flush-logs --master-data=2 --add-drop-table --create-option --quic

k --extended-insert=false --set-charset --disable-keys --databases user_db  |gzip > user_db.${date}.sql.gz

${mysqldump} -uroot --password=" [email protected] "  -R -E -h localhost --socket=/usr/local/mysql/mysql.sock --skip-opt --single-transaction --flush-logs --master-data=2 --add-drop-table --create-option --quic

k --extended-insert=false --set-charset --disable-keys --databases plocc_system  |gzip > plocc_system.${date}.sql.gz

 

 

2,清理多餘備份的指令碼

清除舊的備份指令碼為:clear_old_backup.sh,大概思路為:

(1)      一年前,儲存每個月的1號和16號的備份組合,其它的刪除掉(# 1 for one years ago, save 1/16 on every month, else clear )。

 

(2)      六個月前,儲存1號和11號和21號的備份組合,其它的刪除掉(# 2 for 6 months ago, save 1/11/21 in a month)

 

(3)      一個月前,每天儲存6點鐘的備份組合,其它的刪除掉(# 3 for a month ago,save *063001.sq.gz on a day)

 

 

(4)      三天前,儲存6點鐘和18點鐘的備份組合,其它的刪除掉(# 4 for 3 days ago, save 063001.sql.gz  and 183001.sql.gz)

 

指令碼clear_old_backup.sh為:

d3=`date ‘+%Y-%m-%d %H:%M:%S‘`

d2=`date ‘+%Y-%m-%d‘`

logfile=/data/mysql/backup/scripts/clear_old_backup.log

old_backupfile=/data/mysql/backup/scripts/old_backupfile_$d2.csv

cd /data/mysql/backup/data

echo "" >> $logfile

echo "-- $d3 begin... --" >>  $logfile

 

# 1 for one years ago, save 1/16 on every month, else clear ,

find . -mtime +360 -name "*.sql.gz" |grep -v "01063001.sql.gz" >> $old_backupfile;

 

# 2 for 6 months ago, save 1/11/21 in a month

find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz"   >> $old_backupfile;

 

# 3 for a month ago,save *063001.sq.gz on a day

find . -mtime +30 -name "*.sql.gz" |grep -v "063001.sql.gz"   >> $old_backupfile;

 

# 4 for 3 days ago, save 063001.sql.gz  and 183001.sql.gz

find . -mtime +3 -name "*.sql.gz" |grep -v "063001.sql.gz" |grep -v "183001.sql.gz"  >> $old_backupfile;                                      

 

# 5 begin clear

find /mnt/resource -mtime +5 -name "*.sql.gz" -exec rm -rf {}  \;

 

#6 save the clear sql.gz to a temp directory

for i in `cat $old_backupfile`; do

         echo "-- $i -- is cleared."

         mv $i /mnt/resource/

done

 

d4=`date ‘+%Y-%m-%d %H:%M:%S‘`

echo "-- $d4 end... --" >>  $logfile

echo "" >> $logfile

 

PS:本來這裡是準備採用find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz"-exec  rm -rf {}  \;檢索完後直接rm刪除掉的,但是由於find後使用grep報錯不識別{},所以折衷採用了一個方案,將檢索到的檔案儲存在一個臨時檔案old_backupfile_$d2.csv裡面,然後遍曆old_backupfile_$d2.csv檔案去mv或者rm操作等,find grep exec報錯如下:

[[email protected] ~]# find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz" -exec  rm -rf {}  \;                                      

grep: {}: No such file or directory

[[email protected] ~]#

 

3,crontab定時任務

使用crontab 建立定時任務,每天進行備份和清理工作,讓db伺服器自動進行。

[[email protected]_master_2 ~]# crontab -l

20 1 * * * sh /data/mysql/backup/scripts/clear_old_backup.sh                                       

30 */6 * * * sh /data/mysql/backup/scripts/backup_full.sh

[[email protected]_master_2 ~]#

 

 

4,後續擴充問題

簡單的備份做好了,簡單的舊備份組合清理也搞定了,但是後續還可以再多做些事情,更加完善一些:

(1)      email通知,備份成功或者失敗後,郵件通知

(2)      將備份組合copy一份到檔案伺服器

(3)      自動檢查Database Backup的有效性

  

MySQL 5.7.10 自動備份、自動清理舊備份組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.