自动化运维,是数据库管理员的不懈追求。目前出现了一些数据库自动管理平台,但出现时间较短,不够稳定。最常用的工具依然是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. 程序员必须掌握的性能调优 X Y Z

    热评博文:<如何设计出优美的Web API?>,现阅读量超 2500,小伙伴们不要错过哦! 2003 ~ 2008 年,这五年老兵哥我在通信行业做实习生和开发岗,主要用 C / C++ / ...

  2. 力扣90——子集 II

    原题 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], ...

  3. 从零开始のcocos2dx生活(一)内存管理

    cocos中所有的对象都是继承自Ref基类,Ref的职责就是对对象进行引用计数管理 内存管理中最重要的是三个方法retain().release().autorelease() 在cocos中创建对象 ...

  4. ES6异步操作之Promise

    一直以来觉得异步操作在我心头像一团迷雾,可是它重要到我们非学不可,那就把它的面纱解开吧. ES6 诞生以前,异步编程的方法,大概有下面四种. 回调函数 事件监听 发布/订阅 Promise 对象 异步 ...

  5. SQL练习题(一)

    目录 题目一:交换性别(简单) 实现思路 提交代码 题目二:连续出现的数字(中等) 实现思路 方式一 方式二 提交代码 方式一 方式二 题目三:换座位(中等) 实现思路 方式一 方式二 提交代码 方式 ...

  6. Java手写数组栈

    public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 ...

  7. map文件分析

    1.MAP文件基本概念 段(section):描述映像文件的代码和数据块 RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码) RW:Read-Write的缩写,主要 ...

  8. 图解kubernetes scheduler基于map/reduce模式实现优选阶段

    优选阶段通过分map/reduce模式来实现多个node和多种算法的并行计算,并且通过基于二级索引来设计最终的存储结果,从而达到整个计算过程中的无锁设计,同时为了保证分配的随机性,针对同等优先级的采用 ...

  9. mysql安装忘记初始密码怎么办

    title: MySQL安装过程忘记初始密码最简单最简单解决办法 MySQL安装过程忘记初始密码最简单解决办法 ​ 在安装MySQL的时候会给定一个初始的密码,而这个初始的密码特别恶心人一堆大小写特殊 ...

  10. Python工具类(二)—— 操作时间相关

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '操作时间的工具类' "" ...