mysqldump备份脚本(全量+增量)

一、须知

本篇文章的脚本主要针对mysql的InnoDB存储引擎。

InnoDB存储引擎:支持温备和热备。

使用mysqldump备份主要是对数据较少的数据库备份。

备份主要内容是:binlog日志。

二、准备

安装完mysql开启binlog日志功能,这个日志功能方便我们恢复数据,但当这些二进制的日志文件存储多的话可能会导致磁盘爆满。

同时我们也要开启expire_logs_days=7,可以定时清除过期的日志文件。

这项清除功能也可以,对我们的备份也有一定的帮助。

开启如下图的功能:

mysqldump备份脚本(全量+增量)_第1张图片

三、shell脚本

#!/bin/bash
################
#author:aizhen #
################
user=root
passwd=000000
backup_dir=/tmp/backup/ #备份数据库存放目录
name_dir=$(date +%F"-%H")  #以日期作为数据库的备份命名
single_database=aizhen
binlog_dir=/var/lib/mysql/binlog

####备份所有的数据库(每周日使用一次)#######
mysql_all(){
	cd $backup_dir 
	if [ $? -ne 0 ];then
		mkdir -p $backup_dir
	fi
	cd $backup_dir$name_dir
	if [ $? -ne 0 ];then
		mkdir -p $backup_dir$name_dir
	fi
	cd $backup_dir$name_dir
	mysqldump -u$user -p$passwd --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > $backup_dir$name_dir/$name_dir.sql
}

####备份某个数据库#########################
mysql_single(){
	cd $backup_dir
        if [ $? -ne 0 ];then
                mkdir -p $backup_dir
        fi
        cd $backup_dir$name_dir
        if [ $? -ne 0 ];then
                mkdir -p $backup_dir$name_dir
        fi
        cd $backup_dir$name_dir
	mysqldump -u$user -p$passwd --single-transaction -R --trigger -E --master-data --flush-logs --databases $single_database > $backup_dir$name_dir/$name_dir.sql
}

###增量备份数据库(周一到周六每天各一次)####

mysql_increment(){
	cd $backup_dir
        if [ $? -ne 0 ];then
                mkdir -p $backup_dir
        fi
        cd $backup_dir$name_dir
        if [ $? -ne 0 ];then
                mkdir -p $backup_dir$name_dir
        fi
        cd $binlog_dir
	mysqladm -u$user -p$passwd flush-logs
	cp $(ls mysql-bin.[0-9]* | head -n -1 | sort -rg | head -n 1) $backup_dir$name_dir/
}
$1
该脚本已经测试过,可以使用。只需要设置计划任务即可。

设置计划任务:

在周五实行全备。

在周一到周六实行增量备份。

因为过期日志在七天会自动清除。

[root@node5 ~]# crontab -e
0 1 * * 0 /bin/bash /root/mysqldump.sh mysql_all >/dev/null 2>&1
0 1 * * 1-6 /bin/bash /root/mysqldump.sh mysql_increment >/dev/null 2>&1
这里只做了全备和增量的计划任务,脚本中还有一个函数是对某些库进行备份,看各位需求咯。


你可能感兴趣的:(脚本编写)