Mysql增量備份與全量備份

2021-08-16 07:07:18 字數 3940 閱讀 1441

1.首先確保已開啟binlog日誌功能。在my.cnf中包含下面的配置以啟用二進位制日誌:

[mysqld]

log-bin=mysql-bin

2.建立兩份指令碼檔案,乙份為增量備份的指令碼檔案,另乙份為全量備份的指令碼檔案。

//指令碼檔案放這裡

//全量備份指令碼start

#!/bin/bash

# program

# use mysqldump to fully backup mysql data per week!

# history

# 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/bin/mysqldump -uroot -proot --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpfile

#↑這邊放置你的 mysqldump所在位址並加上你連線資料庫的賬號密碼

/bin/tar -zvcf $gzdumpfile $dumpfile

/bin/rm $dumpfile

last=`date +"%y年%m月%d日 %h:%m:%s"`

echo 開始:$begin 結束:$last $gzdumpfile succ >> $logfile

cd $bakdir/daily

/bin/rm -f *

//全量備份指令碼end

//增量備份指令碼start

#!/bin/bash

# program

# use cp to backup mysql data everyday!

# history

# path

#//增量備份時複製mysql-bin.00000*的目標目錄,提前手動建立這個目錄

bakdir=/home/mysql/backup/daily    #備份位址                 

bindir=/var/lib/mysql   

logfile=/home/mysql/backup/bak.log #日誌位址

binfile=/var/lib/mysql/mysql-bin.index 獲取mysql裡的 mysql-bin.index

/usr/bin/mysqladmin -uroot -proot flush-logs

#↑獲取mysql裡的mysqladmin,並填寫資料庫賬戶名和密碼。(mysqladmin跟全量備份的mysqldump位置一樣)

#這個是用於產生新的mysql-bin.00000*檔案

counter=`wc -l $binfile |awk ''`

nextnum=0

#這個for迴圈用於比對$counter,$nextnum這兩個值來確定檔案是不是存在或最新的

for file in `cat $binfile`

dobase=`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

fifi

done

echo `date +"%y年%m月%d日 %h:%m:%s"` $next bakup succ! >> $logfile

//增量備份指令碼end

3.將指令碼儲存到任意位置,比如root檔案中

4.設定crontab任務,執行備份指令碼。先執行的是增量備份指令碼,然後執行的是全量備份指令碼:

[root@test-huanqiu ~]# crontab -e

#每個星期日凌晨3:00執行完全備份指令碼

0 3 * * 0 /bin/bash -x /root/mysql-fullybak.sh >/dev/null 2>&1

#周一到週六凌晨3:00做增量備份

0 3 * * 1-6 /bin/bash -x /root/mysql-dailybak.sh >/dev/null 2>&1

#↑指令碼路徑必須填對

5.測試增量備份與全量備份指令碼

先執行增量備份指令碼

[root@test-huanqiu backup]# sh /root/mysql-dailybak.sh 

[root@test-huanqiu backup]# ll

total 8

-rw-r--r--. 1 root root 121 nov 29 11:29 bak.log

drwxr-xr-x. 2 root root 4096 nov 29 11:29 daily

[root@test-huanqiu backup]# ll daily/

total 8

-rw-r-----. 1 root root 152 nov 29 11:29 mysql-binlog.000030

-rw-r-----. 1 root root 152 nov 29 11:29 mysql-binlog.000031

[root@test-huanqiu backup]# cat bak.log 

mysql-binlog.000030 copying

mysql-binlog.000031 copying

mysql-binlog.000032 skip!

2023年11月29日 11:29:32 bakup succ!

然後執行全量備份指令碼

[root@test-huanqiu backup]# sh /root/mysql-fullybak.sh 

20161129.sql

[root@test-huanqiu backup]# ll

total 152

-rw-r--r--. 1 root root 145742 nov 29 11:30 20161129.sql.tgz

-rw-r--r--. 1 root root 211 nov 29 11:30 bak.log

drwxr-xr-x. 2 root root 4096 nov 29 11:30 daily

[root@test-huanqiu backup]# ll daily/

total 0

[root@test-huanqiu backup]# cat bak.log 

mysql-binlog.000030 copying

mysql-binlog.000031 copying

mysql-binlog.000032 skip!

2023年11月29日 11:29:32 bakup succ!

開始:2023年11月29日 11:30:38 結束:2023年11月29日 11:30:38 20161129.sql.tgz succ

在日常運維工作中,對mysql資料庫的備份是萬分重要的,以防在資料庫表丟失或損壞情況出現,可以及時恢復資料。

增量備份和全量備份

1.全量備份full backup 每隔一段時間對系統進行一次完全備份,這樣在備份時間間隔內一旦系統發生故障導致資料丟失,就可以用上一次的備份資料恢復到上一次備份時的情況。例如,星期一用一盤磁帶備份整個系統,星期二再用另一盤磁帶 備份,依次類推 這種備份策略的有點 備份的資料最全面且最完整,當發生資...

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全量 增量備份指令碼

本篇文章主要講如何使用shell實現mysql全量,增量備份。增量備份在周一 週六凌晨3點,會複製mysql bin.00000 到指定目錄 而全量備份則使用mysqldump將所有的資料庫匯出,每週日凌晨3點執,並會刪除上週留下的mysq bin.00000 然後對mysql的備份操作會保留在ba...