备份宽带不足,innobackupex备份导致从库不可写

一、问题描述

收到从库写入失败的报警,于是上线查看,发现主要是由备份引起,但线上的MySQL众多,其它实例都没问题,只有这个实例报了,一定有其它原因,继续查找。

首先,我们来看备份的日志,在20:14:16的时候,备份程序将idb文件备份完,然后开始准备备份frm文件,首先执行flush no_write_to_binlog tables,然后执行flush tables with read lock,这都没问题,

但这从一秒开始,会阻塞住从库的DDL和DML操作。由于备份日志太长了,下面我只截取其中的一部分重要的提示。

20:14:20的时候,提示:Finished backing up non-InnoDB tables and files,也就是从20:14:16秒开始备份frm文件,到备份结束,只用4秒,这个符合预期,没什么问题。

但接着的flush no_write_to_binlog engine logs却运行了33分钟左右,然后才执行table unlock。问题就是出在这33分钟这里,锁住的时间太久,触发了报警。

二、排查过程

1、查看log_file的参数设置,发现log_file设置成了8G,并且设置了12个文件。

> show variables like ‘%innodb_log_file%‘;
+---------------------------+------------+
| Variable_name | Value |
+---------------------------+------------+
| innodb_log_file_size | 8589934592 |
| innodb_log_files_in_group | 12 |
+---------------------------+------------+
2 rows in set (0.00 sec)

8.0G ib_logfile0
8.0G ib_logfile1
8.0G ib_logfile10
8.0G ib_logfile11
8.0G ib_logfile2
8.0G ib_logfile3
8.0G ib_logfile4
8.0G ib_logfile5
8.0G ib_logfile6
8.0G ib_logfile7
8.0G ib_logfile8
8.0G ib_logfile9

2、但调这个参数是有原因的,那就是innobackupex的需要,如果把参数改小,如下(需要重启实例),再次备份会出现报错:

修改为256M,共4个文件

show variables like ‘%innodb_log_file%‘;
+---------------------------+-----------+
| Variable_name | Value |
+---------------------------+-----------+
| innodb_log_file_size | 268435456 |
| innodb_log_files_in_group | 4 |
+---------------------------+-----------+

将文件调小之后,再次备份,出现的报错是:

xtrabackup: error: it looks like InnoDB log has wrapped around before xtrabackup could process all records due to either log copying being too slow, or log files being too small.
3880 xtrabackup: Error: xtrabackup_copy_logfile() failed.

关于这个问题,下面的文章有说明,我这个实例数据大小是2.2T,通过压缩备份之后的大小是接近1.2T,另外我们用的是异地备份,文件拷贝做了限速,所以备份花费了近12个小时,这也导致了ib_logfile文件不能调小,否则备份不成功。

3、看到一个贴子说是网络宽带的问题,后面我也测试了一下,用这个命令测试备份是否成功,innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=xxxx --password=xxxx --stream=tar  /data/tmp >/dev/null

扫日志马上完成(同一秒完成),不会导致延迟的产生。开始备份的时间是:09:45:12,开始锁表的时间是:11:05:50秒,解锁的时间是:11:05:51,相当于只锁了1秒钟,结束备份的时间是11:06:49,整个备份耗时只是81分钟左右。

参考文章

三、目前存在的风险和完善

1、这个实例在备份期间,会导致实例只读33分钟,只能提供查询,虽然是从库,但这33分钟属于从库延迟的状态,对于不允许从库延迟的业务,也是不合适的。目前这个从库没有业务,全部业务都访问主库;

2、备份锁表期间,出现从库延迟,如果这个时候主库出现硬件故障,MHA不能完成自动故障切换,会因从库延迟而提示切换失败(切换逻辑待完善)

3、针对不可写入的监控,对于这种情况引起的写入失败,不做为灾难级别的报警。

原文地址:https://www.cnblogs.com/tonnyChen/p/11429048.html

时间: 2024-11-13 10:37:50

备份宽带不足,innobackupex备份导致从库不可写的相关文章

mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数据库的数据目录,在进行恢复前,停掉mysql,然后把数据目录覆盖掉,再重启mysql. 2.热备份 Myisam存储引擎 可以使用mysqlhotcopy工具,如果此工具无法使用时,可以手工使用:flush tables with read lock;手动加读锁,然后复制mysiam表的文件做热备. inno

innobackupex 备份数据搭建 MySQL Slave

简介: 数据量比较大时,使用 innobackupex 备份数据新增 MySQL Slave 节点. 安装 innobackupex 工具,我这里写过一次:http://www.cnblogs.com/wangxiaoqiangs/p/5961413.html 场景: A -> B -> C -> D -> E 一.增加节点 C # 由于有从库 B ,所以我们去 B 上面执行备份 shell > innobackupex --user=xx --password=xx --s

使用innobackupex备份mysql数据库

1  因为使用perl脚本编写,安装前应先安装 yum install perl-Time-HiRes -y yum -y install perl-DBD-MySQL.x86_64 一起安装    yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL 2  安装最新版,使用rpm -ivh 命令 tar包下载地址 http://www.percona.com/downloads/Xtr

innobackupex备份参数slave-info、safe-slave-backup

mysql物理备份用的比较多的是innobackupex命令,备份常用,但对于里面的两个参数slave-info.safe-slave-backup一直搞的不太明白,今儿亲测了一下. 先解释一下参数意义 --slave-info :在从库进行备份时,该参数会在备份目录下生成xtrabackup_slave_info文件,文件记录主库的binlog日志位置点.在进行数据库恢复,搭建多从库时都需要这个文件. 如果在主库进行备份(在主库备份的情况很少,把主库惹怒了只能跑路了),该参数就不起作用了,主库

Xtrabackup之innobackupex备份恢复详解(转)

原文:http://ourlinux.blog.51cto.com/274624/844854 安装配置Xtrabackup先看看如何安装Xtrabackup,最简单的安装方式是使用RPM包,不过想使用源代码方式安装的话,其安装方式有点古怪,因为它采用的在MySQL源代码上打补丁构建的方式安装的.这里使用二进制包的安装方式,相对比较灵活.Shell> mkdir /usr/local/xtrabackupShell> tar -zxvf xtrabackup-1.6.tar.gz –C /us

mysql之 innobackupex备份+binlog日志的完全恢复(命令行执行模式)

前言:MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点.备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. 1. 准备实验环境mysql> select version();+------------+| version() |+------------+| 5.6.25-log |+------------+1 row in set (0.00 sec)mysql> create database com

innobackupex自动备份脚本(增量备份,自动压缩)

#!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3; j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633; print j }' } #说明:脚本执行策略为每天执行一次,执行前需要先建立config文件,并在config文件 #中添加 #backup_

非归档模式,没有备份,直接拔电导致Undo损坏

非归档模式,没有备份,直接拔电导致Undo损坏启动数据库,检查故障信息SQL> conn / as sysdbaSQL> startup pfile=' ';报错,ORA-03113:end-of-file on communucation channel查看alert log,发现文件2发生错误,导致600错误先查看文件2的名字SQL> conn / as sysdbaSQL> startup mount pfile='';SQL> select file#,status,

Mysql 备份恢复与 xtrabackup备份

1.1 备份的原因 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间. 1.1.1 备份的目录 做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到改变以前 测试:测试新功能是否可用 1.1.2 备份中需要考虑的问题 可以容忍丢失多长时间的数据: 恢复