本篇文章主要講如何使用shell實現mysql全量,增量備份。增量備份在周一-週六凌晨3點,會複製mysql-bin.00000*到指定目錄;而全量備份則使用mysqldump將所有的資料庫匯出,每週日凌晨3點執,並會刪除上週留下的mysq-bin.00000*。然後對mysql的備份操作會保留在bak.log檔案中。如下圖:
開始:2023年05月02日 15:10:57 結束:2023年05月02日 15:12:16 20130502.sql.tgz succ是由dbfullybak.sh產生的,每週備份一次;mysql-bin.000001 copying;mysql-bin.000002 skip!;2023年05月02日 16:53:15 bakup succ!則是由dbdailybak.sh產生的,每天一次。
實現:1.編寫全量備份指令碼
複製**
**如下:
# vim /root/dbfullybak.sh //新增以下內容
#!/bin/bash
# program
# use mysqldump to fully backup mysql data per week!
# history
# 2013-04-27 guo first
# path
# ....
bakdir=/home/mysql/backup
logfile=/home/mysql/backup/bak.log
date=`date +%y%m%d`
begin=`date +"%y年%m月%d日 %h:%m:%s"`
cd $bakdir
dumpfile=$date.sql
gzdumpfile=$date.sql.tgz
/usr/local/mysql/bin/mysqldump -uroot -p123456 --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpfile
/bin/tar czvf $gzdumpfile $dumpfile
/bin/rm $dumpfile
last=`date +"%y年%m月%d日 %h:%m:%s"`
echo 開始:$begin 結束:$last $gzdumpfile succ >> $logfile
cd $bakdir/daily
rm -f *
2.編寫增量備份指令碼
複製**
**如下:
# cat /root/dbdailybak.sh //內容為下
#!/bin/bash
# program
# use cp to backup mysql data everyday!
# history
# 2013-05-02 guo first
# path
# ....
bakdir=/home/mysql/backup/daily
bindir=/home/mysql/data
logfile=/home/mysql/backup/bak.log
binfile=/home/mysql/data/mysql-bin.index
/usr/local/mysql/bin/mysqladmin -uroot -p123456 flush-logs
#這個是用於產生新的mysql-bin.00000*檔案
counter=`wc -l $binfile |awk ''`
nextnum=0
#這個for迴圈用於比對$counter,$nextnum這兩個值來確定檔案是不是存在或最新的。
for file in `cat $binfile` do
base=`basename $file`
#basename用於擷取mysql-bin.00000*檔名,去掉./mysql-bin.000005前面的./
nextnum=`expr $nextnum + 1`
if [ $nextnum -eq $counter ]
then
echo $base skip! >> $logfile
else
dest=$bakdir/$base
if(test -e $dest)
#test -e用於檢測目標檔案是否存在,存在就寫exist!到$logfile去。
then
echo $base exist! >> $logfile
else
cp $bindir/$base $bakdir
echo $base copying >> $logfile fi
fidone
echo `date +"%y年%m月%d日 %h:%m:%s"` $next bakup succ! >> $logfile
3.設定crontab任務,每天執行備份指令碼
複製**
**如下:
# crontab -l //內容為下
#每個星期日凌晨3:00執行完全備份指令碼
0 3 * * 0 /root/dbfullybak.sh >/dev/null 2>&1
#周一到週六凌晨3:00做增量備份
0 3 * * 1-6 /root/dbdailybak.sh >/dev/null 2>&1
附錄:sh -n /root/dbfullybak.sh可以用於檢測shell語法是否正確
MYSQL增量備份和全量備份指令碼
首先配置下mysql增量備份 server id 1 log bin var log mysql mysql bin.log binlog ignore db sys,mysql,information schema,performance schema 設定日誌格式 binlog format m...
mysql全量和增量備份指令碼
全量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 root master leo cat dbfullbak.sh bin bash use mysqldump to fully backup mysql data bakdir root leo full l...
Xtrabackup全量備份 增量備份指令碼
一 全量備份指令碼 1.全量備份指令碼 1 2 3 4 5 6 7 8 9 10 11 12 13 bin bash description xtrabackup complete author created by michael 2017 08 07 v0.1 user root passwd ...