一、MySQL 授权(MySQL)
bash
mysql -u root -p
sql
>CREATE USER IF NOT EXISTS 'exporter'@'localhost'
IDENTIFIED BY 'Exporter123!'
WITH MAX_USER_CONNECTIONS 3;
>GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
>FLUSH PRIVILEGES;
二、mysqld_exporter 配置
bash
sudo mkdir -p /etc/mysqld_exporter
sudo tee /etc/mysqld_exporter/.my.cnf > /dev/null << 'EOF'
[client]
user=exporter
password=Exporter123!
host=localhost
port=3306
EOF
sudo useradd --no-create-home --shell /bin/false mysqld_exporter
sudo chown -R mysqld_exporter:mysqld_exporter /etc/mysqld_exporter
sudo chmod 600 /etc/mysqld_exporter/.my.cnf
三、安装 mysqld_exporte
bash
cd /tmp
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.19.0/mysqld_exporter-0.19.0.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.19.0.linux-amd64.tar.gz
sudo mv mysqld_exporter-0.19.0.linux-amd64/mysqld_exporter /usr/local/bin/
sudo chown mysqld_exporter:mysqld_exporter /usr/local/bin/mysqld_exporter
四、systemd 服务
bash
sudo tee /etc/systemd/system/mysqld_exporter.service > /dev/null << 'EOF'
[Unit]
Description=MySQL Exporter
After=network.target mysqld.service
[Service]
User=mysqld_exporter
ExecStart=/usr/local/bin/mysqld_exporter \
--config.my-cnf=/etc/mysqld_exporter/.my.cnf \
--web.listen-address=:9104
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now mysqld_exporter
sudo systemctl status mysqld_exporter
✅ 验证:
bash
curl http://localhost:9104/metrics | grep mysql_up
]# curl http://localhost:9104/metrics | grep mysql_up
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 175k 0 175k 0 0 13.2M 0 --:--:-- --:--:-- --:--:-- 14.3M
# HELP mysql_up Whether the MySQL server is up.
# TYPE mysql_up gauge
mysql_up 1
五、Prometheus 加入 MySQL 采集
追加到 scrape_configs末尾:
bash
vim /etc/prometheus/prometheus.yml
# MySQL 监控
- job_name: "mysql"
static_configs:
- targets: ["localhost:9104"]
六、MySQL 告警规则
追加到现有 rules 后面:
bash
sudo vim /etc/prometheus/rules/alert.yml
# MySQL 监控告警
- name: mysql
rules:
- alert: MySQLDown
expr: mysql_up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "MySQL 服务不可用"
description: "MySQL 实例 {{ $labels.instance }} 已宕机"
- alert: MySQLConnectionsHigh
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 > 80
for: 3m
labels:
severity: warning
annotations:
summary: "MySQL 连接数过高"
description: "MySQL {{ $labels.instance }} 连接数占比超过 80%,当前值:{{ $value }}%"
- alert: MySQLSlowQueries
expr: rate(mysql_global_status_slow_queries[5m]) > 0
for: 3m
labels:
severity: warning
annotations:
summary: "MySQL 存在慢查询"
description: "MySQL {{ $labels.instance }} 慢查询速率:{{ $value }}"
七、检查并重启
bash
promtool check config /etc/prometheus/prometheus.yml
sudo systemctl restart prometheus
八、验证 MySQL 监控
浏览器访问:
纯文本
纯文本http://服务器IP:9090 → Status → Targets