mysql mysqldump資料備份和增量備份

2021-06-18 22:10:59 字數 2668 閱讀 8150

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

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

unity3d

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

mysql mysqldump備份表指令碼

bin bash 對mysql資料庫進行制定資料庫表備份 1 0 備份,1 表恢復 2 資料庫 3 表名 4 表名 menu func menu func read p 請選擇資料庫 1 2 3 num if num ne1 num ne2 num ne3 then echo e 選擇錯誤,請重新選...

MySQL mysqldump匯入與匯出

最近,遇到乙個場景需要對mysql資料庫進行備份,本文記錄一下。對整個資料庫備份,包括表結構和資料 格式 mysqldump h資料庫ip u使用者名稱 p 資料庫名 d xx.sql 檔案存放路徑 示例 mysqldump h132.72.192.432 uroot p test home cod...

MYSQL mysqldump備份與恢復

原文mysql備份 冷備份 停止服務進行備份,即停止資料庫的寫入 l mysql的myisam引擎只支援冷備份,innodb支援熱備份,原因 innodb引擎是事務性儲存引擎,每一條語句都會寫日誌,並且每一條語句在日誌裡面都有時間點,那麼在備份的時候,mysql可以根據這個日誌來進行redo和und...