mysql_exporter+cpolar远程监控 MySQL 不卡壳!cpolar 内网穿透实验室第 712 个成功挑战

下面的场景是不是也是你的日常?

小张是一家电商公司的运维小哥,公司有 3 台 MySQL 服务器分布在不同城市的办公区,平时只能在公司内网通过命令行查数据库状态,一旦下班回家,客户反馈支付页面卡顿,他连数据库的连接数、慢查询都看不了,只能干着急往公司跑。用上 mysql_exporter+cpolar 后,他在家打开电脑就能实时看到异地 MySQL 的 QPS、InnoDB 缓冲池状态,甚至能提前预警连接数过高的问题,再也不用半夜冲公司,咖啡钱都省了好几杯。

软件名称:mysql_exporter(MySQL 监控采集器)、cpolar(内网穿透工具)

操作系统支持

mysql_exporter:支持 CentOS 7/8、Ubuntu、Debian 等主流 Linux 发行版;cpolar:支持 Linux、Windows、macOS、Docker 等全平台。

软件介绍

mysql_exporter 就像 MySQL 数据库的 "私人体检医生",能自动扒出数据库的连接数、QPS、慢查询、主从复制状态等上百项关键指标,把抽象的数据库运行数据变成标准化的监控指标;而 cpolar 是一款轻量级内网穿透工具,能把局域网内的 mysql_exporter 服务 "拎" 到公网上,让你在任何地方都能访问到数据库监控数据,不用折腾公网 IP、端口映射这些麻烦事。

mysql_exporter 的出色功能

mysql_exporter 最绝的本事,就是把 MySQL 藏在 "后台" 的运行状态全扒出来,还能打包成 Prometheus 能看懂的格式。比如它能实时统计 "当前有多少客户端连到数据库""每秒执行了多少 SQL 语句""慢查询占比多少",甚至能监控主从复制是不是断了、InnoDB 缓冲池命中率够不够 ------ 相当于给数据库装了个 "全景摄像头",哪里卡、哪里慢、哪里要出问题,一眼就能看明白,再也不用对着 MySQL 的日志文件 "大海捞针"。

实用场景

场景 1:中小企业异地办公监控 MySQL

痛点:小公司没有专业的云监控平台,技术人员在外地出差,想查公司服务器上的 MySQL 状态,只能让同事远程截图,或者费劲搭 VPN,不仅慢还容易断,遇到数据库连接数突增、慢查询暴增的情况,根本没法及时处理。

爽点:部署好 mysql_exporter 后,用 cpolar 把 9105 端口映射到公网,出差时打开手机或笔记本,输入 cpolar 给的公网地址,就能实时看到 MySQL 的各项指标,甚至能配置告警 ------ 一旦数据库宕机,手机立马收到提醒,5 分钟就能远程排查问题,不用跑回公司。

场景 2:个人开发者监控本地测试库

痛点:个人开发者在本地电脑搭了 MySQL 测试环境,想在外面的咖啡馆调试代码,却连不上本地的数据库监控,不知道测试时数据库有没有出现性能问题,只能回家后再排查,效率低到想哭。

爽点:用 cpolar 把本地的 mysql_exporter 服务暴露到公网,在咖啡馆打开 Prometheus 的监控面板,就能看到测试库的 QPS、连接数变化,甚至能提前发现测试代码导致的慢查询,改代码、调性能一气呵成,再也不用 "线下返工"。

cpolar 内网穿透技术带来的便利

  1. 不用抢公网 IP:不管是家里的宽带,还是公司的内网,没有公网 IP 也能用 ------cpolar 会自动分配公网地址,不用找运营商申请,也不用配置路由器的端口映射,小白也能 5 分钟搞定。
  2. 跨网访问无门槛:不管你在公司、家里、咖啡馆,甚至在外地出差,只要能上网,就能访问到局域网内的 mysql_exporter 服务,监控异地的 MySQL 数据库,就像访问微信一样简单。
  3. 固定地址不翻车:cpolar 支持保留二级子域名,不用每次重启都换公网地址,把固定地址配置到 Prometheus 里,再也不用频繁改监控配置,省心到离谱。
  4. 安全又轻便:cpolar 不用装复杂的组件,一键安装就能用,还能加密传输数据,不用担心监控数据泄露,比自己搭 VPN 安全多了,运维小哥再也不用天天担心 "数据裸奔"。
  5. 多平台通吃:不管你的 mysql_exporter 装在 Linux 服务器、Windows 电脑还是 Mac 笔记本上,cpolar 都能适配,不用为了不同系统折腾不同的穿透方案,一套搞定所有场景。

总结

mysql_exporter 是 MySQL 监控的 "黄金搭档",能把数据库的 "健康状况" 摸得透透的,而 cpolar 则是打破局域网限制的 "穿墙术",两者结合,就像给数据库监控装了 "千里眼"------ 不管 MySQL 藏在哪个角落的局域网里,你都能随时随地掌握它的运行状态,提前发现问题、解决问题,再也不用被 "内网限制" 捆住手脚。对于中小企业、个人开发者、运维人员来说,这套组合既省钱又好用,不用花大价钱买云监控平台,就能搭建一套专业、稳定的 MySQL 远程监控体系,性价比直接拉满。

一年省掉大几百的加班通勤不香吗?省下的钱吃烧烤不香吗?

让你香香的教程就在下面呦!

无论你是初次接触数据库监控,还是希望完善现有观测体系,都能通过本教程快速构建一套轻量、可靠、可视化的MySQL监控方案,真正做到"让数据说话,让故障无处遁形"。

1.Centos7安装mysql_exporter实时监控mysql数据

在CentOS 7环境中,仅靠MySQL自身难以实现对运行状态的全面可观测性。通过部署mysql_exporter,可将关键性能指标实时暴露给Prometheus,轻松构建高效的数据库监控体系。

本文将手把手指导你在CentOS 7环境中安装并配置mysql_exporter,快速打通MySQL与Prometheus的监控链路,实现数据库指标的实时采集与可视化。

若还没有安装mysql的小伙伴可以参考这篇文章哦:手把手教你:Centos7下MySQL的安装与初始配置 - cpolar 极点云官网

在prometheus的官网下载对应的mysql_exporter的linux版本:Download | Prometheus

下载完成后上传到/app目录下:

也可以使用这个命令一键安装(可自定义版本):

shell 复制代码
wget
https://github.com/prometheus/mysqld_exporter/releases/download/v0.18.0/mysqld_exporter-0.18.0.linux-amd64.tar.gz

解压mysql_exporter压缩文件:

shell 复制代码
tar -zxvf mysqld_exporter-0.18.0.linux-amd64.tar.gz

修改mysql_exporter文件名:

shell 复制代码
mv mysqld_exporter-0.18.0.linux-amd64/ mysqld_exporter

2.启动mysql_exporter

创建mysql用户与权限,在MySQL数据库中创建一个专门用于监控的用户,并赋予其足够的权限来查询所需的信息:

shell 复制代码
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost' identified by '12345678';
GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost';
flush privileges;

创建一个文件,输入我们刚创建好的用户名及密码:

shell 复制代码
[client]
user=exporter
password=12345678

创建mysql_exporter服务:

shell 复制代码
[Unit]
Description=exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/app/mysqld_exporter/mysqld_exporter --config.my-cnf="/app/mysqld_exporter/localhost_db.cnf" --web.listen-address=":9105"
Restart=on-failure
[Install]
WantedBy=multi-user.target

也可以直接手动启动:

shell 复制代码
sudo -u prometheus /app/mysql_exporter/mysqld_exporter   --config.my-cnf="/app/mysql_exporter/localhost_db.cnf"   --web.listen-address=":9105"

接下来我们通过使用浏览器,用IP+端口就可以访问我们安装好的mysql_exporter页面啦!

3.配置prometheus监控mysql_exporter

没有prometheus的小伙伴可以参考这篇文章:监控不再局域网!Cpolar 让 Prometheus 走出内网限制! - cpolar 极点云官网

找到prometheus的配置文件,编辑添加如下内容:

shell 复制代码
vi prometheus.yml
shell 复制代码
      - targets: ["localhost:9105"]
        labels:
          app: "mysql_exporter"

重启prometheus服务:

shell 复制代码
systemctl restart prometheus

使用浏览器Ip+9090打开promethues的页面:

我们可以看到成功的检测到了mysql_exporter服务啦!

4.使用alertmanager配置mysql_expoter告警

没有alertmanager的小伙伴可以参考这篇文章:告别宕机!零基础搭建服务器监控告警系统!小白也能学会!

配置mysql告警。我这里举两个例子:

shell 复制代码
groups:
- name: mysql-alerts
  rules:

  # 1. MySQL 实例宕机或 exporter 无法采集
  - alert: MySQLDown
    expr: mysql_up == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "MySQL instance down"
      description: "MySQL instance {{ $labels.instance }} has been down for more than 1 minute."

  # 2. 主从复制中断(仅适用于有从库的场景)
  - alert: MySQLReplicationBroken
    expr: mysql_slave_status_seconds_behind_master > 300
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "MySQL replication lag"
      description: "MySQL replication on {{ $labels.instance }} is lagging by {{ $value }} seconds."

  # 3. 主从 IO/SQL 线程停止
  - alert: MySQLReplicationIOThreadDown
    expr: mysql_slave_status_master_server_id > 0 and mysql_slave_status_slave_io_running == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "MySQL replication IO thread stopped"
      description: "Slave IO thread is not running on {{ $labels.instance }}."

  - alert: MySQLReplicationSQLThreadDown
    expr: mysql_slave_status_master_server_id > 0 and mysql_slave_status_slave_sql_running == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "MySQL replication SQL thread stopped"
      description: "Slave SQL thread is not running on {{ $labels.instance }}."

  # 4. 连接数使用率过高(超过 80%)
  - alert: MySQLTooManyConnections
    expr: (mysql_global_status_threads_connected / mysql_global_variables_max_connections) * 100 > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "High MySQL connection usage"
      description: "{{ $labels.instance }}: MySQL connection usage is {{ $value | printf \"%.2f\" }}% of max_connections."

  # 5. 慢查询数量突增(过去5分钟慢查询 > 10 条)
  - alert: MySQLHighSlowQueries
    expr: rate(mysql_global_status_slow_queries[5m]) > 0.1  # ≈ 每分钟 > 6 条
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High rate of slow queries on MySQL"
      description: "{{ $labels.instance }}: Slow query rate is {{ $value | printf \"%.2f\" }} per second."

编辑为4.yml,接下来配置prometheus告警:

进入prometheus配置文件:

找到prometheus的配置文件,编辑添加如下内容:

shell 复制代码
vi prometheus.yml
shell 复制代码
rule_files:
  -  "/app/prometheus/1.yml"
  -  "/app/prometheus/2.yml"
  -  "/app/prometheus/3.yml"
  -  "/app/prometheus/4.yml"

重启prometheus服务:

shell 复制代码
systemctl restart prometheus

使用浏览器Ip+9090打开promethues的页面:

可以看到,我们设置好的告警就出来啦!

这时我们mysql是没有启动的,所以告警了。

重启后恢复正常。

那么问题来了,倘若我想监控朋友的mysql,但是我们不在一个局域网,怎么办?别急cpolar来帮助你!

5.安装cpolar内网穿透工具

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

官网在此:https://www.cpolar.com

使用一键脚本安装命令:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

shell 复制代码
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

6.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理------创建隧道:

  • 隧道名称:可自定义,本例使用了:mysql_exporter,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:9105

  • 域名类型:随机域名

  • 地区:选择China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

访问成功。

7.将本mysql_exporter暴露给Prometheus进行远程抓取

Prometheus可以通过这个公网地址38c53143.r2.cpolar.top访问到运行在本地9105端口的mysql_exporter服务,从而抓取系统指标。

shell 复制代码
      - targets: ["38c53143.r2.cpolar.top"]
        labels:
          app: "mysql_exporter"

抓取成功!

8.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我这里演示使用的是mysqll,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理------隧道列表,找到所要配置的隧道mysql_exporter,点击右侧的编辑

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

至此,我们完成了无需公网 IP 的远程服务器监控搭建。

结尾

感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站

相关推荐
jushisi2 小时前
下载eclipse MAT(Memory Analyzer Tool)
java·服务器
Mikhail_G2 小时前
Mysql数据库操作指南(零基础篇二)
大数据·数据库·sql·mysql·数据分析
一条大祥脚2 小时前
26.1.24 分块|排序|中位数贪心+线段树二分+聚集贪心
数据库·redis·缓存
源代码•宸2 小时前
GoLang八股(Go并发)
服务器·面试·golang·cap·gmp·三色标记法·混合写屏障
Anastasiozzzz2 小时前
Redis脑裂问题--面试坑点【Redis的大脑裂开?】
java·数据库·redis·缓存·面试·职场和发展
木土雨成小小测试员2 小时前
Python测试开发之后端一
开发语言·数据库·人工智能·python·django·sqlite
罗汉松驻扎的工作基地2 小时前
sql server开启远程(适用于2014、2017和2008R2)
运维·服务器·数据库
曹轲恒2 小时前
Redis入门(1)
数据库·redis·缓存
橙露2 小时前
Linux 运维进阶:Shell 脚本自动化部署与服务器监控实战
linux·运维·服务器