Mysql Error:1205错误诊断
前两天遇到一个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错误诊断相关推荐
- 处理 mysql error 1205
今天在公司修复一个小bug,一个数据在修改后没有实时的存储起来,直接改代码,修改后通过mysql语句存储起来,但是测试的时候,mysql老是存储不成功,明明看到sql语句已经执行但是通过Navicat ...
- mysql error 364_MySQL事务未提交致使整个表锁死
问题及说明: 当一个SQL事务执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束:报错信息以下:html mysql> ERROR 1205 (HY000): Lock wait ...
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
前言:朋友咨询我说执行简单的update语句失效,症状如下: mysql> update order_info set province_id=15 ,city_id= 1667 wher ...
- MYSQL ERROR CODE 错误编号的意义
mysql error code(备忘) 转1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...
- 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 ...
- MySQL ERROR 1878 解决办法
MySQL ERROR 1878报错解决办法 错误重现 Part1:大表修改字段 mysql> ALTER TABLE `erp` -> ADD COLUMN `eas_status` ...
- Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...
- Starting MySQL... ERROR! The server quit without updating PID file 问题解决
Starting MySQL... ERROR! The server quit without updating PID file 问题解决 参考文章: (1)Starting MySQL... E ...
- Linux下mysql ERROR 1045,Mysql无法执行批处理
Linux下mysql ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO) 每次启用mysql都出现这个 ...
- 启动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 ...
最新文章
- wamp多站点访问设置
- rrdtool的完整例子
- 如果可以,我想给这本书打十星!
- ubuntu14.04使用rails连接mysql数据库
- 7.3.7 - 并发多线程 死锁和递归锁
- 一点一点看JDK源码(四)java.util.ArrayList 中篇
- linux查看并发连接数
- 主持人李咏在美国去世 妻子哈文:永失我爱
- 旋转数组 java_数组中左旋转的Java程序
- go语言io reader_如何从io.Reader 中读数据
- java 方法描述符_整理Java编程中常用的基本描述符与运算符
- itest听力答案2020_itest大学英语测试答案2019
- 在Excel中批量生成二维码标签,标签中可添加二维码或者条形码
- unity打箱子小游戏demo
- elk笔记25--快速体验APM
- 如何解决推荐系统中的冷启动问题?
- 大数据的python基础_大数据量化之路之python基础
- 使用Python爬取分析政府采购网数据
- 计算广告-商业化体系
- 利用公网IP访问部署在阿里云服务器的spring boot项目(一)
热门文章
- Centos 6.6 Docker安装(内网坏境)
- 谭浩强 C程序设计 8.2 求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。...
- 为你解惑之WPF经典9问详解
- ionic3 打包错误解决:Could not resolve all files for configuration ':classpath'.
- ITerm2的安装和配置
- 羊坊店不眠夜(续集)
- 测试Flume-1.6.0写入HDFS(Hadoop-2.7.2)的简单实例
- AngularJs ngList、ngRepeat、ngModelOptions
- 2014年最新前端开发面试题(题目列表+答案 完整版)
- OEA ORM 框架中的冗余属性设计