Skip to content

MySQL 数据库5.5版本问题 死锁

数据库版本MySQL 5.5

1. 死锁概念

• 死锁是指两个或多个事务在互相等待对方持有的资源,从而导致所有事务都无法继续执行的一种情况。

2. 问题代码如下:

• ALTER TABLE • 对表进行操作 • 同时有查询

SQL
ALTER TABLE student ADD COLUMN `age` INT DEFAULT NULL COMMENT '年龄'

出现问题 Waiting for table metadata lock 的等待场景,导致了后台服务查询缓慢,卡住。

3. 原因分析

因为 ALTER TABLE的时候导致锁表,查询的时候,就进行了排队,发生了阻塞,当程序强制退出的时候,就又是的刚才ALTER TABLE的事务没有提交,导出一直发生阻塞,造成了大量的进程发生了阻塞 。

4. 解决方式:

1.show processlist;

发现ALTER TABLE这条语句导致大量查询语句处于等待状态Waiting for table metadata lock

2.kill {id}; 将处于处于等待的进程杀掉!

5. MySQL 5.5 与 5.6 特性对比

以下是 MySQL 5.5MySQL 5.6 版本的主要功能差异对比,涵盖性能、存储引擎、优化器、复制、安全等方面:

特性MySQL 5.5MySQL 5.6
全文索引不支持支持
InnoDB online DDL不支持部分支持
REDO最大支持4 GB最大支持512 GB
刷脏单线程单独的刷脏线程
purge单线程多线程
EXCHANGE PARTITION不支持支持
DML显式指定分区不支持支持

6. 总结:MySQL 5.6 的主要优势

  1. 性能提升:通过多线程 I/O、MRR、BKA 等优化,显著提升查询和写入性能。
  2. 高可用性:支持并行复制、GTID、动态半同步复制,简化故障恢复。
  3. 易用性:Online DDL、Memcached 接口、分区表增强,减少维护停机时间。
  4. 安全性:密码策略、SSL 默认启用,提升数据保护能力。

7. 适用场景建议

  • MySQL 5.5:适合对性能要求不高、需稳定运行的传统应用,或作为旧系统迁移的过渡版本。
  • MySQL 5.6:推荐用于需要高并发、高可用性、复杂查询优化的场景(如电商平台、金融系统)。

上次更新于: