Mysql故障排查与生产环境优化

一、故障排查常用方法

1. 连接问题排查

  • 检查网络与端口

    复制代码
    telnet <host> <port>  # 测试端口连通性
    ping <host>            # 测试网络连通性
  • 检查 MySQL 服务状态

    复制代码
    systemctl status mysql  # Linux 系统
    # 或查看进程
    ps -ef | grep mysql
  • 检查错误日志

    复制代码
    SHOW VARIABLES LIKE 'log_error';  -- 查看日志路径

    常见错误:权限不足(Access denied)、最大连接数满(Too many connections)。

2. 性能问题排查

  • 查看当前连接与进程

    复制代码
    SHOW PROCESSLIST;  -- 查看正在执行的线程
    SHOW FULL PROCESSLIST;  -- 查看完整 SQL 语句
  • 分析慢查询

    复制代码
    -- 开启慢查询日志
    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 2;  -- 定义慢查询阈值(秒)
    SHOW VARIABLES LIKE 'slow_query_log%';  -- 查看日志路径
  • 检查锁等待

    复制代码
    SHOW ENGINE INNODB STATUS;  -- 查看 InnoDB 引擎状态(含锁信息)

3. 主从复制问题排查

  • 检查复制状态

    复制代码
    SHOW SLAVE STATUS\G  -- 查看 Slave_IO_Running 和 Slave_SQL_Running 是否为 Yes
  • 常见错误

    • 主从数据不一致(Last_SQL_Error
    • 网络中断导致的连接失败
    • 二进制日志(binlog)损坏

二、生产环境优化策略

1. 配置文件优化(my.cnf)

复制代码
[mysqld]
# 内存相关
innodb_buffer_pool_size = 70-80% 物理内存  # InnoDB 缓冲池(最重要)
innodb_log_file_size = 256M-1G             # 日志文件大小
innodb_flush_log_at_trx_commit = 1         # 事务持久性(0/1/2 权衡)

# 连接与并发
max_connections = 500-2000                 # 最大连接数
thread_cache_size = 64                      # 线程缓存

# 慢查询与日志
slow_query_log = 1
long_query_time = 2
log_queries_not_using_indexes = 1           # 记录未使用索引的查询

2. SQL 与索引优化

  • 添加合适索引

    复制代码
    -- 查看索引使用情况
    SHOW INDEX FROM table_name;
    -- 创建复合索引(遵循最左前缀原则)
    CREATE INDEX idx_col1_col2 ON table_name(col1, col2);
  • 优化查询语句

    • 避免 SELECT *,只查需要的字段

    • 避免在 WHERE 子句中使用函数或表达式

    • 使用 EXPLAIN 分析执行计划:

      复制代码
      EXPLAIN SELECT * FROM table_name WHERE col = 'value';

3. 架构优化

  • 读写分离:通过主从复制实现,主库写、从库读。
  • 分库分表
    • 垂直拆分:按业务拆分表到不同库
    • 水平拆分:将大表数据拆分到多个表(如按 ID 哈希或范围)
  • 引入缓存:使用 Redis 等缓存热点数据,减少数据库压力。

三、日常运维建议

  1. 定期备份

    复制代码
    mysqldump -u root -p --single-transaction --routines --triggers db_name > backup.sql
  2. 监控与告警

    • 关注指标:QPS、TPS、连接数、缓冲池命中率、慢查询数量
    • 工具:Prometheus + Grafana、Percona Monitoring and Management (PMM)
  3. 版本升级:保持 MySQL 版本稳定,定期升级小版本修复 Bug。

四、典型故障案例

  • 死锁 :通过 SHOW ENGINE INNODB STATUS 查看最近的死锁日志,优化事务逻辑。
  • 主从延迟 :检查从库配置(如 sync_binloginnodb_flush_log_at_trx_commit),或使用并行复制。
  • 内存 OOM :调整 innodb_buffer_pool_size,避免内存溢出
相关推荐
小飞侠在吗7 小时前
【MySQL 排错】Navicat 连接 localhost 报 2002 (10061) 完整排查记录(Windows + MySQL 8.4 用户模式)
windows·mysql·adb
2501_916008891 天前
HTTPS 抓包遇到证书绑定怎么办,使用 TraceEagle 解除 App 证书校验
网络协议·计算机网络·http·网络安全·ios·adb·https
Mico181 天前
MySQL 8.0.35 基于GTID 主从复制安装增强半同步复制
android·mysql·adb
IT瑞先生2 天前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
C++、Java和Python的菜鸟2 天前
第5章 后端Web基础 (MySQL基础)
前端·mysql·adb
Mico183 天前
MySQL 8.0.35 GTID 主从复制搭建-基于GITD
android·mysql·adb
bwz999@88.com3 天前
Ubuntu24.04.4安装mysql8.0.46
adb
91刘仁德4 天前
MySQL 数据类型详解
android·笔记·mysql·adb
茶栀(*´I`*)5 天前
Android 测试入门指南:ADB 基础配置与常用设备管理命令解析
android·adb
2501_915106326 天前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp