• ADADADADAD

    mysql mysqldum备份脚本[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:55:42

    作者:文/会员上传

    简介:

    本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*。然后对mysql的备份操作会保留在bak.log文件中。如下图:

    开始:2013年05月02日 15:10:57 结束:2013年05月02日 15:12:16 20130502.sql.tgz succ是由DBFullyBak.sh产生的,每周备份一次;mysql-bin.000001 copying;mysql-bin.000002 skip!;2013年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"`

    DumpFile=$Date.sql

    GZDumpFile=$Date.sql.tgz

    if [ ! -d "$BakDir" ]; then

    mkdir -p $BakDir

    fi

    cd $BakDir

    /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 successful!!! >> $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=/data/mysql

    LogFile=/home/mysql/backup/bak.log

    BinFile=/data/mysql/mysql-bin.index

    if [ ! -d "$BakDir" ]; then

    mkdir -p $BakDir

    fi

    /usr/local/mysql/bin/mysqladmin -uroot -p123456 flush-logs

    #这个是用于产生新的mysql-bin.00000*文件

    Counter=`wc -l $BinFile |awk '{print $1}'`

    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

    fi

    done

    echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup successful! >> $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


    mysql mysqldum备份脚本.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysql数据库文章