Percona MySQL 1.3.0 版:自动调参热生效,切换不丢数,PITR 可加密

三件正事

官方发布口径很直接:这个版本给跑在 Kubernetes 上的 MySQL 推进了三件事——按 Pod 资源自动调 MySQL 参数、异步集群切换不再丢在途数据、binlog 落盘加密后 PITR 照用。外加两个升级前要看的默认值变化。

1.3.0 三项能力总览(原文 Featured Image)

图:1.3.0 三项能力总览(图源:Percona Blog Featured Image)

升级前必读:两个默认值变了

leader election 默认开启。 绝大多数生产部署都该开;单副本控制器想保持旧行为,把 Deployment 上的 PSO_LEADER_ELECTION_ENABLED 设为 false。

异步集群从此必须配备份。 这条最容易绊住升级:零丢数切换依赖读取故障主库的 binlog,没配备份的异步集群,operator 直接拒绝 reconcile。要么按官方建议把备份开起来,要么显式声明逃生门 spec.unsafeFlags.asyncFailoverWithPossibleDataLoss: true——即回到 1.3.0 之前”快速切换、但老主库上未送达事务认丢”的行为。组复制集群不受影响。

自动调参:从 Pod 资源反推 MySQL 配置

autoConfig 工作方式(原文 Figure 1)

图:autoConfig 按 Pod 资源与负载形态反推 MySQL 配置(图源:Percona Blog)

手工调参的通病是调一次管一阵:Pod 资源上限改了,手调的值不会跟着改。1.3.0 在 CR 里加了 spec.mysql.autoConfig:按 Pod 的 CPU、内存和你声明的负载形态算出 MySQL 配置。loadType 接受 mostlyReads / someWrites / equalReadsWrites / heavyWrites 四档(原文口径),version 按 X.Y.Z 写明目标版本;CRD 强制要求开启时 mysql.resources 必须同时给 CPU 和内存——没有上限就没法算。

热生效:变量允许的范围内,operator 用 SET GLOBAL 落配置,静态变量才走重启、逐 Pod 滚动。

零丢数切换:先捞事务,再升主

异步集群零丢数切换流程(原文 Figure 2)

图:零丢数切换——从故障主库 sidecar 捞回缺失 binlog 再升主(图源:Percona Blog)

异步复制的定义就是先答客户端、后给副本——主库带着副本还没读到的 binlog 挂了,这些事务就没了,HA 控制器再健全也救不了。1.3.0 的做法:给每个 MySQL Pod 的 xtrabackup sidecar 加一个 6450 端口的 POST /failover/stream,把 binlog 以 tar 流形式供出来;主库故障后,切换工具在选定副本上跑完整的打捞序列:

步骤 动作
1-2 探活故障主库(活了就收手);停复制、flush relay log
3-4 读 Source_Log_File / Read_Source_Log_Pos 定缺口,从故障主库 sidecar 拉回缺失 binlog
5-6 把拉回的 binlog 裁到最后一个完整事务,拼进最近的已关闭 relay log
7 启动 SQL 线程,等全部缺失事务应用完——**然后才升主**

预算条款:默认最多等故障主库可达 1 小时,从首次尝试起算而非按次重算;超时后按 on-timeout 策略走 Abort(按住不动)或 ForceWithPossibleDataLoss(强行升主)。前提也写明了:故障主库的 mysqld 可以停着,sidecar 必须能答话——这就是异步集群强制备份的由来。

加密 binlog 的 PITR:信封加密,缺钥匙就报错

encrypted PITR 信封加密结构(原文 Figure 3)

图:PITR 信封加密——每文件一把 DEK,由 keyring Secret 里的 KEK 包裹(图源:Percona Blog)

binlog server 往对象存储投递 binlog,1.3.0 起投出去的文件可以静态加密:每个文件一把 DEK,DEK 由 keyring Secret 里的 KEK 包裹——密钥材料集中放在 Kubernetes Secret,不再散在各 MySQL Pod 上。CR 暴露三个字段:cipher(默认 AES-256-CTR)、kekId(keyring 里的 KEK 条目名)、keyringSecret(默认键 keyring.json)。恢复侧先读 keyring、解出文件密钥、再把解密后的事件流给 mysqlbinlog 灌进恢复后的实例;keyring 缺失或 KEK 对不上直接 fail fast,不产出半截数据。

其他改进(官方清单摘要)

应用用户写进 CR 顶层 spec.users;S3 兼容存储支持自定义 CA(私配 MinIO/企业 CA 场景);TLS 支持 cert-manager ClusterIssuer、轮换不重启(新旧 CA 合并热加载);备份超 deadline 快速失败;operator 日志跨重启保留;新增支持 DigitalOcean Kubernetes(DOKS) 和 MySQL 9.7。

小夏点评

  • “异步集群没备份就拒绝 reconcile”这种默认值变化,本质是官方把可靠性底线写进了控制器行为——宁愿绊你一下,不让你静默丢数。升级说明里这种”会咬人的变更”每一条都值得单独过一遍。
  • 打捞序列最后一步”等事务应用完才升主”+1 小时预算,等于官方承认:快速切换和零丢数之间必须有人做选择,它把选择权做成参数(Abort/Force、unsafe flag),而不是替你做。
  • 对中国 IT 运维/开发者:这三件事都是往”day-2 操作进 spec、出 runbook”方向推——调参、切换、加密恢复全部 CR 化。国内用 Operator 托管数据库的团队越来越多,这类控制器行为变化(默认值、拒绝 reconcile、fail fast)比新功能更值得盯,因为它们直接改变你现有 YAML 的运行时语义。
  • 参考

  • 原文(Percona Blog,2026-10-29):https://www.percona.com/blog/percona-operator-for-mysql-1-3-0/
  • 版本发布说明:https://docs.percona.com/percona-operator-for-mysql/latest/ReleaseNotes/Kubernetes-Operator-for-PS-RN1.3.0.html
  • 您可能还喜欢...

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注