mysql全量 增量備份指令碼

2021-07-02 16:08:25 字數 2735 閱讀 5928

本篇文章主要講如何使用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 ...