前两天遇到一个1205(ER_LOCK_WAIT_TIMEOUT)的错误,弄了半天终于找到原因,掌握原理+细心才能找到罪归祸首。下面我给大家分享下这个问题的分析处理过程,希望对大家有所帮助。接到slave error告警后,看到现场是这样的:slave重做binlog因为锁超时中断,报HA_ERR_LOCK_WAIT_TIMEOUT错误。

超时,easy啊,心想估计是有大事务长期持有锁,导致其他事务超时等待。但是这个库是只读的备库,不可能有写事务,通过show processlist命令也确实没有发现写事务,倒是有一个大查询任务。当时觉得MVCC查询不上锁啊,直接无视。我尝试重新start slave,发现没过几秒钟,错误依然出现,并且Exec_Master_Log_Pos没有变化,这说明同样的事务尝试写错误,依然被堵住,导致锁超时等待了。这一定是事务持有锁导致锁超时,但机器上除了查询,啥也木有。隔离级别,确认下隔离级别,虽然生产环境中机器都是RC(读提交)模式,但也不排除这种可能。但结果再次让我失望,事务隔离级别是读提交。

会不会是存储引擎的问题,我又验证了一把,表是innodb存储引擎,读不存在说是上表锁的情况。无语了,难道innodb的MVCC,读在某些情况下也上锁?这岂不是与读不上锁上违背吗?继续排查问题,查看锁等待情况:

select * from information_schema.innodb_lock_waits;

这说明确实有事务堵住了更新。继续,

SELECT r.trx_id waiting_trx_id,

r.trx_query waiting_query,

b.trx_id blocking_trx_id,

b.trx_query blocking_query,

b.trx_mysql_thread_id blocking_thread,

b.trx_started,

b.trx_wait_started

FROM information_schema.innodb_lock_waits w

INNER JOIN information_schema.innodb_trx b

ON b.trx_id = w.blocking_trx_id

INNER JOIN information_schema.innodb_trx r

ON r.trx_id = w.requesting_trx_id

从图中可以看到,blocking_query确实是select语句,靠,难道真是它上锁了,上的什么锁呢?

select * from information_schema.innodb_locks;

可以看到一个读锁和一个写锁,这说明了,查询的确是上了记录的读锁,锁应该都是在innodb层面加的。到底为啥会上读锁呢?

select trx_id,trx_state,trx_isolation_level from information_schema.innodb_trx;

答案揭晓了,可以看到RUNNING的事务隔离级别是SERIALIZABLE,串行化隔离级别导致读上锁,进而阻塞复制无法进行下去。

这个例子其实很简单,通过这个例子可以看到,information_schema下面的几张表太重要了,暴露了很多信息,方便我们排查问题。同时排查问题时,一定要坚信原理,并且细心,问题总会水落石出。

转载于:https://www.cnblogs.com/cchust/p/3585847.html

Mysql Error:1205错误诊断相关推荐

  1. 处理 mysql error 1205

    今天在公司修复一个小bug,一个数据在修改后没有实时的存储起来,直接改代码,修改后通过mysql语句存储起来,但是测试的时候,mysql老是存储不成功,明明看到sql语句已经执行但是通过Navicat ...

  2. mysql error 364_MySQL事务未提交致使整个表锁死

    问题及说明: 当一个SQL事务执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束:报错信息以下:html mysql> ERROR 1205 (HY000): Lock wait ...

  3. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

    前言:朋友咨询我说执行简单的update语句失效,症状如下: mysql> update order_info  set province_id=15  ,city_id= 1667  wher ...

  4. MYSQL ERROR CODE 错误编号的意义

    mysql error code(备忘) 转1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...

  5. db mysql error list / mysql tools / mysql error_list

    db mysql http://lindows.iteye.com/admin/blogs/232318 http://dev.mysql.com/doc/refman/5.1/zh/error-ha ...

  6. MySQL ERROR 1878 解决办法

    MySQL ERROR 1878报错解决办法 错误重现 Part1:大表修改字段 mysql> ALTER TABLE `erp` -> ADD COLUMN `eas_status`  ...

  7. Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法

    MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...

  8. Starting MySQL... ERROR! The server quit without updating PID file 问题解决

    Starting MySQL... ERROR! The server quit without updating PID file 问题解决 参考文章: (1)Starting MySQL... E ...

  9. Linux下mysql ERROR 1045,Mysql无法执行批处理

    Linux下mysql ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO) 每次启用mysql都出现这个 ...

  10. 启动MySQL出错: Starting MySQL….. ERROR! The server quit with

    启动MySQL出错: Starting MySQL-.. ERROR! The server quit with (2013-02-19 17:25:17) 转载▼ 标签: mysql error m ...

最新文章

  1. wamp多站点访问设置
  2. rrdtool的完整例子
  3. 如果可以,我想给这本书打十星!
  4. ubuntu14.04使用rails连接mysql数据库
  5. 7.3.7 - 并发多线程 死锁和递归锁
  6. 一点一点看JDK源码(四)java.util.ArrayList 中篇
  7. linux查看并发连接数
  8. 主持人李咏在美国去世 妻子哈文:永失我爱
  9. 旋转数组 java_数组中左旋转的Java程序
  10. go语言io reader_如何从io.Reader 中读数据
  11. java 方法描述符_整理Java编程中常用的基本描述符与运算符
  12. itest听力答案2020_itest大学英语测试答案2019
  13. 在Excel中批量生成二维码标签,标签中可添加二维码或者条形码
  14. unity打箱子小游戏demo
  15. elk笔记25--快速体验APM
  16. 如何解决推荐系统中的冷启动问题?
  17. 大数据的python基础_大数据量化之路之python基础
  18. 使用Python爬取分析政府采购网数据
  19. 计算广告-商业化体系
  20. 利用公网IP访问部署在阿里云服务器的spring boot项目(一)

热门文章

  1. Centos 6.6 Docker安装(内网坏境)
  2. 谭浩强 C程序设计 8.2 求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。...
  3. 为你解惑之WPF经典9问详解
  4. ionic3 打包错误解决:Could not resolve all files for configuration ':classpath'.
  5. ITerm2的安装和配置
  6. 羊坊店不眠夜(续集)
  7. 测试Flume-1.6.0写入HDFS(Hadoop-2.7.2)的简单实例
  8. AngularJs ngList、ngRepeat、ngModelOptions
  9. 2014年最新前端开发面试题(题目列表+答案 完整版)
  10. OEA ORM 框架中的冗余属性设计