1、MySQL故障排查与运维案例

MySQL故障排查与运维案例全集

一、连接类故障

1. 连接超时

现象ERROR 2003 (HY000): Can't connect to MySQL server on 'host' (110 "Connection timed out")
排查流程

bash 复制代码
# 检查网络连通性
nc -zv host 3306
mtr host

# 检查防火墙
iptables -L -n | grep 3306

# 验证连接数限制
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
2. 认证失败

案例 :升级后密码策略变更导致应用连接失败
解决方案

sql 复制代码
-- 创建传统认证用户
CREATE USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

-- 临时降低密码强度
SET GLOBAL validate_password_policy=LOW;

二、性能类故障

1. CPU 100%问题

诊断步骤

sql 复制代码
-- 查找高消耗SQL
SELECT * FROM sys.processlist WHERE COMMAND != 'Sleep' ORDER BY TIME DESC;

-- 使用Performance Schema
SELECT * FROM performance_schema.threads WHERE PROCESSLIST_TIME > 60\G

-- 分析慢查询
SHOW ENGINE INNODB STATUS;
2. 慢查询优化案例

场景 :订单查询超时
调优方案

sql 复制代码
-- 添加复合索引
ALTER TABLE orders ADD INDEX idx_customer_status (customer_id, status);

-- 重写查询语句
SELECT /*+ INDEX(idx_customer_status) */ * FROM orders 
WHERE customer_id=123 AND status IN ('shipped','completed');

三、复制类故障

1. 主从数据不一致

检测工具

bash 复制代码
# 安装校验工具
wget https://downloads.percona.com/downloads/percona-toolkit/3.5.0/binary/tarball/percona-toolkit-3.5.0_x86_64.tar.gz

# 数据一致性校验
pt-table-checksum -h master -u user -p pass --databases mydb
2. 主从延迟

优化方案

ini 复制代码
# my.cnf 优化
[mysqld]
slave_parallel_workers = 8
slave_pending_jobs_size_max = 2G
innodb_flush_log_at_trx_commit = 0
sync_binlog = 1000

四、数据恢复类

1. 误删除恢复

步骤

bash 复制代码
# 停止MySQL服务
systemctl stop mysqld

# 使用mysqlbinlog恢复
mysqlbinlog --start-position=107 /var/log/mysql-bin.000001 | mysql -uroot -p

# 使用延时从库恢复
STOP SLAVE;
CHANGE MASTER TO MASTER_DELAY = 3600;
START SLAVE;
2. 分区表数据丢失

案例 :DROP PARTITION误操作
解决方案

sql 复制代码
-- 从备份恢复单分区
ALTER TABLE logs IMPORT PARTITION p202301 
    FROM '/backup/202301_partition.ibd';

五、高可用故障

1. MHA切换失败

诊断流程

bash 复制代码
# 检查SSH互信
masterha_check_ssh --conf=/etc/mha/app1.cnf

# 检查复制健康
masterha_check_repl --conf=/etc/mha/app1.cnf

# 查看管理日志
tail -f /var/log/masterha/app1/manager.log
2. InnoDB Cluster脑裂

修复方案

sql 复制代码
-- 强制重启集群
dba.rebootClusterFromCompleteOutage('cluster1');

-- 人工重新组集群
SELECT * FROM performance_schema.replication_group_members;

六、存储引擎故障

1. InnoDB损坏修复

修复步骤

bash 复制代码
# 强制恢复模式启动
innodb_force_recovery = 6

# 导出数据
mysqldump -uroot -p --all-databases > full_backup.sql

# 重建数据库
mysql_install_db --user=mysql
systemctl start mysqld
mysql -uroot -p < full_backup.sql

七、内存问题

1. OOM崩溃

优化方案

ini 复制代码
# my.cnf内存优化
[mysqld]
innodb_buffer_pool_size=64G
key_buffer_size=0
query_cache_size=0
table_open_cache=20000

八、安全相关

1. 入侵检测

处理流程

sql 复制代码
-- 查找异常账号
SELECT * FROM mysql.user WHERE authentication_string='' \G

-- 检查数据库文件权限
ls -l /var/lib/mysql

-- 审计可疑操作
mysqlbinlog /var/log/mysql-bin.000007 | grep -i 'ALTER\|CREATE\|DROP'

九、备份恢复

1. 大库备份优化
bash 复制代码
# Xtrabackup部分备份
xtrabackup --backup --databases="db1 db2" --target-dir=/backup/partial

# mysqldump分片备份
mysqldump -uroot -p db1 | split -b 2G - db1_part_

十、升级问题

1. 5.7升级8.0兼容问题

解决方案

sql 复制代码
-- 开启兼容SQL模式
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

-- 移除废弃功能
ALTER TABLE mytable ROW_FORMAT=DYNAMIC;

十一、配置错误

1. 参数误设置

恢复方法

bash 复制代码
# 安全模式启动,高版本中不可用
mysqld_safe --skip-grant-tables --skip-networking &

# 重置配置
SET GLOBAL max_connections=100;
FLUSH PRIVILEGES;

十二、工具速查表

工具名称 使用场景 命令示例
pt-query-digest 慢日志分析 pt-query-digest slow.log > report.txt
mysqladmin 进程管理 mysqladmin -u root -p processlist
Percona Toolkit 运维工具包 pt-online-schema-change
Mylogger 实时审计 mylogger -u root -p pass -h localhost
MySQL Shell InnoDB Cluster管理 dba.checkInstanceConfiguration()

十三、关键监控指标

指标 报警阈值 获取方式
连接使用率 > 85% Threads_connected/max_connections
复制延迟(秒) > 60 SHOW SLAVE STATUS
InnoDB缓冲池命中率 < 95% (1 - Innodb_pages_read/Innodb_buffer_pool_read_requests)*100
临时表磁盘使用 > 1G Created_tmp_disk_tables
锁等待时间(秒) > 5 SHOW ENGINE INNODB STATUS

十四、灾难恢复流程

  1. 立即停止服务systemctl stop mysqld

  2. 保护现场:拷贝数据目录和日志文件

  3. 评估损坏

    bash 复制代码
    innochecksum -v /var/lib/mysql/ibdata1
    mysqlcheck --all-databases
  4. 选择恢复方案

    • 从主备份恢复
    • 使用Binlog增量恢复
    • 重建数据库结构
  5. 验证完整性pt-table-checksum

  6. 灰度恢复服务

十五、最佳实践总结

  1. 备份策略
    • 每天全备 + Binlog实时同步
    • 备份恢复演练每月一次
  2. 高可用架构
    半同步复制
    应用
    ProxySQL
    Primary
    Replica1
    Replica2
    Secondary
  3. 参数调优原则
    • buffer_pool_size = 系统内存的70-80%
    • max_connections = (最大连接数+冗余)
    • sync_binlog = 1 (数据安全) / 1000 (性能优先)
  4. 安全基线
    • 禁用local-infile
    • 删除test数据库
    • 启用SSL连接
    • 审计插件开启

黄金准则:

  1. 任何参数修改前进行SET GLOBAL测试
  2. 维护窗口操作必须有回滚计划
  3. 生产环境变更遵循"变更三板斧":方案评审->灰度实施->结果验证
相关推荐
Run_Teenage2 小时前
Linux:认识信号,理解信号的产生和处理
linux·运维·算法
小臭希2 小时前
Redis(NoSQL数据库,Linux-Ubuntu环境下)
数据库·redis·缓存
cdcdhj2 小时前
在window下将Mongodb单机改为副本集,只用于测试环境,实际上并没有增加真的副本集
数据库·mongodb
悟空码字2 小时前
MySQL性能优化的天花板:10条你必须掌握的顶级SQL分析技巧
java·后端·mysql
xcjbqd02 小时前
如何修改Oracle服务器默认的日期格式_NLS_DATE_FORMAT全局配置
jvm·数据库·python
HealthScience2 小时前
SpliceVarDB数据集说明
数据库·oracle
Deitymoon2 小时前
linux——TCP服务器获取客户端IP地址
linux·服务器·tcp/ip
倔强的石头_2 小时前
表空间自动目录创建与存储管理实践:参数化配置与性能优化
数据库
CDN3602 小时前
高防服务器磁盘 / CPU 爆满?攻击引流与资源扩容实战
运维·服务器·网络协议