MYSQL-innobackupex备份脚本
自动化运维,是数据库管理员的不懈追求。目前出现了一些数据库自动管理平台,但出现时间较短,不够稳定。最常用的工具依然是shell脚本。
现在需要管理的某mysql数据库,数据量在800G,使用dump备份时间过长,从而使用了网上推荐的innobackupex方式。影响备份速率的因素很多,这里就不一一讨论,也可以添加
以下是我写的备份脚本,要求备份目录的磁盘容量至少是数据文件的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备份脚本的更多相关文章
- Windows下MySQL数据库备份脚本(一)
		说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ... 
- Windows下MySQL数据库备份脚本(二)
		说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ... 
- Mysql 自动备份脚本
		转自: Mysql 自动备份脚本2 - - ITeye技术网站http://kangh.iteye.com/blog/2309091 备份方案: 备份主机:192.168.10.11 数据库服务器:1 ... 
- mysql的备份脚本
		mysql的备份脚本 脚本如下 #!/bin/sh # mysql_backup.sh: backup mysql databases and keep newest 5 days backup. # ... 
- mysql全备份脚本速查
		mysql全备份脚本 # 快捷备份方式[root@nb scripts]# cat db.backup.sh #!/bin/bashmysqldump -ubackup -pbackuppwd -P3 ... 
- mysql数据库备份脚本
		mysql数据库备份脚本 mysql数据库分库备份脚本:[root@localhost tmp]# cat mysql.sh #!/bin/bash USER=root PASSWORD=joy4yo ... 
- Ubuntu Server下MySql数据库备份脚本代码
		明: 我这里要把MySql数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2012_04_11.tar. ... 
- mysql数据库备份脚本一例
		例子,mysql数据库备份脚本.vim mysql.sh #!/bin/bash DAY=`date +%Y-%m-%d` //日期以年月日显示并赋予DAY变量 SIZE=`du -sh /var/l ... 
- MySQL 数据库备份脚本
		MySQL 数据库备份脚本 #!/bin/bash # 数据库连接信息 DB_HOST="127.0.0.1" DB_PORT="3306" DB_USER=& ... 
- MySQL XtraBackup备份脚本
		#backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ... 
随机推荐
- 互联网 Java 工程师进阶知识完全扫盲
			互联网 Java 工程师进阶知识完全扫盲:https://github.com/doocs/advanced-java 
- form表单提交方式实现浏览器导出Excel
			刚开始使用ajax做Excel导出,发现ajax做不了浏览器导出只能下载到本地,于是用form提交可以提供浏览器下载Excel. 1>用ajax做本地下载: FileOutputStream f ... 
- Kerrigan:配置中心管理UI的实现思路和技术细节
			去年写过一篇文章『中小团队落地配置中心详解』,介绍了我们借助etcd+confd实现的配置中心方案,这是一个对运维友好,与开发解耦的极佳方案,经过了一年多的实践也确实帮我们解决了配置文件无版本.难回滚 ... 
- Spring 配置内容外部化
- openLayers中WMTS结合GeoServer呈现瓦片地图
			首先看openlayers官网中wmts模块,https://openlayers.org/en/latest/apidoc/module-ol_source_WMTS-WMTS.html,里面的参数 ... 
- 洛谷P1638 逛画展 题解 尺取法/双指针/队列
			题目链接:https://www.luogu.com.cn/problem/P1638 题目大意: 给你一个长度为 \(n (\le 10^6)\) 的数组,数组中每个元素的范围在 \(1\) 至 \ ... 
- Mybatis是如何实现SQL防注入的
			Mybatis这个框架在日常开发中用的很多,比如面试中经常有一个问题:$和#的区别,它们的区别是使用#可以防止SQL注入,今天就来看一下它是如何实现SQL注入的. 什么是SQL注入 在讨论怎么实现之前 ... 
- 《深入理解JAVA虚拟机》-自己动手编译JDK
			环境 Ubuntu12.4-http://mirrors.163.com/ubuntu-releases/12.04/ --需要安装纯英文版,避免中文引起不必要的麻烦 OpenJDK7-https:/ ... 
- Faceted project metadata file "/.settings/org.eclipse.wst.common.project.facet.core.xml" could not be read
			转载自 https://blog.csdn.net/qing_gee/article/details/79397052 Eclipse启动后项目报了下图这个错误,说是org.eclipse.wst.c ... 
- 【xinsir】webpack实践
			webpack现在是前端必会的技能了,也是在工作中必定用到的.所以,如果我们现在还不会webpack,那么在将来面试中肯定会被扣分的. webpack中文官网:https://www.webpackj ... 
