数据一览
- 114 次提交,历时 4 天
- 266 个 PHPUnit 测试,738 个断言
- 35 个 GitHub 工单处理完毕(20 个已关闭,15 个已提出解决方案)
- 12 个新功能
- 0 个回归(所有测试通过)
新功能
1. 完整的 MySQL 8.4 兼容性
MySQL 8.4 已移除 SLAVE 命令,改用 REPLICA。PmaControl 现在能自动检测分支(MariaDB 还是 MySQL)并使用正确的语法:
| 操作 | MariaDB | MySQL 8.4+ |
|---|---|---|
| 停止复制 | STOP SLAVE 'conn' |
STOP REPLICA FOR CHANNEL 'conn' |
| 更改源 | CHANGE MASTER TO ... |
CHANGE REPLICATION SOURCE TO ... |
| 并行线程 | slave_parallel_threads |
replica_parallel_workers |
| Master 状态 | SHOW MASTER STATUS |
SHOW BINARY LOG STATUS |
| GTID | MASTER_USE_GTID = slave_pos |
SET PERSIST gtid_mode = ON(4 个步骤) |
在 MySQL 上激活 GTID 需要渐进式迁移(OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON),先在 master 上然后在 slave 上执行。PmaControl 自动处理所有步骤,包括使用 SET PERSIST 实现持久化而无需修改 my.cnf。
2. Binlog 分析
新增 binlog 分析工具,可从每个 slave 的复制页面访问。选择时间范围后,PmaControl 会:
- 通过 MySQL 协议下载 binlog 文件(如同 IO 线程)
- 解析 GTID 事件(并行性、事务大小)
- 按表统计 DML(INSERT/UPDATE/DELETE)
- 计算每秒数据量
- 检测 DDL(ALTER TABLE、DROP 等)
- 根据 master 和 slave 的实际配置生成建议
交互式图表:
- KB/s 流量 + 复制延迟(双 Y 轴,同步缩放)
- 事务/秒 + master 和 slave 的 threads_running
- 按数据库和表分类的 DML 树状图(随缩放重新计算)
- 按类型着色的 DDL 表格(ALTER=橙色、DROP=红色、CREATE=绿色)
智能缓存:下载的 binlog 存储在 data/binlog_analysis/{server_id}/ 中,TTL 为 30 天。对同一时间范围的分析几乎是即时的。
安全性:MySQL 凭据不再在 ps aux 中可见——使用临时 .my.cnf 文件并设置 chmod 0600。
3. 多源复制
MariaDB 多源服务器(如从 production_fr、production_uk、production_ro 复制的 production_all)现在显示:
- 选项卡:每个复制通道一个选项卡 + 一个"+"选项卡用于添加新源
- 设置表单:完整的 CHANGE MASTER(host、port、user、password、GTID、SSL、replicate_do_db)
- 过滤图表:每个选项卡仅显示其通道的延迟数据
4. GeoIP IPv4 + IPv6
服务器页面上的国旗标识现在支持 IPv6 地址。全部 GeoLite2 范围(650K IPv4 + 1.95M IPv6 = 260 万个范围)已导入 MariaDB,SQL 查询耗时 < 1ms。
5. Group Replication / InnoDB Cluster
架构菜单中新增 Group Replication 页面:
- 通过
performance_schema.replication_group_members可靠检测 PRIMARY/SECONDARY 角色 - 在 Dot3 图中显示(Primary 绿色子组 / Replica 蓝色子组)
- ONLINE/RECOVERING/ERROR/OFFLINE 状态以颜色区分
6. 首页仪表盘重新设计
首页现在显示:
- KPI:服务器数量、可用性(%)、复制状态(%)、守护进程
- 告警:宕机服务器列表(仅监控中的)
- 分布:环境、客户、版本(水平条形图)
- 守护进程:紧凑网格,带 running/stopped/error 徽章
7. ReadOnly 角色
新增 ReadOnly 角色(group_id=10),包含 134 个显式授权的操作,无通配符。禁止:所有写操作、复制控制、密码操作、调试、对 information_schema 的重量级查询、守护进程控制。
8. 页面重新设计
- Client/index:带健康状态条的卡片网格、行内编辑、监控开关
- Architecture/index:深蓝色渐变头部、整洁的 SVG 网格
- Slave/show:多源选项卡、Chart.js 4.5.1 图表带同步缩放
修复的 Bug
安全
- 在 5 个方法中对
connection_name进行 SQL 注入清理 Client::update()中可编辑字段白名单- 进程列表中隐藏密码(使用
--defaults-extra-file代替--password=)
稳定性
- ts_value 分区在表间不同步(修复:按表创建 + 包含今天)
Extraction2:对缺失分区使用sql_query_silent- Binlog 分析:使用停滞检测代替固定超时(120 秒无增长 = 终止)
testAccessReplication():为 MariaDB 10.5+ 添加BINLOG MONITOR- 清除 binlog 前设置
slave_connections_needed_for_purge=0
UI
- Chart.js 迷你图从 v2 迁移到 v4
- 多通道图表的 Canvas ID 冲突
- "加载前一天"始终递减,即使没有数据
- 修复不稳定的 Tooltips(使用
nearest模式代替index) - sys schema 列的 Tooltips(100+ 列已文档化)
路线图——待完成事项
开放工单(35 个)
Debian 13 安装器(7 个工单):
- 可预测的密码 (#123)
/tmp/config.json中的明文凭据 (#117)- 仓库中的 SSH 私钥 (#114)
- MariaDB 版本被忽略 (#120)
/var/www所有权问题 (#119)
Binlog 分析:
- Gantt 时间线与图表对齐 (#106)
- 分析被重复启动 (#122)
- MySQL 日志的非原子写入缓存 (#121)
数据质量:
- 延迟规范化 NULL → 0 (#113)
- MySQL 8 规范化中丢失 SSL 状态 (#116)
- 首页仪表盘:SingleStore 被分类为 MySQL (#130)、PID 重用 (#129)、seconds_behind_source (#126)
遗留问题:
- 带排序规则的数据库重命名 (#26)
- LDAP 编码 (#40)
- Graphviz 中带连字符的表名 (#65)
- SqlFormatter 已弃用的 strlen (#72)
计划中的改进
- 时间序列聚合:raw → 1min → 1hr → 1day,带标准差用于异常检测
- 告警:延迟、服务器宕机、磁盘空间的 Telegram/邮件通知
- 插件系统:从 GitHub 安装/卸载
- REST API:暴露指标用于外部集成
链接
- GitHub:github.com/PmaControl/PmaControl
- Telegram:t.me/pmacontrol
- 开放工单:Issues
PmaControl 是一款开源的 MariaDB / MySQL 监控工具。欢迎贡献。
评论 (0)
暂无评论。
发表评论