MySQL 死锁的恢复
- 死锁产生的原因
- 怎么产生的死锁其实是一个复杂的问题, 但归根结底就是不同的事务锁住了不同的资源, 不能释放, 又在请求其他的资源, 其他的资源被另一个事务占用, 又在等待该事务释放资源, 互相等待, 互相又无法释放资源给其他事物, 造成死锁.
- 死锁的恢复
- 重启服务器
这个方法很直接, 但如果是线上环境就不好办了, 重启很麻烦. - 断开服务器与数据库的所有连接
-- 找到 card 数据库 card 用户的所有连接, 然后把这个 id 和 kill 连起来, 然后得到一个 SQL语句, 再次执行这个新生成SQL, 会把当前用户的所有连接杀掉, 死锁会恢复, 不用重启服务器.select replace(group_concat(concat('KILL ',id,';')), ',', '') from information_schema.processlist where user='card' and db = 'card' order by 1;
- 重启服务器