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...