xtrabackup增量备份mysql +MHA
http://blog.csdn.net/yanggd1987/article/category/2214421
https://www.centos.bz/2013/09/innobackupex-auto-backup-with-shell/
-
之前我们提到过xtrbackup备份mysql的几种方式:完整备份、增量备份、部分备份等,但是在实际生产环境中用到最多的还是增量备份,下面我们就来写一个脚本。
此脚本在https://www.centos.bz/2013/09/innobackupex-auto-backup-with-shell/基础上重新修改。
- #!/bin/bash
- #
- #
- #note:周日作完整备份,其它时间增量备份;每次增量备份后,都将incr_basedir打包压缩;若是本周最后一次增量备份,则备份完成后将本次备份内容直接打包压缩
- #每次备份的日志都会将其移动到本次备份目录中,如:0_innobackupex.log表示全备,1_innobackupex.log表示第一次增备
- #由于服务器空间有限,每周的做完整备份前会将上周的所有备份删除
- #由于压缩是对绝对路径进行压缩,因此在使用tar命令进行压缩或解压时,都是用P参数或使用tar -C
- #如果脚本停止或出错请到back_dir下查看日志,若此次备份没有问题,会将本次打印的日志转移到备份目录下
- #定义相关变量
- backup_base=/data/mysqlbak
- full_backup_dir=$backup_base/mysql_full_backup
- incr_backup_dir=$backup_base/mysql_incr_backup
- sub_incr_dir=$(date +%w)
- user=test
- password=test
- defaults_file=/etc/my.cnf
- #include_db="centos.*|mysql.*"
- error_lock_file=$backup_base/error.locked
- backup_dir=$backup_base/log
- #innobackupex性能参数
- iops=400
- mem=1GB
- thread=4
- #相关函数
- #检查命令是否执行成功
- if_sucess(){
- local command="$1"
- $command
- if [ $? -ne 0 ];then
- echo "error."
- touch $error_lock_file
- exit 1
- fi
- }
- #检查是否存在锁文件,如果存在就退出。
- check_locked(){
- if [ -f "$error_lock_file" ];then
- echo "error_lock_file found"
- exit 1
- fi
- }
- #压缩上次备份完整或增量备份
- compress_old_backup(){
- if_sucess "tar czPf ${incr_base_dir}.tar.gz $incr_base_dir"
- if_sucess "mv ${incr_base_dir}.tar.gz $backup_base/old"
- rm -rf $incr_base_dir
- }
- #程序从这里开始
- check_locked
- mkdir -p $full_backup_dir $incr_backup_dir $backup_base/old $backup_base/log
- #输入日志相关
- backup_log=${backup_dir}/${sub_incr_dir}_innobackupex.log
- exec 100> $backup_log
- exec 1>&100
- exec 2>&1
- echo ""
- echo ""
- echo "################$(date +%Y%m%d-%H:%M) start ##################"
- #周日就作完整备份,其它时间增量备份;每次增量备份后,都将basedir打包压缩;若是本周最后一次增量备份,则备份完成后将本次备份内容直接打包压缩
- if [ $sub_incr_dir -eq 0 ];then
- #删除上周完成的所有备份
- echo "################$(date +%Y%m%d-%H:%M) remove old backup ###################"
- rm -rf $backup_base/old/*
- echo "################$(date +%Y%m%d-%H:%M) start full backup ###############"
- full_date=$(date +%Y%m%d%H%M)
- if_sucess "/usr/bin/innobackupex --user=$user --password=$password --defaults-file=$defaults_file --no-timestamp --throttle=$iops --use-memory=$mem --parallel=$thread $full_backup_dir/full${sub_incr_dir}_$full_date"
- echo "incr_base_dir=$full_backup_dir/full${sub_incr_dir}_$full_date" > $backup_base/incr_base_dir.txt
- #转移日志到此次备份目录下
- if_sucess "mv $backup_log $full_backup_dir/full${sub_incr_dir}_$full_date"
- else
- #获取增量备份的basedir目录
- [ -f "$backup_base/incr_base_dir.txt" ] && incr_base_dir=$(sed -n '$p' $backup_base/incr_base_dir.txt | awk -F= '{print $2}') || exit 1
- echo "################$(date +%Y%m%d-%H:%M) start incremental backup ###############"
- incr_date=$(date +%Y%m%d%H%M)
- if_sucess "/usr/bin/innobackupex --user=$user --password=$password --defaults-file=$defaults_file --throttle=$iops --use-memory=$mem --incremental --parallel=$thread $incr_backup_dir/incr${sub_incr_dir}_${incr_date} --no-timestamp --incremental-basedir=$incr_base_dir"
- echo "incr_base_dir=$incr_backup_dir/incr${sub_incr_dir}_${incr_date}" >> $backup_base/incr_base_dir.txt
- #转移日志到此次备份目录下
- if_sucess "mv $backup_log $incr_backup_dir/incr${sub_incr_dir}_${incr_date}"
- echo "################$(date +%Y%m%d-%H:%M) start compress $incr_base_dir ###############"
- [ -d "$incr_base_dir" ] && compress_old_backup
- #若是本周最后一次增量备份,则备份完成后将备份内容直接打包压缩
- [ $sub_incr_dir -eq 6 ] && . $backup_base/incr_base_dir.txt && compress_old_backup
- fi
- exec 100>&-
- #将本地备份同步到异地
- echo "################$(date +%Y%m%d-%H:%M) stop ##################"
- echo ""
- echo ""
- echo "################$(date +%Y%m%d-%H:%M) rsync start ##################"
- /usr/bin/rsync -avz --password-file=/etc/rsync.pas $backup_base/old/ test@X.X.X.X::mysqlbak/
- echo "################$(date +%Y%m%d-%H:%M) rsync stop ##################"
要点:
1.xtrabackup虽然支持异地备份,但是无法同时实现增量备份,因为增量备份需要的incremental_basedir在异地,因此我们需要通过rsync同步
2.xtrabackup增量备份无法启用流压缩,原因同样需要incremental_basedir,因此我们脚本中每次会保留增量备份需要的incremental_basedir,使用完后再将其压缩
3.为避免xtrabackup备份过程影响mysql服务器性能并加快备份过程,需要设置相关参数,具体情况根据服务器资源来设定。
4.为方便查看打印日志,我们通过exec来记录日志,最后不要忘记关闭exec的文件描述符
实验过程中,200多个G 的数据库完整备份需要30分钟左右完成,增量备份只需10分钟左右完成。
最后,在备份完成后我们可以查看xtrabackup_info,如下:
- uuid = 1703dbc2-7cce-11e5-b351-b82a72d5ba07
- name =
- tool_name = innobackupex
- tool_command = --user=xtrabak --password=... --defaults-file=/etc/my.cnf --throttle=400 --use-memory=1GB --incremental --parallel=4 /data/mysqlbak/mysql_incr_backup/incr3_201510280101 --no-timestamp --incremental-basedir=/data/mysqlbak/mysql_incr_backup/incr2_201510270101
- tool_version = 1.5.1-xtrabackup
- ibbackup_version = xtrabackup version 2.2.9 based on MySQL server 5.6.22 Linux (x86_64) (revision id: )
- server_version = 5.6.22-log
- start_time = 2015-10-28 01:01:01
- end_time = 2015-10-28 01:13:49
- lock_time = 27
- binlog_pos = filename 'mysql-bin.000711', position 721836584
- innodb_from_lsn = 1021734207515
- innodb_to_lsn = 1025349925630
- partial = N
- incremental = Y
- format = file
- compact = N
- compressed = N
- encrypted = N
来查看本次备份的start_tiime,end_time以及lock_time,为什么会有lock_time呢?
因此innobackupex先会备份innodb引擎的数据库,此过程不会锁表;然后再全库锁表,备份myisam引擎的数据库,因此会有一个lock_time;从info信息中还可以得到其他可用信息。另innobackupex的全库锁表时也可能会导致整个备份过程很长。
版权声明:本文为博主原创文章,未经博主允许不得转载。
xtrabackup增量备份mysql +MHA的更多相关文章
- mysql xtrabackup增量备份
mysql 增量备份策略 周一全备,其他增量备份,根据业务需要,设定保留日期,如保留一月. 增量备份步骤; 1 创建全备 2 根据全备目录,创建增量备份 3 第二次增量备份根据第一次增量备份目录,依次 ...
- XtraBackup增量备份
mysql:5.6.29xtrabackup:2.2.10mysql数据目录:/data/mysqlmysql备份目录:/data/dbbak/ #确保有足够的磁盘空间 官方文档:https://ww ...
- innobackupex 备份 Xtrabackup 增量备份
Mysql增量备份Xtrabackup中包含两个工具:• xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表(MYISAM表).• i ...
- Xtrabackup 增量备份 和 增量还原
目录 测试数据准备 进行全量备份 第一次增量插入一条数据 进行第一次增量备份 注意 第二次增量插入一条数据 进行第二次增量备份 注意 查看xtrabackup_binlog_info中的binlog位 ...
- xtrabackup增量备份MySQL-5.7操作说明
下载工具 本方法利用xtrabackup二进制包,版本是2.4.26 # 从官网下载二进制包:wget https://downloads.percona.com/downloads/Percona- ...
- xtrabackup 增量备份(InnoDB)
mysql> select * from users; +----+-----------+----------+--------------+ | id | name | password | ...
- 16、xtrabackup 增量备份及恢复
备份命令如下 备份命令如下 全量备份 # innobackupex -p123123 /backup # ls /backup 2017-04-08_13-36-11 增量备份或差量备份 # inn ...
- 完整和增量备份MySQL脚本
本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法 ...
- shell脚本 binlog方式增量备份mysql
一.简介 源码地址 日期:2018/4/12 介绍:复制Binlog日志方式的增量备份脚本,并保存固定天数的备份 效果图: 二.使用 适用:centos6+ 语言:中文 注意:使用前先修改脚本中变量 ...
随机推荐
- [Apple开发者帐户帮助]六、配置应用服务(1.2)Apple Pay:在网络上配置Apple Pay
网上Apple Pay允许用户在您的网络应用中购买商品和服务. 首先在您的开发者帐户中创建一个商家标识符,该标识符可以将Apple Pay唯一标识为能够接受付款的商家.您可以为多个本机和Web应用程序 ...
- netty百万连接跟踪记录
0. 启动客户端和服务端 # 测试环境: centos7 jdk8 2核16G# 服务端启动nohup java -Xmx8192m -Xms4096m -XX:+UseG1GC -XX:Parall ...
- Redis(五)-数据库
Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以将制定的书存储在哪个字典中,这与关系书库实例中可以i创建多个数据库类似,所以可以将其中的每个字典 ...
- Cracking the Coding Interview 8.7
Given a infinite number of quarters(25cents), dimens(10cents), nickels(5cents) and pennies(1cent), w ...
- CentOS7 搭建Kafka(一)zookeeper篇
CentOS7 搭建Kafka(一)zookeeper篇 近几年当红小生Kafka备受各路英雄好汉追捧,一点不比老前辈RabbitMQ和ActiveMQ差,因为流行,所以你就得学啊:我这么懒,肯定是不 ...
- ACM_开心消消乐
开心消消乐 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大白最近喜欢上了开心消消乐,于是英语基础好的他准备让课文中英语句子也来 ...
- 【HTTP】长连接和短连接
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...
- 酷派 5267 刷入第三方 recovery教程 刷机 ROOT
准备工作: 一台电脑: 酷派5267手机: 一张内存卡: 下载好刷机资料: http://pan.baidu.com/s/1i4LoVh7 备用下载: http://pan.baidu.com/s/ ...
- poj 1564 Sum It Up 搜索
题意: 给出一个数T,再给出n个数.若n个数中有几个数(可以是一个)的和是T,就输出相加的式子.不过不能输出相同的式子. 分析: 运用的是回溯法.比较特殊的一点就是不能输出相同的式子.这个可以通过ma ...
- C# 截取字符串基本
#region --构建字符串处理 string str1 = "123AAA456AAAA789AAAAAAA1011"; string str2 = "1234567 ...