mysqlbackup 备份失败的分析

现象
1、从mysqlbackup 的日志上来看是它一直处于state: Waiting for locks;
2、从mysql 层面show processlist 上看它的处于waiting for gloabl read lock

show processlist;
+-----+-------------+---------------------+------+---------+--------+----------------------------------+------------------+
| Id  | User        | Host                | db   | Command | Time   | State                            | Info             |
+-----+-------------+---------------------+------+---------+--------+----------------------------------+------------------+
| 331 | system user |                     | NULL | Connect | 215831 | Waiting for master to send event | NULL             |
| 332 | system user |                     | NULL | Connect | 252054 | Reading event from the relay log | NULL             |
| 336 | ha_op       | 127.0.0.1:36246     | NULL | Sleep   |      1 |                                  | NULL             |
| 337 | ha_op       | 127.0.0.1:36247     | NULL | Sleep   |      1 |                                  | NULL             |
| 339 | ha_op       | 192.168.56.39:44672 | NULL | Sleep   |   8816 |                                  | NULL             |
| 340 | backup      | 127.0.0.1:36267     | NULL | Sleep   |   3954 |                                  | NULL             |
| 344 | root        | 127.0.0.1:36310     | NULL | Query   |      0 | init                             | show processlist |
| 345 | backup      | 127.0.0.1:36337     | NULL | Sleep   |   1134 |                                  | NULL             |
+-----+-------------+---------------------+------+---------+--------+----------------------------------+------------------+

分析
  1、是不是有别的事务持有了X锁,使得备份用户的flush tables with read lock 一直等待

        select * from information_schema.innodb_trx \G
        *************************** 1. row ***************************
                            trx_id: 82557697
                         trx_state: RUNNING
                       trx_started: 2016-08-28 13:53:11
             trx_requested_lock_id: NULL
                  trx_wait_started: NULL
                        trx_weight: 153349
               trx_mysql_thread_id: 332
                         trx_query: NULL
               trx_operation_state: starting index read
                 trx_tables_in_use: 296
                 trx_tables_locked: 296
                  trx_lock_structs: 5759
             trx_lock_memory_bytes: 538152
                   trx_rows_locked: 295679
                 trx_rows_modified: 147590
           trx_concurrency_tickets: 0
               trx_isolation_level: REPEATABLE READ
                 trx_unique_checks: 1
            trx_foreign_key_checks: 1
        trx_last_foreign_key_error: NULL
         trx_adaptive_hash_latched: 0
         trx_adaptive_hash_timeout: 10000
                  trx_is_read_only: 0
        trx_autocommit_non_locking: 0
        1 row in set (0.01 sec)    

  2、由(分析.1)可以看出是有一事务阻塞了备份用户下发的flush tables with read lock命令、 而且可以知道这个事务是332这个session发起的;
     再结合(现象.2)可以知道332 是SQL进程

  3、由(分析.2)已经知道是复制阻塞了备份,所以接下来是要去解析当前正slave 正在应用的binlog 用于更进一步的确定问题原因
          show slave status 看到Relay_Master_Log_File: mysql-bin.000314、Exec_Master_Log_Pos: 216304949

  4、解析binlog 后发现slave 在执行delete 操作

        # at 216304997
        #160826 14:49:02 server id 192694598  end_log_pos 216305071 CRC32 0x416f0b3c    Query   thread_id=16381 exec_time=0     error_code=0
        SET TIMESTAMP=1472194142/*!*/;
        BEGIN
        /*!*/;
        # at 216305071
        #160826 14:49:02 server id 192694598  end_log_pos 216305306 CRC32 0x19b5309b    Table_map: `dcsdba`.`pre_merge_cdr_gsm` mapped to number 147
        # at 216305306
        #160826 14:49:02 server id 192694598  end_log_pos 216313252 CRC32 0xd8102d41    Delete_rows: table id 147
        # at 216313252
        #160826 14:49:02 server id 192694598  end_log_pos 216321207 CRC32 0xd73f1e3f    Delete_rows: table id 147
        # at 216321207
        #160826 14:49:02 server id 192694598  end_log_pos 216329247 CRC32 0x6331d53b    Delete_rows: table id 147
        # at 216329247
        #160826 14:49:02 server id 192694598  end_log_pos 216337393 CRC32 0xecd5041e    Delete_rows: table id 147
        # at 216337393
        #160826 14:49:02 server id 192694598  end_log_pos 216345555 CRC32 0x6284a900    Delete_rows: table id 147

  5、进一步确认问题原因是因为pre_merge_cdr_gsm表没有主键,在这种情况下slave 每删除一行都会对应一次全表扫描。

建议
1、给pre_merge_cdr_gsm表加上一个合适的主键

时间: 2024-10-11 12:26:22

mysqlbackup 备份失败的分析的相关文章

rman 备份失败 【RMAN-03002、RMAN-06059】之后优化备份

环境: centos 6.5 X64 Oracle 11g  Enterprise Edition Release 11.2.0.2.0 故障现象: rman自动备份脚本失败,报错现象: Starting backup at 30-JUL-15 current log archived released channel: disk1 released channel: disk2 released channel: disk3 released channel: disk4 RMAN-00571

MySQL xtrabackup备份失败记录

收到报警,某个端口备份失败,查看备份日志如下,显示有DDL操作导致的备份中断,查看当时的二进制日志,当时执行了一条添加字段的sql语句.目前只能重新执行备份,并修改备份时间,避免再发生类似情况. MySQL:5.7.11 xtrabackup:2.4.5 查找到官方修复bug的情况: Running DDL statements on Percona Server 5.7 during the backup process could in some cases lead to failure

Android开发遇到短信备份失败

今天做了一个有关ContentProvider的短信备份的小案例,遇到短信备份失败,费了一番周折后终于找到了问题所在 该案例是将短信写到一个xml文件然后保存在手机存储中实现短信的备份功能,关键实现代码如下 public class SmsUtils { public static void backUpSms(List<SmsInfo> smsInfos, Context context) { try { XmlSerializer serializer = Xml.newSerialize

Linux下中断程序导致写文件失败的分析

案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即写失败. 分析: 原本以为是bash重定向机制导致的问题,于是将重定向取消,改为使用fprintf,而非printf.即在C程序内部进行写文件.发现问题依旧.(排除fopen打开失败的因素) 仔细观察,发现问题集中在两个层面,一个是ctrl+c到底做了什么,二是写文件操作为什么失败. 首先,ctrl

Mssql备份失败

Mssql备份失败出现如下提示 备份时先删除默认的备份设备,自己选择路径

RMAN备份失败之:mount: block device /dev/emcpowerc1 is write-protected, mounting read-only

今天再做巡检的时候发现有一台服务器的RMAN备份不正常,有一段时间没能正常备份了.检查了一下脚本,正常,定时任务列表也正常,再检查一下/var/log/cron的内容,也没有问题.尝试在该挂载点上创建一个1.txt文件的时候,发现有异常报出来了.内容为:mount: block device /dev/emcpowerc1 is write-protected, mounting read-only.原来是因为磁盘为只读状态,不可写入,导致了备份失败. 解决办法: umount /dev/emc

幽门螺旋菌(8)_耐药及治疗失败原因分析

由于幽门螺杆菌(Helicobacter pylori, 下称H.pylori)感染与多种上胃肠道疾病密切相关,所以抗H.pylori 感染治疗的研究一直是H.pylori 研究领域中的重点.为了评估抗菌治疗效果,并客观比较不同治疗方案的差异,Graham[1] 提出了一个评分系统,该系统分A.B.C.D.F 五个级别:A 级(Excellent)是ITT > 95% :B 级(Good)是ITT 90%~94% :C 级(Acceptable)是ITT 85% - 89% :D 级(Poor)

关于注册模型失败的分析

在这个地方中,显示模型未注册.但是在nop框架中,初始化时就已经把整个系统的Model全部注册了的. 在这个地方就已经全部绑定了.所以上面的错,俺也不清楚了.不过不是绑定那就查自身Model的问题了,开始以为是依赖注入的问题,后面也看了不是的. 但是当我在Validators这个里面处理,模型验证时.发现他妈多了一个构造函数.哈哈,去掉以后所有的错误就消失了. using Nop.Admin.Models.Examination; using Nop.Services.Localization;

Citrix XenDesktop VDA升级失败案例分析

今天处理了一个关于Citrix XenDesktop VDA升级失败的案例,这里跟大家分享一下. [背景] 用户需要将现有的XenDesktop5.6的环境升级到XenDesktop7.5,Citrix支持这种场景的支持,用户在更新VDA的是否发现升级失败. [问题描述] 具体错误信息可以参考以下截图: 具体的错误信息: rror Id: XDMI:1414B9D7 Exception:     Citrix.MetaInstaller.MetaInstallerException Instal