MySQL 维护稳定系统【MySQL第二课】

MySQL 维护稳定系统

这一章主要讲怎么把 MySQL 维护得稳定、排查性能问题、容量规划、锁问题、故障恢复这些内容。

一、稳定系统的基础

想要数据库稳定,硬件、虚拟机环境、操作系统、网络、应用程序这些环节都不能出问题。硬件故障、虚拟化资源争抢、磁盘性能差、网络波动,都会直接搞崩 MySQL。共享服务器上面别的程序抢资源,也会拖累数据库,这部分简单了解就行。

二、容量规划(重点)

要提前做好容量规划,不能等资源跑满了再处理。

  1. 监控指标:持续监控 CPU、内存、磁盘 IO、磁盘空间,看资源增长趋势,提前预判压力。
  2. 计算存储大小:可以通过估算表的行大小,或者直接查询 information_schema,也可以看文件系统,算出数据大概占多少存储空间。
  3. 可扩展性
  • 横向扩展:多加多台服务器分担压力。
  • 纵向扩展:给单台机器升级 CPU、内存硬件。

要提前做压力测试,验证扩容之后能不能扛住业务访问。

三、排查问题思路(重点)

数据库出问题的时候, 不能乱改配置。

  1. 先确定问题:是突然变慢,还是慢慢变差;是一直报错,还是特定时间才出问题。对比系统、MySQL 历史状态,找到变化点。
  2. 收集信息:日志、系统资源、SQL 执行情况,定位到底是硬件、配置、SQL 语句,还是应用侧的问题。
  3. 定位慢查询:大部分性能问题,根源都是写得不好的 SQL。可以优化 SQL、调整索引来提升效率。

四、InnoDB 锁机制(本章核心重点)

InnoDB 会有各种各样的锁,锁冲突会造成等待、SQL 卡住。

  1. 锁的类型:行锁、表锁,还有意向锁。事务之间抢锁,就会出现锁等待,严重直接死锁。
  2. 排查锁等待:可以用show engine innodb status,还有performance_schema、information_schema里面相关的锁视图,查看是谁在持有锁,哪个会话在等待锁。
  3. 出现锁等待,会影响业务吞吐量,写业务 SQL 的时候要尽量减少锁冲突,缩短事务执行时间。

五、InnoDB 故障恢复(重点)

数据库异常断电、崩溃之后,InnoDB 依靠 redo、undo 日志自动做崩溃恢复。

启动的时候会读取日志,把已经提交的数据落盘,回滚没提交的事务,保证数据一致性。

如果遇到损坏,也可以调整启动参数尝试强制恢复,抢救数据,不过强制恢复会有数据丢失风险。

六、其他次要内容

简单提了测试实例搭建、系统参数调整,配置修改之后要观察数据库运行状态。数据库维护核心就是:持续监控、提前规划容量、遇到故障按步骤排查、重点处理锁和崩溃恢复。

相关推荐
清风玉骨28 分钟前
zero3W的镜像制作和镜像烧录
linux
光电笑映30 分钟前
Linux 线程编程:从进程、分页到线程控制与封装
linux·运维·服务器·c++
天衍四九-32 分钟前
Agent Skills从入门到工程化(十六):面试中如何讲清楚 Agent Skills?
大数据·数据库·人工智能·python·chatgpt·面试
wzg20161 小时前
本地部署Deepseek-coder + Vscode + Continue 插件(3)启动与关闭deepseek-coder大模型
linux·运维·服务器
H_oRIZoN_1 小时前
Linux入门DAY37(IO 多路复用、TCP 并发服务器与数据库 SQLite3 详解)
linux·服务器·数据库
新时代牛马1 小时前
Linux 块设备驱动完整篇:从gendisk、submit_bio 到blk-mq queue_rq 与排障
linux·运维·服务器
2501_930472441 小时前
05_数据库迁移腾讯云_DTS评估与预检回滚清单
数据库·云计算·腾讯云
三8441 小时前
SSRF 从入门到实战(下篇):gopher 打 Redis 实现 RCE
数据库·redis·缓存
Rsingstarzengjx1 小时前
第二十六章 Linux 蜂鸣器实验笔记
linux·驱动开发·笔记·stm32·嵌入式硬件·stm32mp157
玉&心1 小时前
在dockers desktop上面部署k8s的前端和后端
云原生·容器·kubernetes