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

图: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 按 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 滚动。
零丢数切换:先捞事务,再升主

图:零丢数切换——从故障主库 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:信封加密,缺钥匙就报错

图: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。
