自动化运维,是数据库管理员的不懈追求。目前出现了一些数据库自动管理平台,但出现时间较短,不够稳定。最常用的工具依然是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. python基础[16]——解决django连接mysql数据库报错的问题

    Models.py #创建数据表 from django.db import models from django.utils import timezone from tinymce.models ...

  2. Spark RDD的弹性到底指什么

    RDD(Resiliennt Distributed Datasets)抽象弹性分布式数据集对于Spark来说的弹性计算到底提现在什么地方? 自动进行内存和磁盘数据这两种存储方式的切换 Spark 可 ...

  3. 洛谷p1119--灾难后重建(Floyd不仅仅是板子)

    问题描述 询问次数  5 000 00,   顶点数  200 怎么办? dijkstra?对不起,超时了/. 时间限制是1秒,询问5 000 00 ,每次dijsktra要跑n*n*logm 次,稳 ...

  4. 使用EF操作Docker中的Mysql实例

    为啥我会选择mysql呢?因为我的服务器配置较低,而SqlServer在docker中的实例,服务器的运行内存应当保持在2G+,我没有这个条件,它会爆出这样的错误 sqlservr: This pro ...

  5. fiddler 手机 https 抓包

    fiddler手机抓包原理fiddler手机抓包的原理与抓pc上的web数据一样,都是把fiddler当作代理,网络请求走fiddler,fiddler从中拦截数据,由于fiddler充当中间人的角色 ...

  6. 1038 统计同成绩学生 (20 分)C语言

    题目描述 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入描述: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1 ...

  7. .Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享

    前言:虽说公司app后端使用的是.net core+Redis+docker+k8s部署的,但是微信公众号后端使用的是IIS部署的,虽说公众号并发量不大,但领导还是使用了负载均衡,所以在介绍docke ...

  8. JAVA并发之锁获取步骤及锁优化

    在另外的两篇文章中先后介绍了轻量级同步关键字volatile和重量级锁关键字synchronized,这两个关键字是Java语言中进行线程同步的基本方式(当然还有ReentrenLock等显式锁方式) ...

  9. CAS的实现原理

    CAS的全称是CompareAndSwap,比较并交换,是Java保证原子性的一种重要方法,也是一种乐观锁的实现方式. 它需要先提前一步获取旧值,然后进入此方法比较当下的值是否与旧值相同,如果相同,则 ...

  10. python防止字符串转义

    部分转自:https://www.cnblogs.com/hellofengying/p/10183057.html 今天再打开文件名时,出现了错误,如下: In []: path='D:\Code\ ...