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

雨燕双飞 提交于 2019-12-16 13:23:46

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

## 前提

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

​    但是每次都直接导出整个数据库的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](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xODU1NzgxMy05YzcxMDlkZjgzMmJlOTc2LnBuZw?x-oss-process=image/format,png)

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

![微信图片_20190614200326.jpg](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xODU1NzgxMy03NjJmYTFlOGFlOWZjMjk3LmpwZw?x-oss-process=image/format,png)

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

![微信图片_20191111194455.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xODU1NzgxMy1iZjlkMjQzYjg5OWIyYTA1LnBuZw?x-oss-process=image/format,png)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!