v2.7.0
NEW FEATURES
- add
clean_broken_retentionCLI command — walks top-level of remotepathandobject_disks_pathand batch-deletes (with retry) every entry that is not present in the live backup list and not matched by any--exclude=<glob>(and optionally scoped by--include=<glob>). Dry-run by default; pass--committo actually delete. Useful for cleaning up orphans left by failed retention runs, fix #1371 - add
infoCLI command for per-table backup size breakdown — shows per-table size, part count, and disk breakdown for local and remote backups, supports--tables=<db>.<table>glob filter and--format=text|json|yaml|csv|tsv, acceptsall|local|remotescope, fix #1388 - add
force_rebalanceconfig option (clickhouse.force_rebalance, envCLICKHOUSE_FORCE_REBALANCE) — distribute restored data across multiple JBOD disks under the same storage policy even when the source disk name (e.g.default) exists on the target machine, fix #1350 - switch FIPS variant from FIPS 140-2 boringssl to native Go 1.24+ FIPS 140-3 (
GODEBUG=fips140=on); embed an ACVP wrapper into the shippedclickhouse-backup-fipsbinary with dual entry points (clickhouse-backup-acvpargv0 dispatch andclickhouse-backup acvpsubcommand) and ship a tracked public-scope ACVP reproducibility flow, fix #1341, #1364, #1391, #1395 - add safety check to
restore/restore_remote: fail without--rm/--dropwhen target tables already exist and contain rows (checked viaclusterAllReplicas('{cluster}')whenrestore_schema_on_clusteris set) to avoid dangerous accidentalDROP TABLE, fix #1325 - add checksum verification during
upload --diff-from/--diff-from-remotewhen part name matches, to avoid uploading mismatched data and to detect silent corruption, fix #1307
IMPROVEMENTS
- speed up
restore_remotefrom S3 incremental chains: cache backup list and avoid redundantListObjectscalls per table (previously 8h on 280GB / 3500 tables shrinks to minutes), fix #1362, #1361 - reduce backup memory footprint for databases with thousands of tables (regression introduced in v2.6.42), fix #1360
- wrap S3 credentials with
aws.NewCredentialsCache()to avoid resolving credentials on every API call (IMDS/STS), reducing latency and throttling in IRSA + AssumeRole flows, fix #1335 - simplify
hash_of_all_filescomputation via a single post-FREEZESELECTfromsystem.partsinstead of per-file hashing — also enables--hardlinks-exists-filesto consultsystem.partschecksums during download, fix #1338 - isolate FREEZE shadow directory per backup as
/var/lib/clickhouse/shadow/backup-{uuid}so concurrent backups and cleanup-after-failure don't clobber each other's shadow data, fix #1345 - add option to skip persisting
listcalls into the API serveractionsstate — prevents unbounded growth of actions state when/backup/listis used as a monitoring endpoint during long-running backups, fix #1359 - improve
killcommand to ensure all in-flight operations really finish and to remove leftover.pidfiles, fix #1365 - document missing/incorrect concurrency defaults in
ReadMe.md(download_concurrency,s3.concurrency,cos.concurrency,sftp.concurrency,ftp.concurrency), fix #1346 - migrate integration tests to testcontainers-go for better parallelism and isolation, fix #1336
- fix the
list_durationlog field formatting inpkg/storage/general.go(was emitting raw nanoseconds), fix #1337
BUG FIXES
- fix
restore_remotefor tables using sparse-column serialization: accept empty sparse metadata files instead of treatingStorageObjectCount=0as corruption, affects ClickHouse 23.8+, fix #1372 - fix
restore_remoteaborting the entire restore when an incremental backup contains a table absent from the required full backup; the missing table is now skipped with a warning, fix #1373 - fix
object_diskbackup on S3 sources with SSE-C: handle 404 from server-sideCopyObjectby falling back to streaming and stop issuingHeadObject(returns 400) on SSE-C source objects beforeGetObject, fix #1374 - fix
--rbac-onlybackup failing with "is empty backup" when the database contains RBAC objects but no tables andallow_empty_backups=false, fix #1355 - fix nested
sshconsuming stdin from thewhile readloop in the rsync helper (usessh -n) so all backup metadata files are processed instead of only the first, fix #1368 - fix backup retention logic in the rsync helper: correct line counting, numeric comparison and arithmetic handling so old backups are properly cleaned up, fix #1369