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 日志自动做崩溃恢复。

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

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

六、其他次要内容

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

相关推荐
ltl1 小时前
Linux 异步 I/O:epoll 与 io_uring 对比
linux
ltl1 小时前
压缩算法工程实践:吞吐、比率与 CPU 权衡
linux
Linux-18741 小时前
分布式链路追踪系统之skywalking 追踪案例
云原生·skywalking·分布式链路追踪系统·应用程序性能监控·skywalking java agent·skywalking python agent
布莱克6052 小时前
理解索引:从概念到实践
数据库·mysql
fiveym2 小时前
01 - iPXE + Clonezilla 网络装机原理解析
linux·运维·服务器·网络
-今昭-4 小时前
Ansible
linux·运维·ansible
g10565591395 小时前
LAMP博客平台Wordpress实战
android·mysql·nginx·php
我不是疯子是傻子5 小时前
Qt CAN通信周期发送抖动?实测定时器精度校准与时间戳补偿方案
开发语言·数据库·qt
mounter6255 小时前
MACsec 全景解析:从技术演进、核心架构到 DPU 硬件卸载与 K8s 大规模调度实战
linux·kubernetes·linux kernel·kernel·macsec