mysql 如何解锁_Mysql如何解锁?
概述
以下资料是网络收集外加部分个人理解,当前数据库版本:MySQL Ver 14.14 Distrib 5.7.11, for Win64 (x86_64)。
记得以前,当出现:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction,要解决是一件麻烦的事情。特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时后结束,DBA光从数据库无法着手找出源头是哪个SQL锁住了。有时候看看 show engine innodb status, 并结合 show full processlist 能暂时解决问题,但一直不能精确定位。
在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
Innodb锁
Innodb存储引擎实现了如下2种标准的行级锁:
共享锁(S lock),允许事务读取一行数据,select语句后加lock in share mode。
排它锁(X lock),允许事务删除或者更新一行数据,select语句后加for update。
当一个事务获取了行r的共享锁,那么另外一个事务也可以立即获取行r的共享锁,因为读取并未改变行r的数据,这种情况就是锁兼容。但是如果有事务想获得行r的排它锁,则它必须等待事务释放行r上的共享锁—这种情况就是锁不兼容,二者兼容性如下表格所示:
X 排它锁
S 共享锁
X 排它锁
冲突
冲突
S 共享锁
冲突
兼容
另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),不需要我们代码控制,这两种意向锁都是表锁。
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。
意向锁的作用:
因为表锁覆盖了行锁的数据,所以表锁和行锁也会产生冲突。比如A事务申请表锁,B事务申请行级锁,或者A事务申请行级锁,B事务申请表锁。这时候B事务的申请是需要被阻塞的。那么怎么判断B事务该阻塞呢?遍历表的每一行看看是否有行级锁吗?这样效率非常差。这时候就引入了意向锁。在申请行锁前,数据库自动为我们申请了对应的意向锁,因为意向锁是表锁,这时候如果再申请表锁,就自然会阻塞了。
innodb_locks
当前出现的锁
lock_id
InnoDB内部的唯一锁ID
lock_trx_id
拥有这个锁的事务ID
lock_mode
锁模式,S, X, IS, IX等
lock_type
锁类型,RECORD或者TABLE
lock_table
被锁的表或包含被锁记录的表
lock_index
被锁的索引,不是行级锁时为NULL
lock_space
被锁的表空间号,不是行级锁时为NULL
lock_page
被锁的页号,不是行级锁时为NULL
lock_rec
被锁的Heap号,不是行级锁时为NULL
lock_data
被锁的记录的主键,不是行级锁时为NULL
innodb_lock_waits
当前等待的锁
requesting_trx_id
正在请求的、受阻的事务ID
requested_lock_id
事务正在等待的锁ID
blocking_trx_id
阻塞其他事务的事务ID
blocking_lock_id
阻塞其他事务的事务持有的锁ID
innodb_trx
当前所有事务
trx_id
InnoDB内部的唯一事务ID
trx_state
事务状态,RUNNING, LOCK WAIT等
trx_started
事务开始时间
trx_requested_lock_id
事务正在等待的锁ID
trx_wait_started
事务开始等待的时间
trx_weight
事务的权重,当发生死锁回滚的时候,优先选择该值最小的进行回滚
trx_mysql_thread_id
事务线程ID,即show full processlist中的ID
trx_query
执行的SQL语句
trx_operation_state
事务当前操作状态
trx_tables_in_use
执行当前SQL时有多少个表被使用
trx_tables_locked
执行当前SQL时有多少个表有行锁
trx_lock_structs
事务保留的锁的数量
trx_lock_memory_bytes
事务锁占据的内存大小(B)
trx_rows_locked
事务锁定的大概行数
trx_rows_modified
事务修改和插入的行数
trx_concurrency_tickets
即innodb_concurrency_tickets系统变量
trx_isolation_level
事务隔离级别
trx_unique_checks
是否唯一性检查
trx_foreign_key_checks
是否外键检查
trx_last_foreign_key_error
最后的外键错误详细信息
trx_adaptive_hash_latched
trx_adaptive_hash_timeout
trx_is_read_only
1表示事务是只读的
trx_autocommit_non_locking
1表示事务是不包含FOR UPDATE或者LOCK IN SHARE MODE语句,并且autocommit是enable的
以上翻译并不完整,如果有疑问的可以参考官网。
步骤
首先:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
获取到blocking_trx_id
然后:
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
查找trx_id和上面获取到的blocking_trx_id一样的记录,获取这条记录的trx_mysql_thread_id
最后:
kill 上面获取到的trx_mysql_thread_id
这样就把阻塞其他事务的事务线程杀掉了。
mysql 如何解锁_Mysql如何解锁?相关推荐
- Oracle/Mysql查看锁表与解锁表
Oracle/Mysql查看锁表与解锁表 在ORCLA与MYSQL中,如何查看锁表与解锁表 1 Oracle 查看锁表进程SQL: select * from v$session t1, v$lock ...
- mysql锁表查询和解锁操作
mysql锁表查询和解锁操作 1.在做数据库操作时,有时会因为自己的粗心或者程序设计上的缺陷导致锁表,在mysql中查看锁表和解锁的步骤如下: //1.查看当前数据库锁表的情况SELECT * FRO ...
- MySQL表锁了如何解锁
MySQL表锁了如何解锁 SHOW PROCESSLIST; -- 运行这个条命令,会出现下面截图所示内容,找到 字段 state 值中有waiting的记录,看看是不是自己需要解锁的表 字段 i ...
- mysql主节点数据恢复_Mysql 主从复制+数据恢复
1.主服务器Master配置: #设置数据库标识 server_id=1 #任何一个事务提交之后就立即写入到磁盘中的二进制文件 sync_binlog=1 #保持数据一致性,建议配置 innodb_f ...
- iOS指纹解锁和手势解锁
前言 一直想写博客来着,一来可以记录一些自己学习和研究的东西,二来也可以将自己写的一些东西分享出去,给他人参考,还可能收到他人的一些建议,从而完善自己的项目和提升自己的技术,这也是一种很好的技术交流方 ...
- mysql 汉编码 的选_peewee连接mysql汉语言数据编码_mysql
peewee连接mysql中文数据编码 系统是win7 x64 python 2.7.6的site.py里面编码设定为 utf-8 py文件首行指定 #coding:utf-8 mysql 5.5.3 ...
- windows 新建mysql权限设置_Windows下设置MySQL安全权限_mysql
注意:本文的内容涉及到修改NTFS磁盘权限和设置安全策略,请务必在确认您了解操作可能的后果之后再动手进行任何的修改. 文中提及的权限都是在原有权限上附加的权限. [修改步骤] 1.创建用户 创建一个名 ...
- mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总
前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...
- IPAD移动端交互原型通用设计方案、ipad元件库、移动元件库、元件列表、设计元件、交互示例、界面模板、设备模板、手势图标、社交界面、音乐、电商、视图控制器、指示器、指纹解锁、手势解锁、rp元件库
IPAD移动端交互原型通用设计方案.ipad元件库.移动元件库.元件列表.设计元件.交互示例.界面模板.设备模板.手势图标.社交界面.音乐.电商.视图控制器.指示器.指纹解锁.手势解锁.rp元件库.平 ...
最新文章
- java jlist 更新_java – 更新JList
- Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
- bootstrap模态框显示控制
- object references an unsaved transient instance【异常】
- React之props基本使用
- 100多个很有用的JavaScript函数以及基础写法大集合
- 哪些蔬菜基本不会使用农药?
- 英国政府采用开源办公套件“GovOffice”
- 《永不放弃-马云给创业者的24堂课》— 综合素质提升书籍
- 内蒙古师范大学计算机与信息工程学院--《大数据存储与处理》期末考试试卷...
- 山西省计算机商务学校地址,山西计算机等级考试报名地点
- 自学通过CISSP备考心得
- java加载mysql驱动_Java 加载数据库驱动(JDBC)
- Unity中鼠标的锁定与解锁
- greenplum数据导入导出
- opencv各lib库的功能
- qt中如何模拟按钮点击_Qt 实现按钮点击切换按钮图片
- 点餐系统-C++实现
- 微信公众号每日推送给女朋友的程序
- available 的理解和一些使用