现象
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表加上一个合适的主键

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

  1. MySQL-记一次备份失败的排查过程

                山竹来临,窝在家里整理个人文档.        本篇文章主要讲解排查问题的思路,涉及linux 删除文件的原理.实例误删数据恢复.MySQL实例初始化参数优先级别等,虽然涉及知 ...

  2. 当spring 对象@Autowired 注入失败或者创建对象Bean失败、No qualifying bean/Error creating bean 的失败情形分析和解决方案

    错误信息 今天开发的过程中突然出现如下错误: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: N ...

  3. 【Azure 应用服务】备份网站时由于文件太大了,导致应用服务备份失败。如何解决?

    问题描述 备份网站时由于文件太大了,导致应用服务备份失败.如何解决呢? 问题分析 App Service (应用服务)的备份功能有10GB大小的限制,超过了是无法备份成功的并且该限制是无法扩大的.查看 ...

  4. 杀毒软件导致YourSQLDba备份失败

    有一朋友咨询我,他配置的YourSQLDba 备份作业经常出现备份失败的情况,我帮忙查看了一下,首先从告警邮件中查看出错的具体信息,执行了下面SQL语句(来自于告警邮件) Exec YourSQLDb ...

  5. YourSQLDba备份失败案例锦集

    使用YourSQLDba做备份.维护.管理时,偶尔会收到一些备份失败的邮件.导致YourSQLDba备份失败的情况比价多,打算在此篇中对YourSQLDba备份失败的案例做一些总结.整理. 1:You ...

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

    今天再做巡检的时候发现有一台服务器的RMAN备份不正常,有一段时间没能正常备份了.检查了一下脚本,正常,定时任务列表也正常,再检查一下/var/log/cron的内容,也没有问题.尝试在该挂载点上创建 ...

  7. Android开发遇到短信备份失败

    今天做了一个有关ContentProvider的短信备份的小案例,遇到短信备份失败,费了一番周折后终于找到了问题所在 该案例是将短信写到一个xml文件然后保存在手机存储中实现短信的备份功能,关键实现代 ...

  8. 执行查询“BACKUP LOG [XXX] TO DISK = N'F:\\BackData\\事务日至备份\\...”失败,错误如下:“无法执行 BACKUP LOG,因为当前没有数据库备份。 BACKUP LOG 正在异常终止。

    执行查询"BACKUP LOG [XXX] TO  DISK = N'F:\\BackData\\事务日至备份\\..."失败,错误如下:"无法执行 BACKUP LOG ...

  9. Mssql备份失败

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

随机推荐

  1. [Codeforces Round #186 (Div. 2)] B. Ilya and Queries

    B. Ilya and Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. 开心学习系列学习笔记-----nodejs缺点

    不支持故障恢复   不知你是否在调试的过程中注意,当程序有错误发生时,整个进程就会结束,需要重  新在终端中启动服务器.这一点在开发中无可厚非,但在产品环境下就是严重的问题  了,因为一旦用户访问时触 ...

  3. 如何查看linux版本

    1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version   Linux version 2.6.9-22.ELsmp (bhcompile@crowe ...

  4. hdu 六度分离

    http://acm.hdu.edu.cn/showproblem.php?pid=1869 #include <cstdio> #include <cstring> #inc ...

  5. 在C中嵌入汇编

    早前公布了C和汇编混编的温度控制器程序,收到一些朋友的询问,他们无法在自己程序中使用我的18B20的汇编子程序或无法正常通过混编后的程序编译. 其实在KEIL中嵌入汇编的方法很简单.如图一,在C文件中 ...

  6. 《Programming WPF》翻译 第3章 2.处理输入

    原文:<Programming WPF>翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标.键盘和手写板.同时,还有一种更高级输入方式,其可能来自快捷键 ...

  7. 【转】20个Java 代码生成器

    From: http://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html 1.1 CodeSmith 一款人气很旺国外的基于模板的dotne ...

  8. Linux下获取线程TID的方法——gettid()

    (转载)http://blog.csdn.net/delphiwcdj/article/details/8476547 如何获取进程的PID(process ID)? 可以使用: #include & ...

  9. KafkaOffsetMonitor监控

    介绍 KafkaOffsetMonitor是有由Kafka开源社区提供的一款Web管理界面,这个应用程序用来实时监控Kafka服务的Consumer以及它们所在的Partition中的Offset,你 ...

  10. Apache、Tomcat、JBoss、WebLogic的区别与关系

    Weblogic: 是一个企业级的应用服务器,其中包括j2ee中的各类应用如jsp,servlet,ejb等 Tomcat:   是一个初级的应用服务器,支持sp和servlet,不支持EJB,如需E ...