使用systemctl/service命令查看MySQL服务状态
Debian使用systemd作为初始化系统,可通过以下命令快速确认MySQL服务是否运行:
sudo systemctl status mysql # Debian 8及以上版本
# 或
sudo service mysql status # Debian 7及更早版本
若服务正常运行,输出中会显示“Active: active (running)”。
使用mysqladmin工具获取实时状态
mysqladmin是MySQL自带的命令行工具,可快速查看服务器状态(如运行时间、当前连接数、查询次数等):
mysqladmin -u root -p status # 输入密码后,输出示例:Uptime: 12345 Threads: 5 Questions: 1000
更详细的指标可通过extended-status获取:
mysqladmin -u root -p extended-status
```。
通过MySQL命令行执行SHOW STATUS
登录MySQL后,执行SHOW STATUS可查看所有状态变量(如缓冲池命中率、锁等待时间等),筛选关键指标(如Threads_connected、Slow_queries):
mysql -u root -p
SHOW STATUS; # 或针对性查询:SHOW STATUS LIKE 'Threads_connected';
```。
使用top/htop监控系统资源占用
通过top或htop(需安装:sudo apt install htop)实时查看MySQL进程(mysqld)的CPU、内存使用情况,快速定位资源瓶颈:
top # 按“M”键按内存排序,按“P”键按CPU排序
htop # 更直观的交互式界面
```。
使用iostat监控磁盘I/O性能
磁盘I/O是数据库性能的关键因素,通过iostat(需安装sysstat包:sudo apt install sysstat)查看磁盘读写延迟、吞吐量:
sudo apt install sysstat
iostat -x 1 # 每秒更新一次,关注“%util”(磁盘利用率)、“await”(平均等待时间)
```。
Prometheus + Grafana + MySQL Exporter
这是企业级监控组合,可实现数据采集→存储→可视化→告警的全链路监控:
my.cnf指定MySQL连接信息(用户名、密码),启动Exporter:wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-*.tar.gz
cd mysqld_exporter-* && ./mysqld_exporter --config.my-cnf=/path/to/my.cnf &
/etc/prometheus/prometheus.yml,添加MySQL Job:scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['localhost:9104'] # MySQL Exporter默认端口
6239),即可查看连接数、查询性能、慢查询等指标。Zabbix
Zabbix是成熟的企业级监控解决方案,支持自动发现、阈值告警、拓扑图等功能,可监控MySQL的运行状态、性能指标(如QPS、TPS、连接数):
sudo apt install zabbix-server-mysql zabbix-frontend-php
Nagios
Nagios是开源监控系统,通过插件实现对MySQL的监控(如服务可用性、查询性能、慢查询):
sudo apt install nagios3 nagios-plugins-mysql
/usr/local/nagios/etc/objects/localhost.cfg),添加MySQL监控命令(如检查服务状态、慢查询数量)。Innotop
Innotop是命令行工具,专为InnoDB引擎设计,提供实时监控(如复制状态、用户统计、InnoDB缓存/IO统计):
sudo apt install innotop
?(查看帮助)、q(退出)。配置慢查询日志
慢查询日志可记录执行时间超过阈值的查询,帮助定位性能瓶颈:
/etc/mysql/my.cnf或/etc/my.cnf),添加以下参数:[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-queries.log
long_query_time = 2 # 超过2秒的查询视为慢查询
sudo systemctl restart mysql
```。
日志轮转与告警脚本
使用logrotate定期轮转日志文件(避免日志过大),并通过脚本监控错误日志(/var/log/mysql/error.log),发送告警:
/usr/local/bin/mysql_log_rotate.sh):#!/bin/bash
LOG_PATH="/var/log/mysql"
find $LOG_PATH -name "*.log" -mtime +7 -exec rm -f {} \; # 删除7天前的日志
tail -n 10 $LOG_PATH/error.log | grep -i "error" | mail -s "MySQL Error Alert" admin@example.com
crontab -e
0 0 * * * /usr/local/bin/mysql_log_rotate.sh
```。
通过以上方法,可实现对Debian上MySQL的全面监控(状态、性能、日志),及时发现并解决潜在问题,保障数据库稳定运行。