自动化运维,是数据库管理员的不懈追求。目前出现了一些数据库自动管理平台,但出现时间较短,不够稳定。最常用的工具依然是shell脚本。

现在需要管理的某mysql数据库,数据量在800G,使用dump备份时间过长,从而使用了网上推荐的innobackupex方式。影响备份速率的因素很多,这里就不一一讨论,也可以添加

 --parallel 参数,开启多并行度备份,但会增加服务器负荷。

以下是我写的备份脚本,要求备份目录的磁盘容量至少是数据文件的3倍以上。

#每天备份一次。一次全量,与两次增量,循环备份。备份保留三天。
#!/bin/bash
# 定义变量
user_name=root
password=""
socket="/mysqldb/home/mysql.sock"
file_cnf=/mysqldb/config/my.cnf BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"`
format_time=`date +"%Y-%m-%d_%H:%M:%S"`
#week=`date +%Y-%m-%d -d "-24hour"`
time=`date +"%Y-%m-%d"`
time_old=$( date +"%Y-%m-%d" -d "-24hour" )
backupbin=/usr/bin backdir=/mysql_backup/$time #备份目录,数据文件形式,保留一天,第二天压缩
old_dir=/mysql_backup/$time_old
redo=/mysql_backup/redofile #留存目录,tar.gz格式
out_log=/mysql_backup/info/xtrabackup_log_$format_time #innobackupex输出信息日志
time_cost=/mysql_backup/info/xtrabackup_time.txt #innobackupex记录 #创建目录 if [ ! -d "/mysql_backup/redofile" ];
then
mkdir -p /mysql_backup/redofile
fi if [ ! -f "/mysql_backup/info/xtrabackup_time.txt" ];
then
mkdir -p /mysql_backup/info/
touch /mysql_backup/info/xtrabackup_time.txt
fi #全量、增量备份
#如果今天有full,则创建incr1
if [ -d "$backdir"_full ];then
(echo "#####开始今日一次增量备份 at $BEGINTIME " ) && >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel= --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir="$backdir"_full "$backdir"_incr1 > $out_log >&
tar -czvf ${redo}\/redofile_"$time"_full.tar.gz "$backdir"_full >/dev/null >&;
rm -rf "$backdir"_full;
break; #如果今天有incr1,则创建incr2
elif [ -d "$backdir"_incr1 ];then
(echo "#####开始今日第2次增量备份 at $BEGINTIME " ) && >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel= --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir="$backdir"_incr1 "$backdir"_incr2 > $out_log >&
tar -czvf ${redo}\/redofile_"$time"_incr1.tar.gz "$backdir"_incr1 >/dev/null >&
rm -rf "$backdir"_incr1;
break; #如果昨天没有文件,则创建全量
elif [ ! -d "$old_dir"_* ];then
(echo "#####创建[新]全量备份 at $BEGINTIME " ) && >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel= --user=$user_name --password=$password --socket=$socket "$backdir"_full > $out_log >&
break; #如果昨天有incr2,则创建full
elif [ -d "$old_dir"_incr2 ];then
(echo "#####覆盖[旧]备份,创建[新]全量备份 at $BEGINTIME " ) && >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel= --user=$user_name --password=$password --socket=$socket $backdir > $out_log >&
mv "$backdir" "$backdir"_full
break; #如果昨天有full,则创建incr1
elif [ -d "$old_dir"_full ];then
(echo "#####开始第1次增量备份 at $BEGINTIME ") && >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel= --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir="$old_dir"_full "$backdir"_incr1 > $out_log >&
break; #如果昨天有incr1,则创建incr2
elif [ -d "$old_dir"_incr1 ];then
(echo "#####开始第2次增量备份 at $BEGINTIME " ) && >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel= --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir="$old_dir"_incr1 "$backdir"_incr2 > $out_log >&
break; fi #对昨天的文件压缩归档,删除三天前的文件 a=`ls /mysql_backup|grep "$time_old"_*`; if [ -d "$old_dir"_* ];then
tar -czvf ${redo}\/redofile_${a}.tar.gz "$old_dir"_* >/dev/null >&
#删除已归档文件夹 rm -rf "$old_dir"_* && echo "#####删除已归档的数据文件"$old_dir"" >>$time_cost
break;
fi #删除3天前的归档文件 find /mysql_backup/redofile/ -mtime + -name "redofile_*" && echo "#####删除3天前的归档文件">>$time_cost;
find /mysql_backup/redofile/ -mtime + -name "redofile_*" -exec rm -rf {} \; #输出时间变量
b=`(ls /mysql_backup/${*} |grep ''-'')`
ENDTIME=`date +"%Y-%m-%d %H:%M:%S"`
begin_data=`date -d "$BEGINTIME" +%s`
end_data=`date -d "$ENDTIME" +%s`
spendtime=`expr $end_data - $begin_data`
(echo "耗时 $spendtime sec 用于创建备份文件 $b") && >>$time_cost

脚本写完后,加入crontab中,我设置的是每天23点30份执行

30 23 * * * /root/innobackupex.sh

注意脚本的执行权限

恢复的脚本预计下周写完。

MYSQL-innobackupex备份脚本的更多相关文章

  1. Windows下MySQL数据库备份脚本(一)

    说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ...

  2. Windows下MySQL数据库备份脚本(二)

    说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ...

  3. Mysql 自动备份脚本

    转自: Mysql 自动备份脚本2 - - ITeye技术网站http://kangh.iteye.com/blog/2309091 备份方案: 备份主机:192.168.10.11 数据库服务器:1 ...

  4. mysql的备份脚本

    mysql的备份脚本 脚本如下 #!/bin/sh # mysql_backup.sh: backup mysql databases and keep newest 5 days backup. # ...

  5. mysql全备份脚本速查

    mysql全备份脚本 # 快捷备份方式[root@nb scripts]# cat db.backup.sh #!/bin/bashmysqldump -ubackup -pbackuppwd -P3 ...

  6. mysql数据库备份脚本

    mysql数据库备份脚本 mysql数据库分库备份脚本:[root@localhost tmp]# cat mysql.sh #!/bin/bash USER=root PASSWORD=joy4yo ...

  7. Ubuntu Server下MySql数据库备份脚本代码

    明: 我这里要把MySql数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2012_04_11.tar. ...

  8. mysql数据库备份脚本一例

    例子,mysql数据库备份脚本.vim mysql.sh #!/bin/bash DAY=`date +%Y-%m-%d` //日期以年月日显示并赋予DAY变量 SIZE=`du -sh /var/l ...

  9. MySQL 数据库备份脚本

    MySQL 数据库备份脚本 #!/bin/bash # 数据库连接信息 DB_HOST="127.0.0.1" DB_PORT="3306" DB_USER=& ...

  10. MySQL XtraBackup备份脚本

     #backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...

随机推荐

  1. Prometheus + Grafana 部署说明之「安装」

    说明 在前面的Prometheus学习系列文章里,大致介绍说明了Prometheus和Grafana的一些使用,现在开始介绍如何从头开始部署Prometheus+Grafana,来监控各个相关的指标数 ...

  2. JVM探秘:垃圾收集算法

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 垃圾收集算法 垃圾收集算法主要有标记-清除算法.复制算法.标记-整理算法.分代收集算法 ...

  3. MyBatis原理-延迟加载,一级缓存,二级缓存设置

    一.延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息. ...

  4. ResponsibilityChainPattern(责任链模式)-----Java/.Net

    职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形成一条对象链.请求并不知道具体执行请求的对象是哪一个,这样就实现了请求与处理对象之间的解耦

  5. 吴恩达机器学习笔记 - cost function and gradient descent

    一.简介 cost fuction是用来判断机器预算值和实际值得误差,一般来说训练机器学习的目的就是希望将这个cost function减到最小.本文会介绍如何找到这个最小值. 二.线性回归的cost ...

  6. 图解 kubernetes scheduler 架构设计系列-初步了解

    资源调度基础 scheudler是kubernetes中的核心组件,负责为用户声明的pod资源选择合适的node,同时保证集群资源的最大化利用,这里先介绍下资源调度系统设计里面的一些基础概念 基础任务 ...

  7. MinIO 搭建使用

    MinIO简介¶ MinIO 是一款基于Go语言的高性能对象存储服务,在Github上已有19K+Star.它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据, ...

  8. bootstrap:导航下拉菜单

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  9. 你真的看懂Android事件分发了吗?

    引子 Android事件分发其实是老生常谈了,但是说实话,我觉得很多人都只是懂其大概,模棱两可.本文的目的就是再次从源码层次梳理一下,重点放在ViewGroup的dispatchTouchEvent方 ...

  10. Linux下搭建C/C++编程环境

    Linux下搭建C/C++编程环境 1.KDevelop下载 wget -O KDevelop.AppImage https://download.kde.org/stable/kdevelop/5. ...