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

来源:互联网 发布:mysql分页的大概逻辑 编辑:程序博客网 时间:2024/04/28 01:42

一、须知

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

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

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

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

二、准备

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

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

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

开启如下图的功能:


三、shell脚本

#!/bin/bash#################author:aizhen #################user=rootpasswd=000000backup_dir=/tmp/backup/ #备份数据库存放目录name_dir=$(date +%F"-%H")  #以日期作为数据库的备份命名single_database=aizhenbinlog_dir=/var/lib/mysql/binlog####备份所有的数据库(每周日使用一次)#######mysql_all(){cd $backup_dir if [ $? -ne 0 ];thenmkdir -p $backup_dirficd $backup_dir$name_dirif [ $? -ne 0 ];thenmkdir -p $backup_dir$name_dirficd $backup_dir$name_dirmysqldump -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_dirmysqldump -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_dirmysqladm -u$user -p$passwd flush-logscp $(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>&10 1 * * 1-6 /bin/bash /root/mysqldump.sh mysql_increment >/dev/null 2>&1
这里只做了全备和增量的计划任务,脚本中还有一个函数是对某些库进行备份,看各位需求咯。


原创粉丝点击