Skip to content

MariaDB 故障排查工具

系统级工具

top/htop

功能说明

实时监控系统 CPU、内存、磁盘 I/O 和进程状态,用于快速定位系统资源瓶颈。

使用方法

bash
top -p $(pgrep -d',' mysql)

关键指标

  • CPU 使用率:%CPU 列显示每个进程的 CPU 使用率
  • 内存使用率:%MEM 列显示每个进程的内存使用率
  • 负载平均值:1、5、15 分钟的系统负载
  • 进程状态:R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸)

vmstat

功能说明

监控系统虚拟内存、进程、CPU 活动等,用于分析系统性能瓶颈。

使用方法

bash
vmstat 1 10  # 每秒采样一次,共采样10次

关键指标

  • procs:r(运行队列中的进程数)、b(阻塞的进程数)
  • memory:swpd(使用的交换空间)、free(空闲内存)、buff(缓冲区)、cache(缓存)
  • cpu:us(用户空间 CPU 使用率)、sy(系统空间 CPU 使用率)、id(空闲 CPU 使用率)、wa(等待 I/O 的 CPU 使用率)

iostat

功能说明

监控磁盘 I/O 性能,用于分析磁盘瓶颈。

使用方法

bash
iostat -dx 1 10  # 每秒采样一次,共采样10次,显示详细的磁盘统计信息

关键指标

  • r/s:每秒读取次数
  • w/s:每秒写入次数
  • rkB/s:每秒读取字节数
  • wkB/s:每秒写入字节数
  • await:平均 I/O 等待时间(毫秒)
  • svctm:平均 I/O 服务时间(毫秒)
  • %util:磁盘利用率

netstat/ss

功能说明

查看网络连接状态,用于分析网络问题。

使用方法

bash
netstat -an | grep 3306  # 查看3306端口的连接状态
ss -an | grep 3306       # 查看3306端口的连接状态,比netstat更高效

关键指标

  • State:连接状态(LISTEN、ESTABLISHED、TIME_WAIT等)
  • Recv-Q:接收队列中的字节数
  • Send-Q:发送队列中的字节数

数据库级工具

MySQL Shell

功能说明

MariaDB 官方提供的交互式数据库管理工具,支持 SQL、JavaScript 和 Python 脚本。

使用方法

bash
mysqlsh -u root -p  # 连接到本地MariaDB服务器

常用命令

sql
\status  # 查看连接状态
\sql     # 切换到SQL模式
\js      # 切换到JavaScript模式
\py      # 切换到Python模式

SHOW PROCESSLIST

功能说明

查看当前数据库连接和查询,用于定位慢查询和阻塞问题。

使用方法

sql
SHOW PROCESSLIST;

关键字段

  • Id:连接 ID
  • User:用户名
  • Host:客户端主机
  • db:当前数据库
  • Command:命令类型(Query、Sleep、Connect等)
  • Time:命令执行时间(秒)
  • State:命令状态
  • Info:执行的SQL语句

SHOW ENGINE INNODB STATUS

功能说明

查看 InnoDB 引擎状态,用于分析 InnoDB 相关问题,如死锁、锁等待等。

使用方法

sql
SHOW ENGINE INNODB STATUS\G

关键部分

  • TRANSACTIONS:事务状态信息
  • FILE I/O:文件 I/O 状态
  • INSERT BUFFER AND ADAPTIVE HASH INDEX:插入缓冲和自适应哈希索引状态
  • LOG:日志状态
  • BUFFER POOL AND MEMORY:缓冲池和内存状态

SHOW SLAVE STATUS

功能说明

查看主从复制状态,用于分析复制延迟和中断问题。

使用方法

sql
SHOW SLAVE STATUS\G

关键字段

  • Slave_IO_Running:I/O 线程是否运行
  • Slave_SQL_Running:SQL 线程是否运行
  • Seconds_Behind_Master:从库延迟时间(秒)
  • Last_Error:最近的错误信息

mysqlbinlog

功能说明

解析和应用二进制日志,用于恢复数据和分析复制问题。

使用方法

bash
# 查看二进制日志内容
mysqlbinlog --base64-output=DECODE-ROWS --verbose mysql-bin.000001

# 按时间范围提取二进制日志
mysqlbinlog --start-datetime="2025-12-27 14:30:00" --stop-datetime="2025-12-27 15:00:00" mysql-bin.000001 > binlog.sql

mysqldump/mysqlcheck

功能说明

  • mysqldump:逻辑备份工具,用于备份和恢复数据
  • mysqlcheck:检查表完整性和修复损坏的表

使用方法

bash
# 备份数据库
mysqldump -u root -p mydb > mydb.sql

# 检查表完整性
mysqlcheck -u root -p --check mydb

# 修复损坏的表
mysqlcheck -u root -p --repair mydb

第三方工具

Percona Toolkit

Percona Toolkit 是一组用于 MySQL/MariaDB 管理和监控的工具集,包含多个实用工具。

pt-query-digest

功能说明

分析慢查询日志,生成详细的查询报告,用于定位慢查询问题。

使用方法
bash
pt-query-digest /var/log/mysql/slow.log > slow_report.txt
报告关键部分
  • 总查询统计:总查询数、总执行时间、平均执行时间等
  • 查询分析:按查询类型分组,显示每个查询的执行统计信息
  • 查询详情:显示完整的SQL语句和执行计划

pt-table-checksum

功能说明

检查主从数据一致性,用于验证主从复制的数据完整性。

使用方法
bash
pt-table-checksum h=master_host,u=root,p=password --no-check-binlog-format

pt-table-sync

功能说明

同步主从数据,用于修复主从数据不一致问题。

使用方法
bash
pt-table-sync h=master_host,u=root,p=password h=slave_host,u=root,p=password --sync-to-master --databases=mydb

pt-show-grants

功能说明

显示用户权限,用于分析权限问题。

使用方法
bash
pt-show-grants h=localhost,u=root,p=password

MySQLTuner

功能说明

自动化的 MySQL/MariaDB 性能分析工具,生成优化建议。

使用方法

bash
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl --host localhost --user root --pass password

报告关键部分

  • 系统信息:操作系统、MariaDB 版本等
  • 性能指标:连接数、缓冲区命中率等
  • 安全指标:密码策略、权限配置等
  • 优化建议:针对配置参数的具体优化建议

mytop

功能说明

实时监控数据库连接和查询,类似于 top 命令。

使用方法

bash
mytop -u root -p password -d mydb

关键指标

  • 连接数:当前连接数和最大连接数
  • 查询统计:每秒查询数、慢查询数等
  • 当前查询:正在执行的查询列表

Orchestrator

功能说明

数据库复制拓扑管理和故障切换工具,用于自动化主从切换。

使用方法

bash
# 安装Orchestrator
git clone https://github.com/openark/orchestrator.git
cd orchestrator
make build

# 启动Orchestrator服务
./orchestrator --config=orchestrator.conf.json

主要功能

  • 自动发现复制拓扑
  • 监控复制状态
  • 自动故障检测和切换
  • 手动切换管理
  • 复制拓扑可视化

监控工具

Zabbix

功能说明

企业级监控系统,支持 MariaDB 监控和告警。

配置步骤

  1. 安装 Zabbix 服务器
  2. 安装 Zabbix 代理
  3. 导入 MariaDB 模板
  4. 配置监控项和告警规则

关键监控项

  • 连接数
  • CPU 使用率
  • 内存使用率
  • 磁盘 I/O
  • 主从复制延迟
  • 慢查询数

Prometheus + Grafana

功能说明

开源监控和可视化平台,用于监控 MariaDB 性能指标。

配置步骤

  1. 安装 Prometheus
  2. 安装 Grafana
  3. 安装 MariaDB Exporter
  4. 配置 Prometheus 采集规则
  5. 导入 Grafana 仪表板

关键指标

  • mariadb_global_status_connections
  • mariadb_global_status_queries
  • mariadb_global_status_slow_queries
  • mariadb_slave_status_seconds_behind_master
  • mariadb_global_status_buffer_pool_hit_ratio

Nagios

功能说明

传统的监控和告警工具,支持 MariaDB 监控。

配置步骤

  1. 安装 Nagios 服务器
  2. 安装 Nagios 插件
  3. 配置 MariaDB 监控命令
  4. 配置服务和主机

常用插件

  • check_mysql_health
  • check_mysql

日志分析工具

grep/awk/sed

功能说明

文本处理工具,用于快速分析数据库日志。

使用方法

bash
# 查找错误日志中的关键信息
grep -i "error" /var/log/mysql/error.log

# 统计慢查询日志中的慢查询数量
awk '{if($2 ~ /^# Time:/) count++} END {print count}' /var/log/mysql/slow.log

# 提取二进制日志中的SQL语句
sed -n '/# at [0-9]*/,/^$/p' mysql-bin.000001 | grep -v "^#" | grep -v "^$"

Logstash + Elasticsearch + Kibana (ELK Stack)

功能说明

日志收集、存储和可视化平台,用于大规模日志分析。

配置步骤

  1. 安装 Elasticsearch
  2. 安装 Logstash
  3. 安装 Kibana
  4. 配置 Logstash 收集 MariaDB 日志
  5. 配置 Kibana 仪表板

主要功能

  • 实时日志搜索和分析
  • 日志可视化
  • 告警功能
  • 日志归档和检索

故障排查工具组合使用

连接问题排查

  1. 使用 netstat/ss 检查网络连接状态
  2. 使用 SHOW PROCESSLIST 查看连接数和阻塞情况
  3. 检查 max_connections 参数设置
  4. 分析错误日志中的连接相关错误

性能问题排查

  1. 使用 top/htop 检查系统资源使用情况
  2. 使用 vmstat/iostat 检查磁盘 I/O 性能
  3. 使用 pt-query-digest 分析慢查询日志
  4. 使用 SHOW ENGINE INNODB STATUS 查看 InnoDB 状态
  5. 使用 MySQLTuner 生成优化建议

主从复制问题排查

  1. 使用 SHOW SLAVE STATUS 查看复制状态
  2. 检查从库错误日志
  3. 使用 pt-table-checksum 验证主从数据一致性
  4. 使用 mysqlbinlog 分析二进制日志
  5. 检查网络连接和防火墙规则

数据损坏问题排查

  1. 使用 mysqlcheck 检查表完整性
  2. 使用 SHOW ENGINE INNODB STATUS 查看 InnoDB 状态
  3. 分析错误日志中的数据损坏相关错误
  4. 使用备份恢复数据

工具选择最佳实践

按故障类型选择工具

故障类型推荐工具
连接问题netstat/ss, SHOW PROCESSLIST
性能问题top/htop, vmstat, iostat, pt-query-digest
主从复制问题SHOW SLAVE STATUS, pt-table-checksum, mysqlbinlog
数据损坏问题mysqlcheck, SHOW ENGINE INNODB STATUS
权限问题pt-show-grants, SHOW GRANTS

按场景选择工具

场景推荐工具
实时监控mytop, Zabbix, Prometheus + Grafana
性能分析MySQLTuner, pt-query-digest
故障恢复xtrabackup, mysqldump, mysqlbinlog
自动化运维Orchestrator, Ansible

常见问题(FAQ)

问:如何选择合适的故障排查工具?

答:根据故障类型和场景选择合适的工具:

  • 连接问题:netstat/ss, SHOW PROCESSLIST
  • 性能问题:top/htop, vmstat, iostat, pt-query-digest
  • 主从复制问题:SHOW SLAVE STATUS, pt-table-checksum

问:如何使用 pt-query-digest 分析慢查询?

答:

bash
pt-query-digest /var/log/mysql/slow.log > slow_report.txt

分析报告中的关键部分:总查询统计、查询分析、查询详情。

问:如何使用 MySQLTuner 优化 MariaDB 配置?

答:

  1. 下载并运行 MySQLTuner
  2. 查看生成的优化建议
  3. 根据建议调整 MariaDB 配置参数
  4. 重启 MariaDB 服务
  5. 再次运行 MySQLTuner,验证优化效果

问:如何监控 MariaDB 主从复制延迟?

答:

  1. 使用 SHOW SLAVE STATUS 命令查看 Seconds_Behind_Master 字段
  2. 使用 Zabbix 或 Prometheus + Grafana 设置监控告警
  3. 使用 pt-table-checksum 定期验证主从数据一致性

问:如何分析 InnoDB 死锁问题?

答:

  1. 使用 SHOW ENGINE INNODB STATUS 命令查看死锁信息
  2. 分析死锁发生的原因(如锁顺序不当)
  3. 优化 SQL 语句或调整事务隔离级别
  4. 考虑使用乐观锁或其他并发控制机制

总结

MariaDB 故障排查工具是 DBA 处理数据库故障的重要武器。通过熟练掌握这些工具的使用方法,可以快速定位和解决各种数据库故障,提高数据库系统的稳定性和可用性。

在实际工作中,建议:

  1. 根据故障类型和场景选择合适的工具
  2. 掌握常用工具的基本用法和高级功能
  3. 结合多种工具进行综合分析
  4. 定期使用监控工具进行预防性检查
  5. 不断学习和更新工具知识,适应 MariaDB 版本更新

通过合理使用故障排查工具,可以有效提高 DBA 团队的故障处理能力,减少故障影响范围和恢复时间,为业务系统的稳定运行提供有力保障。