MariaDB 运维链路一次跑通:数据库安装、Prometheus 监控到异地连接
前言
这次我想把 MariaDB 的几层需求一次串起来验证:数据库能不能正常安装和操作、指标能不能被 Prometheus 看到、离开内网以后又能不能继续连接。
这三件事其实属于三个不同层次。
第一层是 MariaDB 本身。先在 Debian 12 上把服务装起来,确认版本、建库、建用户、建表这些基础操作都能正常执行。
第二层是监控。通过 mysqld_exporter 暴露数据库指标,再把 9105 加到 Prometheus 配置里,最后到 9090 页面确认 exporter 已经被发现。
第三层才是远程连接。如果数据库只需要在内网使用,到第二层已经足够;只有当人在家里、出差途中或其他网络环境下仍然需要连接 3306 时,才继续增加 cpolar。
所以这篇会一直保持一个明确边界:
- MariaDB 负责数据库服务;
- mysqld_exporter 负责暴露指标;
- Prometheus 负责采集这些指标;
- cpolar 只负责把本地
3306通过公网 TCP 提供出去。
原文用了“生产级”“最小权限”“安全远程访问”等表述,但正文并没有完整演示生产环境安全加固、TLS、访问控制策略或远程用户创建全过程。这一版不会把这些写成已经全部验证完成,而只保留正文实际跑通的结果。

1.先确认 Debian 12 基础环境
MariaDB 还没安装之前,先把运行环境和操作条件确认清楚。原文要求准备:
- 一台运行Debian 12的操作系统环境:该服务器应已成功安装并正常启动,且能够稳定接入互联网,以便下载官方软件包及依赖项。
- 具备管理员权限的用户账户:您需要拥有一个具有sudo权限的非root用户账户。
- 可交互的命令行终端:无论是通过SSH远程连接,还是在物理机/虚拟机上本地登录,您都需要打开一个终端窗口,用于执行后续的命令行操作。
- 一款熟悉的文本编辑器:在配置MariaDB的过程中,您可能需要编辑配置文件(如 /etc/mysql/mariadb.conf.d/50-server.cnf)。请确保系统中已安装并熟悉至少一种命令行文本编辑器,例如轻量级的nano、功能强大的vim,或其他您习惯使用的编辑工具。
原文还建议在正式安装前先执行 sudo apt update 更新软件包列表。

这些条件满足以后,再进入 MariaDB 安装阶段。
2.先把 MariaDB 本身跑通
2.1 系统升级
先按原文升级软件包:
sudo apt update && sudo apt upgrade -y

2.2 安装所需软件包
接着安装后面会用到的软件包:
sudo apt install curl software-properties-common dirmngr -y

2.3 添加 MariaDB APT 存储库
按照原文命令导入仓库配置并指定 MariaDB 10.6:
curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
sudo bash mariadb_repo_setup --mariadb-server-version=10.6
2.4 安装 MariaDB
更新软件包后安装 MariaDB Server 和 Client:
sudo apt update
sudo apt install mariadb-server mariadb-client

2.5 启动并启用 MariaDB
安装完成后启动服务、设置开机自启,并查看状态:
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb

2.6 MariaDB 安全配置
原文在服务启动后继续执行了一步安全配置,截图如下:

2.7 登录并检查版本
服务状态正常以后,再进入数据库做实际验证。如果 root 设置了密码,原文使用:
mysql -u root -p

登录以后查询 MariaDB 版本:
SELECT VERSION();

2.8 做几项基础数据库操作
版本确认以后,原文继续创建数据库:
CREATE DATABASE shan;

然后创建用户并授予权限:
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'localhost';
FLUSH privileges;
SHOW GRANTS FOR 'myuser'@'locahost';

接着创建表并插入一条数据:
CREATE TABLE shan (id INT, name VARCHAR(20), email VARCHAR(20));
INSERT INTO shan (id,name,email) VALUES(01,"lorna","[email]");

原文最后还给出了完整删除 MariaDB 的命令:
sudo apt purge mariadb-server
sudo rm -rf /var/lib/mysql/
3.数据库能用以后,再接 mysqld_exporter
3.1 为什么这里使用 mysqld_exporter?
原文的思路是利用 MariaDB 与 MySQL 协议兼容性,通过 mysqld_exporter 暴露指标,再交给 Prometheus 采集。
原文列出的理由包括兼容性、指标覆盖范围和 Prometheus 生态成熟度。本文不继续扩大到 Grafana 展示,只验证 exporter 是否能够被 Prometheus 发现。
3.2 安装 mysqld_exporter
原文先从 Prometheus 相关下载页面获取 Linux 版本的 exporter:

下载后放到 /app 目录:

也可以按原文直接下载 v0.18.0:
wget
https://github.com/prometheus/mysqld_exporter/releases/download/v0.18.0/mysqld_exporter-0.18.0.linux-amd64.tar.gz
下载后解压:
tar -zxvf mysqld_exporter-0.18.0.linux-amd64.tar.gz

再把目录重命名为 mysqld_exporter:
mv mysqld_exporter-0.18.0.linux-amd64/ mysqld_exporter

3.3 配置并启动 mysqld_exporter
先在 MariaDB 中创建用于监控的账号权限。原文命令如下:
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost' identified by '12345678';
GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost';
flush privileges;

随后创建 exporter 配置文件并写入用户名和密码:
vi localhost_db.cnf
[client]
user=exporter
password=12345678

再创建 systemd 服务:
vi /etc/systemd/system/mysqld_exporter.service
[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

接着添加 prometheus 系统用户,并调整文件权限:
sudo useradd --system --no-create-home --shell /sbin/nologin prometheus
sudo chown -R prometheus:prometheus /app/mysqld_exporter/
sudo chmod 600 /app/mysqld_exporter/localhost_db.cnf
最后重载 systemd、启动 exporter,并检查服务状态:
sudo systemctl daemon-reload
sudo systemctl start mysqld_exporter
sudo systemctl status mysqld_exporter # 查看是否成功
sudo systemctl enable mysqld_exporter # 设置开机自启(可选)

4.让 Prometheus 真正看到 exporter
mysqld_exporter 启动以后,下一步是确认 Prometheus 能不能采集它。
原文没有重新部署 Prometheus,而是直接修改现有 prometheus.yml:
先打开 Prometheus 配置文件:
vi prometheus.yml
- targets: ["ip:9105"]
labels:
app: "mysqld_exporter"

保存配置后重启 Prometheus:
systemctl restart prometheus
然后通过 IP + 9090 打开 Prometheus 页面:

页面能够检测到 mysqld_exporter,说明 exporter → Prometheus 这条监控链已经跑通。

到这里,本地数据库和监控链已经分别成立。
接下来处理的是另一类需求:不在同一网络时,怎么继续连接 MariaDB 的 3306。
下面使用 cpolar给数据库端口增加公网 TCP 入口。需要注意,这一步不会改变 MariaDB 本身,也不参与 exporter 和 Prometheus;它只负责网络可达性。
原文把这部分描述为“安全、加密、带身份认证的隧道”,但正文实际验证的是 TCP 映射和远程 mysql 连接,并没有继续展开 TLS、数据库用户权限策略或企业访问控制,因此这一版只写成“远程连接入口已验证”。
5.安装 cpolar 补充远程数据库入口
5.1 什么是cpolar?
在本文里,cpolar 的用途很具体:把 MariaDB 本地 3306 端口通过 TCP 隧道提供到公网。
5.2 部署cpolar
开始之前,先确认 MariaDB 本身已经正常运行。这样后面如果公网连接失败,可以把数据库问题和隧道问题分开排查。
以下按照原文步骤安装 cpolar:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看 cpolar 服务状态:
sudo systemctl status cpolar

cpolar 安装并启动后,通过主机 IP 加 9200 端口访问 Web 管理界面。登录以后即可配置隧道。

6.先用随机 TCP 验证 3306 能否远程连接
原文这里创建的是 MariaDB TCP 隧道,而不是 SSH 隧道。配置如下:
- 隧道名称:可自定义,本例使用了:MariaDB,注意不要与已有的隧道名称重复
- 协议:tcp
- 本地地址:3306
- 端口类型:随机临时TCP端口
- 地区:China Top

创建完成后,在在线隧道列表里查看随机公网 TCP 地址:
-
tcp 表示使用的协议类型
-
2.tcp.cpolar.top是Cpolar提供的域名
-
15969是随机分配的公网端口号

接下来用原文给出的 MySQL 客户端命令做真实连接测试:
mysql -h 2.tcp.cpolar.top -P 15969 -u remote_user -p

7.随机 TCP 可用以后,再配置固定地址
随机 TCP 已经完成了最重要的验证:外部网络能够连接 MariaDB。
如果准备长期把这组地址保存到客户端或运维配置中,再继续保留固定 TCP 地址。

选择区域和描述:有一个下拉菜单,当前选择的是“China Top”。
右侧输入框,用于填写描述信息。
保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。
列表中显示了一条已保留的TCP地址记录。
-
地区:显示为“China Top”。
-
地址:显示为“8.tcp.cpolar.top:11849”。

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

修改隧道信息,将保留成功的TCP端口配置到隧道中。
- 端口类型:选择固定TCP端口
- 预留的TCP地址:填写保留成功的TCP地址
点击更新。

更新以后再打开在线隧道列表,可以看到随机地址已经切换成保留的固定 TCP 地址。

最后再用固定地址做第二次连接验证:
mysql -h 8.tcp.cpolar.top -P 11849 -u remote_user -p

固定 TCP 同样能够完成连接,说明长期远程入口已经跑通。
总结
这篇真正跑通的是三条相互独立、最后再串起来的链路。
第一条是 MariaDB 本身:
- Debian 12 安装 MariaDB 10.6;
- 启动并设置开机自启;
- 登录数据库查询版本;
- 创建数据库、用户、表并插入数据。
第二条是 监控链:
- 安装
mysqld_exporter 0.18.0; - 配置监控账号与 systemd 服务;
- exporter 监听
9105; - Prometheus 在
prometheus.yml中增加ip:9105; - 重启 Prometheus 后,在
9090页面确认 exporter 已经被发现。
第三条是 远程连接链:
- 安装cpolar;
- 创建指向本地
3306的 TCP 隧道; - 使用
2.tcp.cpolar.top:15969完成一次mysql远程连接; - 再保留
8.tcp.cpolar.top:11849固定 TCP; - 用固定地址再次执行
mysql连接验证。
所以整套架构的职责可以明确分开:
- MariaDB:数据库服务;
- mysqld_exporter:暴露数据库指标;
- Prometheus:采集 exporter 指标;
- cpolar:只负责把
3306从内网提供到外部网络。
原文中有几处技术内容彼此并不完全一致,这一版按照“技术内容不擅自修正”的规则全部保留:
- MariaDB 中授权的监控用户是
mysqld_exporter,但localhost_db.cnf里写的是user=exporter; - 远程连接命令使用的是
remote_user,正文没有展示这个用户的创建过程; - 创建隧道时名称写的是
MariaDB,后面编辑固定 TCP 时又写成了mysql; - 原文把整套方案描述为“生产级”“严格最小权限”,但正文没有完整展开 TLS、访问白名单、远程账号最小权限等生产安全配置。
这些差异没有被改掉,但在结构上已经明确标出来,避免读者把“演示跑通”直接理解成“生产安全方案已经完整验证”。
如果后续要把这篇继续升级成真正的生产运维版本,下一步应该优先补齐数据库远程账号权限、TLS、访问控制和监控账号配置一致性。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2302_79376097/article/details/164828592




