跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

mysql如何配置数据库监控导出器_安装mysqld_exporter对接Grafana

mysqld_exporter不是开箱即用工具,必须正确配置MySQL监控账号权限(PROCESS、REPLICATION CLIENT、SELECT on performance_schema.*)、DSN连接凭证(推荐.my.cnf且chmod 600)及Prometheus抓取地址,三者缺一不可,否则/metrics将返回401/500或无指标。 直接说结论:mysqld_exporter 不是“装上就能用”的黑盒工具,它必须配合 MySQL 权限、连接配置、Prometheus 抓取规则三者对齐才能导出有效指标;Grafana 只负责展示,真正卡住的环节通常在
mysqld_exporter
启动失败或
/metrics
返回空/401/500 —— 这些问题 90% 出在认证或权限上。 MySQL 必须创建专用监控账号并授够权限 mysqld_exporter 不是 root,也不能用应用账号混用。它需要明确、最小化的权限集,否则启动后访问
/metrics
会报错
ERROR 1045 (28000): Access denied
或采集不到关键指标(比如复制延迟、InnoDB 状态)。
PROCESS
:用于获取线程列表、当前查询等运行时状态
REPLICATION CLIENT
:读取主从复制状态(
SHOW SLAVE STATUS
)
SELECT
on
performance_schema.*
:现代 MySQL(5.7+)依赖此库采集锁、语句统计、内存分配等深度指标 不要只给
SELECT ON *.*
,这不够,且不安全;也不要漏掉
performance_schema
—— 默认安装下该库存在但无 SELECT 权限 执行示例(登录 MySQL 实例后):
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'StrongPass2026!'; GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'localhost'; GRANT SELECT ON performance_schema.* TO 'exporter'@'localhost'; FLUSH PRIVILEGES;
mysqld_exporter 启动时必须指定有效的连接凭证 凭证不能硬编码在命令行(有泄露风险),也不建议用
--user
/
--password
参数。正确做法是通过 MySQL 配置文件(如
.my.cnf
)传递,并设好文件权限。 文件名必须是
.my.cnf
或显式用
--config.my-cnf=xxx
指定,且路径要写对(相对路径容易错) 内容格式严格:开头不能有空格或 BOM,必须是
[client]
小节,字段名大小写敏感(
user
不是
USER
) Linux 下务必
chmod 600 .my.cnf
,否则 mysqld_exporter 会拒绝读取(MySQL 客户端安全策略) 如果 MySQL 实例监听在非 localhost(比如 Docker 容器或远程 IP),
host
字段必须填对,且账号需授权
'exporter'@'%'
或对应 IP 示例
.my.cnf
:
[client] user=exporter password=StrongPass2026! host=127.0.0.1 port=3306
启动命令: MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载
./mysqld_exporter --config.my-cnf=.my.cnf --web.listen-address=":9104"
Prometheus 抓取配置要匹配 exporter 实际监听地址 很多人改了
mysqld_exporter
的
--web.listen-address
(比如改成
:9200
),却忘了同步改
prometheus.yml
里的
targets
,结果 targets 显示
DOWN
,日志里全是
connection refused
。 确认 exporter 进程是否真在运行:
ps aux | grep mysqld_exporter
确认端口是否被监听:
netstat -tlnp | grep :9104
(或你自定义的端口)
scrape_configs
中的
targets
值必须是 Prometheus 能网络可达的地址:本地部署填
localhost:9104
,跨主机填
192.168.x.x:9104
,别用
127.0.0.1
当作外部可访问地址 避免复用 job_name:多个 MySQL 实例要用不同
job_name
(如
mysql-prod
,
mysql-staging
),否则 Grafana 模板无法区分实例 prometheus.yml 片段示例:
- job_name: 'mysql-prod' static_configs: - targets: ['10.0.1.5:9104'] labels: instance: 'db-prod-01'
Grafana 导入模板前先验证 metrics 是否真实返回 别急着导入 Grafana 模板(如 ID
14057
或
7362
)。先手动 curl 一下 exporter 的指标端点:
curl -s http://localhost:9104/metrics | head -20
正常应看到大量以
mysql_
开头的指标行,比如
mysql_global_status_threads_connected
、
mysql_info_schema_innodb_buffer_pool_bytes_data
。如果返回空、HTML 页面、或报
invalid DSN
错误,说明前面三步有遗漏。 返回 401?→ MySQL 账号密码错,或
.my.cnf
文件权限不对 返回 500?→ MySQL 实例不可达,或账号缺
performance_schema
权限 返回但无
mysql_
指标?→ 检查
mysqld_exporter
日志,常见于 MySQL 版本太低(performance_schema 只有看到有效指标后,再导入 Grafana 模板、配好 Prometheus 数据源,仪表盘才会有数据。模板本身不解决底层连通性问题。

相关文章