Hi, I’m using Percona Operator 1.19.0 with PXC 8.0 and trying to use --transition-key for InnoDB encrypted backups. but while trying to restore using the same transition key I’m getting “Wrong transition key?“ error.
From the backup pod logs, I see that it runs SST on donor node via garbd and not run xtrabackup and it seems that it doesn’t pass the transition-key arg.
I wanted to ask if i’m doing something incorrectly, how can I use the transition key to take backup of encrypted tables?
Native encryption: Built-in support for encrypted backups with proper key management. This functionality is not yet available in version 1.19.0 but will be added in future releases.
Two things: 1) you must enable the XtrabackupSidecar feature gate in the operator, otherwise the backup method remains the default SST. 2) Wait until the feature for encryption is added to the operator.
I wanted to ask is there a recommended way (or even a hacky way) to backup and restore encrypted tables currently?
My setup:
Percona Operator 1.19.0 with PXC 8.0 on multi node cluster.
I’m using component_keyring_file for encryption and I’m mounting the file as an extra PVC which is on rwx file system shared by all pxc pods.
I initially tried without using a transition key and let the backup encrypted by one of the existing pod’s master key. While restoring I added the keys to the new cluster’s keyring-file but that restoration failed with 2026-01-28T05:07:06.494451-00:00 0 [ERROR] [MY-011825] [Xtrabackup] Error reading xtrabackup_keys: failed to derive encryption key 2026-01-28T05:07:06.494502-00:00 0 [ERROR] [MY-011825] [Xtrabackup] failed to load tablespace keys
I’m guessing because the restore job pods didn’t have the keyring file mounted, but I was not sure how can I mount it and also ensure that component_keyring_file config is also present there.
Is it possible to add extraPVC feature to the Restore pod, similar to the pxc pods, so we can use it to mount the keyring file containing old cluster’s keys and then use the --component-keyring-config xtrabackup arg to mention the keyring config? Do you see any issue with this approach or is there any simpler way?
HI @Yash_Daga,
In reading the code for the operator, xtrabackup is already executed using --transition-key, however, this only works when using component-keyring-vault and is not supported with keyring-file.
Thus, if you want to use encrypted tables, and be able to backup/restore those encrypted tables, then you need to migrate to using Vault.
I see that the generated transistion key is stored, in the sst_info file inside the backup itself.
I tried restoring using that, and the operator was able to decrypt the xtrabackup keys file, but failed at the –generate-new-master key step since the restore pod didn’t have any keyring file mounted. So if we could just mount the extraPVC(which stores our keyring file) of the cluster pod to the restore pod, we might be able to restore without using vault.
Or we could also maybe allow an argument to stop the operator from trying to generate a new master key?
For the feature of being able to mount additional PVC during restore, that does seem reasonable to me.
I don’t think the transition key is stored in vault; that’s in the sst_info. It’s the InnoDB master key which goes into vault, and a new one is generated on restore. After you configured Vault, did you reconfigure the cluster so that PXC started using that key as well?
From the code it seems that if vault was configured in the cluster where we take backup the transistion key is deleted from the sst_info file and stored into the vault.
I also verified this in the backup I took.
Yes, i redeployed the cluster after configuring vault.
Hi sure if we end up using keyring component on a extra pvc, I can help by raising a PR.
But I was also trying to perform backup and restore of encrypted tables using vault, which is supported by the operator on pxc 8.0 but I keep getting the error I mentioned above, could you help me in debugging that, thanks!
No, I’m using the default method used by PerconaXtraDBClusterBackup(SST).
No, I’m not passing any transistion key the operator is storing the transistion inside the vault during the backup and while restoring on the same cluster it successfully reads it from the same vault(verified it by using custom image with logging).