美文网首页
liunx系统mysql全量备份和增量备份

liunx系统mysql全量备份和增量备份

作者: 架构师与哈苏 | 来源:发表于2019-12-09 17:01 被阅读0次

    前提

    ​ 在互联网项目中最终还是读数据进行操作,都离不开曾删改查,那么数据是重中之重,数据库的备份就显得格外重要。

    ​ 但是每次都直接导出整个数据库的sql文件,显然是不现实的。对数据库的性能影响比较大。

    ## mysql备份的三种方式
    
    • 热备 : 不关闭mysql服务的情况下,请求可以继续操作数据库,实现备份
    • 温备 : 不关闭mysql服务的情况下,支持读,不支持写,实现备份
    • 冷备 : 关闭mysql服务的情况下,实现备份

    备份的类型

    * 全量备份 : 一次性备份整个数据库的数据结构为sql文件
    * 增量备份 : 备份增量的日志文件,日志文件中有操作数据库数据结构的记录,我们可以使用这个来作为增量备份的恢复文件
    

    方案

    ​ 1.mysqldump 是mysql中自带的一个备份工具

    ​ 使用mysqldump备份数据库,使用mysqladmin备份数据日志,编写两个脚本一个全量备份数据库的脚本databak.sh,一个增量备份日志的脚本binlogbak.sh,使用crontab定时任务,每个星期日凌晨3:00执行完全备份脚本,周一到周六凌晨3:00做增量备份。

    实践

    1.mysql开启增量备份,在my.cnf添加 : log-bin=/var/lib/mysql/mysql-bin

    vim /etc/my.cnf
    

    my.cof :

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd
    
    # enable log_bin
    log-bin=/var/lib/mysql/mysql-bin
    
    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid
    
    #
    # include all files from the config directory
    #
    !includedir /etc/my.cnf.d
    
    

    2.创建备份文件存放的路径

    mkdir -p /home/mysql/backup
    

    3.创建mysql全量备份的脚本

    vim /home/mysql/databak.sh
    

    databak.sh :

    #!/bin/bash
    
    export LANG=en_US.UTF-8
    
    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
    
    mysqldump -uroot -p123456 --databases test --flush-logs --delete-master-logs --single-transaction > $DumpFile
    
    tar -czvf $GZDumpFile $DumpFile
    
    rm $DumpFile
    
    
    
    count=$(ls -l *.tgz |wc -l)
    
    if [ $count -ge 5 ]
    
    then
    
    file=$(ls -l *.tgz |awk '{print $9}'|awk 'NR==1')
    
    rm -f $file
    
    fi
    
    #只保留过去四周的数据库内容
    
    
    
    Last=`date +"%Y年%m月%d日 %H:%M:%S"`
    
    echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile
    
    cd $BakDir/daily
    
    rm -f *
    
    
    

    4.创建mysql增量备份的脚本

    vim /home/mysql/binlogbak.sh
    

    binlogbak.sh :

    #!/bin/bash
    
    export LANG=en_US.UTF-8
    
    BakDir=/home/mysql/backup/daily
    
    BinDir=/var/lib/mysql
    
    LogFile=/home/mysql/backup/binlog.log
    
    BinFile=/var/lib/mysql/mysql-bin.index
    
    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"` Bakup succ! >> $LogFile
    
    
    

    5.为databak.sh和binlogbak.sh添加执行权限

    chmod 777 binlogbak.sh databak.sh
    

    6.开启定时任务

    vi /etc/crontab
    

    crontab:

    #每个星期日凌晨3:00执行完全备份脚本
    
    0 3 * * 0 /home/mysql/databak.sh >/dev/null 2>&1
    
    #周一到周六凌晨3:00做增量备份
    
    0 3 * * 1-6 /home/mysql/binlogbak.sh >/dev/null 2>&1
    

    使上述定时任务生效

    crontab /etc/crontab
    

    查看定时任务

    crontab -l
    

    这是我的公众号 有最新的it咨询,和个人工作的记录:

    扫码_搜索联合传播样式-微信标准绿版.png

    这是我的个人微信遇到问题欢迎,提问:

    微信图片_20190614200326.jpg

    最后加上高质量的淘宝店:如有质量问题随时滴滴我,童叟无欺!

    微信图片_20191111194455.png

    相关文章

      网友评论

          本文标题:liunx系统mysql全量备份和增量备份

          本文链接:https://www.haomeiwen.com/subject/bqcigctx.html