MySQL 进阶与架构优化
MySQL 事务与锁
锁的类型
- 行级锁:锁住一行数据,提高并发能力。
- 表级锁:锁住整个表,适用于大批量操作。
- 意向锁:表级别的标记,用于加速行锁检测。
- 乐观锁:不加锁,依赖版本号控制并发更新。
- 悲观锁:先锁后操作,适用于高并发竞争场景。
死锁的处理
- MySQL 死锁检测:自动回滚代价最小的事务。
- 手动
KILL
事务:手动终止长时间阻塞事务。 - 优化索引与 SQL 语句:减少锁冲突,降低死锁概率。
MySQL 读写分离与主从同步
- 主从架构:主库处理写操作,从库处理读操作。
- Binlog 实现主从同步:
- 主库记录 Binlog。
- 从库读取 Binlog 并重放。
- 避免主从同步延迟:
- 关键业务查询主库。
- 二次查询策略(从库查不到再查主库)。
分库分表策略
水平拆分
- 水平分表:将一张大表拆成多张小表(如
users_0
,users_1
)。 - 水平分库:多个数据库存相同结构的表,降低单库压力。
垂直拆分
- 垂直分表:将一张表的不同字段拆成多张表(如
user_base
和user_detail
)。 - 垂直分库:不同业务数据存入不同数据库(如
order_db
和user_db
)。
分库分表的挑战
- 跨库 JOIN 受限:需改为应用层查询或使用中间件(如 ShardingSphere)。
- 事务一致性问题:需要分布式事务方案(如 TCC、最终一致性)。
MySQL 高可用架构
避免单点故障
- 主从复制:单主多从架构,保证数据可用性。
- MHA(MySQL High Availability):自动故障切换,支持主从切换。
- PXC(Percona XtraDB Cluster):多主集群,保证高可用。
不停机数据迁移
- 双写方案
- 代码层面双写:新旧库同步写入。
- 业务低峰期停主从同步,开启双写。
- 逐步灰度切流,保证数据一致。
- Flink CDC 方案
- 监听 Binlog 变更,实时同步数据。
MySQL 存储与性能优化
WAL(Write-Ahead Logging)
- 先写日志再写数据,确保数据持久化。
- 降低磁盘 IO,提高事务吞吐量。
Doublewrite Buffer
- 防止数据写入失败,避免数据损坏。
MySQL 缓存优化
- Buffer Pool:缓存常用数据,减少磁盘 IO。
- Query Cache(已废弃):缓存查询结果,减少 SQL 解析时间。
MySQL 其他高级特性
存在性查询:EXISTS vs. IN
- EXISTS:适用于大数据集合,只关心是否存在。
- IN:适用于小数据集合,直接匹配筛选。
存储过程
- 优点:封装逻辑,提高性能。
- 缺点:
- 可移植性差,不同数据库的 SQL 语法可能不兼容。
- 调试困难,不利于代码管理(阿里开发手册不推荐)。
评论