• 脚本备份MySQL数据库和binlog日志


    用Mysqldump实现全库备份+binlog的数据还原

    首先是为mysql做指定库文件的全库备份

    vim mysqlbak.sh

    #!/bin/bash

    #定义数据库目录,要能找到mysqldump

    mysqlDir=/usr

    #定义用于备份数据库的用户名和密码

    user=root

    userpwd=123456

    dbname=db1

    #定义备份目录

    databackupdir=/mysqlbak

    #定义邮件正文文件

    emailfile=$databackupdir/email.txt

    #定义邮件地址

    email=www@163.com

    #定义备份日志文件

    logfile=$databackupdir/mysqlbackup.log

    #DATE=`date +%Y%m%d`

    DATE=`date -I`

    echo "" > $emailfile

    echo $( date +"%Y-%m-%d %H:%M:%S" ) >> $emailfile

    cd $databackupdir

    #定义备份文件名

    dumpfile=mysql_$DATE.sql

    gzdumpfile=mysql_$DATE.sql.tar.gz

    #使用mysqldump备份数据库,--flush-logs 产生一个新日志

    $mysqlDir/bin/mysqldump -u$user -p$userpwd --flush-logs -x $dbname > $dumpfile

    #压缩备份文件

    if [ "$?" == 0 ];then

        #把备份出来的文件进行压缩,压缩的结果保存在邮件内容中

       tar zcvf $gzdumpfile $dumpfile >> $emailfile 2>&1

       echo "BackupFileName: $gzdumpfile" >> $emailfile

       echo "DataBase Backup Success!" >> $emailfile

        #删除压缩前的sql文件

       rm -rf $dumpfile

    else

       echo "Database Backup Fail!" >> $emailfile

    fi

    #写日志文件

    echo "-------------------------------------------------" >> $logfile

    cat $emailfile >> $logfile

    #发送邮件通知

    cat $emailfile| mail -s "Mysql Backup" $email

    以上脚本执行后会在备份目录中产生一个tar.gz的文件,此文件为全库备份文件,备份成功后给指定的邮箱地址发送邮件,收件内容为截图内容为备份成功!

    接下来是binlog日志的备份脚本

    vim binlogbak.sh

    #!/bin/bash

    #定义数据库目录和数据目录

    mysqldir=/usr/local/mysql

    datadir=$mysqldir/binlog

    #定义用于备份数据库的用户名和密码

    user=root

    userpwd=123456

    #定义备份目录

    databackupdir=/mysqlbak

    logbackupdir=$databackupdir/logs

    #定义邮件正文文件

    emailfile=$databackupdir/email.txt

    #定义邮件地址

    email=www@163.com

    #定义备份日志文件

    logfile=$databackupdir/mysqlbackup.log

    #DATE=`date +%Y%m%d`

    echo "" > $emailfile 

    echo $( date +"%Y-%m-%d %H:%M:%S" ) >> $emailfile

    #刷新日志,使数据库使用新的二进制日志文件

    /usr/bin/mysqladmin -u$user -p$userpwd flush-logs

    cd $datadir

    #得到二进制日志列表

    filelist=`cat mysql_binlog.index`

    icounter=0

    for file in $filelist

    do

        #需要注意的是符号和两个操作项之间的空格毕不可少,下面也是一样

      icounter=`expr $icounter + 1`

    done

    nextnum=0

    ifile=0

    for file in $filelist

    do

    binlogname=$file

    nextnum=`expr $nextnum + 1`

    #跳过最后一个二进制日志 (数据库当前使用的二进制日志文件)

    if [ $nextnum -eq $icounter ];then

       echo "Skip lastest!" > /dev/null

    else

       dest=$logbackupdir/$binlogname

    #跳过已经备份的二进制日志文件

    if [ -e $dest ];then

       echo "Skip exist $binlogname!" > /dev/null

    else

    #备份日志文件到备份目录

    cp $binlogname $logbackupdir

    if [ "$?" == 0 ];then

    ifile=`expr $ifile + 1`

    echo "$binlogname Backup Success!" >> $emailfile

       fi

         fi

    fi

    done

    if [ $ifile -eq 0 ];then

       echo "No Binlog Backup!" >> $emailfile

    else 

       echo "Backup $ifile File(s)." >> $emailfile

       echo "Backup MySQL Binlog OK!" >> $emailfile

    fi

    #写日志文件

    echo "-------------------------------------------------" >> $logfile

    cat $emailfile >> $logfile

    #发送邮件通知

    cat $emailfile| mail -s "Mysql Backup" $email

    以上脚本执行后会在备份目录中产生多个没备份过的binlog日志,文件每日是前一天的增量备份文件,备份成功后给指定的邮箱地址发送邮件,收件内容为截图内容为备份成功!

    编写计划任务自动执行,每周1,3,24点全库备份,每天夜里1点日志备份

    crontab -e

    0 00 * * 1,3 /mysqlbak.sh

    0 1 * * * /binlogbak.sh

  • 相关阅读:
    H3C利用dhcp snooping来禁用某个端口下的DHCP
    onu侧各种pon协议下的技术参数10G
    常见Intel网卡芯片对比,多队列网卡介绍
    esxi6.7 7.0 diy for nvme drivers
    Windows Server 2019 OVF 模板下载
    vSphere 6.5支持512e,NVMe SSD呢?
    何时使用领域驱动设计
    徒手打造基于Spark的数据工厂(Data Factory):从设计到实现
    早产的《HelloGitHub》第 65 期
    最简单的人工神经网络
  • 原文地址:https://www.cnblogs.com/beyang/p/11984016.html
Copyright © 2020-2023  润新知