mysql_exporter 启动报错主因是MySQL 8.0+禁用root@localhost socket登录且TCP未启用,应创建专用监控用户、确保skip-networking=OFF、bind_address兼容、显式传参配置文件,并验证Prometheus能采集到metrics。
mysql
_exporter 启动就报
这是最常见卡点:mysql_exporter 默认用
连,但 MySQL 8.0+ 默认禁用
插件的本地 root 登录,且没开 TCP 连接权限。
实操建议:
创建专用监控用户,别硬刚 root:
确认 MySQL 配置没禁 TCP:检查
是否为
,
别写成
(IPv4)却让 exporter 用
(可能走 socket)——统一用
最稳
启动时显式传参,别依赖环境变量出错:
,其中
写明
段用户名密码
Grafana 导入 MySQL Dashboard 后指标全空
不是模板问题,大概率是 Prometheus 没真正抓到数据 —— mysql_exporter 的 metrics 端点(默认
)能 curl 通,不代表 Prometheus 能采集到。
实操建议:
先在 Prometheus Web UI 的
页面看 mysql_exporter target 状态是不是
;如果是
,点进去看
,常见是 DNS 解析失败(比如填了
容器名但 Prometheus 在宿主机跑)
确认 mysql_exporter 的
绑定的是
,不是
(后者容器外访问不到)
Dashboard 里很多 panel 用的是
这类指标,如果 MySQL 版本太低(如 5.6),部分状态变量不存在,对应图表就空 —— 换成
更兼容
高并发下 mysql_exporter 拖慢 MySQL 响应
mysql_exporter 默认每 15 秒扫一次
和
,某些查询(比如
)在连接数几千时会锁表或触发全表扫描。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
实操建议:
关掉非必要收集项:启动加参数
,保留
、
这些轻量指标
对 processlist 有刚需?改用
替代(需 MySQL ≥ 5.7,且
开启)
调整采集间隔:Prometheus 的
别设太密,30 秒比 15 秒更友好;mysql_exporter 本身不支持动态调频,靠 Prometheus 控制节奏
MySQL 主从延迟监控值始终为 0
mysql_exporter 只能通过
拿
,但这个值在 IO thread 断开、SQL thread 停滞、或者 GTID 模式下无主从关系时,会返回
或
,不代表真没延迟。
实操建议:
先手动连从库执行
,看
和
是不是
;如果否,
就不可信
用
这个指标时,加条件过滤:
更可靠的延迟指标其实是主从间 binlog position 差值,但 mysql_exporter 不直接暴露;可自定义 query collector,写 SQL 查
和
差值
事情说清了就结束。真正难的不是配通,是理解每个指标背后查了哪张表、触发了什么锁、在什么 MySQL 版本下失效 —— 监控数据一旦失真,比没有还危险。
ERROR: unable to connect to MySQL instanceroot@localhostauth_socketCREATE USER 'exporter'@'localhost' IDENTIFIED BY 'safe_password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;skip-networkingOFFbind_address127.0.0.1localhost127.0.0.1:3306./mysqld_exporter --config.my-cnf=/etc/mysql_exporter.cnf/etc/mysql_exporter.cnf[client]:9104/metricsStatus > TargetsUPDOWNLastErrormysql--web.listen-address0.0.0.0:9104127.0.0.1:9104mysql_global_status_threads_connectedmysql_info_schema_processlist_threadsinformation_schemaperformance_schemaSELECT * FROM information_schema.PROCESSLIST--collect.global_status=false --collect.info_schema.processlist=falseglobal_variablesslave_statusperformance_schema.threadsperformance_schemascrape_intervalSHOW SLAVE STATUSSeconds_Behind_MasterNULL0SHOW SLAVE STATUS\GSlave_IO_RunningSlave_SQL_RunningYesSeconds_Behind_Mastermysql_slave_status_seconds_behind_mastermysql_slave_status_seconds_behind_master > 0 and mysql_slave_status_slave_io_running == 1 and mysql_slave_status_slave_sql_running == 1master_log_file/positionrelay_master_log_file/exec_master_log_pos