資料庫備份策略
每週的週日進行一次全備;週一到週六每天做上一天增量,每週輪詢一次。
備份方案: xtrabackup全備+增量
備份策略(crontab):
crontab -e
00 03 1 /root/allbak.sh &>/dev/null //每週一的凌晨3點執行完全備份
vim /root/allbak.sh #!/bin/bash [ ! -e /backup ]&& mkdir /backup #新建個資料夾專門放備份檔案的 day=date +%F #定義日期是時間 user=root pass=123456 innobackupex --user $user --password $pass /backup/allbak${day} --no-timestamp #用innobackupex做完全備份 mysql -u$user -p$pass -e "flush logs" #啟用binlog日誌,每次完全備份之後,每週重新整理一遍binlog日誌
00 0 2-7 /root/newbak.sh & >/dev/null //每週二到周7的凌晨3點執行增量備份
#週一全備,如果是週二執行,判斷dir1 存在,則增量備份,如果不存在,則判斷昨天的增量,存在則執行週三的增量,如果都沒有,則全備執行一次吧
vim /root/newbak.sh #!/bin/bash d1=date +%F #定義時間,用日期來區分 d2=date +%F -d "-1 days" #找到昨天的日期,好指明上一次備份的備份檔案 dir1=/backup/allbak${d2} #昨天做的完全備份檔案 dir2=/backup/newbak${d2} #昨天做的增量備份檔案 user=root pass=123456 [ ! -e /backup ]&& mkdir /backup #如果檔案不存在,則建立資料夾 if [ -e ${dir1} ];then #判斷昨天做的是完全備份 Y指定昨天備份的完全備份檔案 innobackupex --user $user --password $pass --incremental /backup/newbak${d1} --incremental-basedir=${dir1} --no-timestamp elif [ -e ${dir2} ];then#判斷昨天做的是增量備份 Y指定昨天備份的增量備份檔案 innobackupex --user $user --password $pass --incremental /backup/newbak${d1} --incremental-basedir=${dir2} --no-timestamp else #昨天既沒有做增量備份,又沒有做完全備份,則做一次完全備份。 innobackupex --user $user --password $pass /backup/allbak${d1} --no-timestamp fi