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