Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.
A point-in-time restore creates a new deployment with the data a deployment held at a moment you choose, to the second. It replays a continuous backup, which archives the FalkorDB append-only file (AOF) as it is written, so it can return to any moment the archive covers rather than only to the moment a full backup was taken.Like every restore, it creates a new deployment and leaves the source unchanged. See Restore to a new deployment for what the new deployment copies from the source.It works for standalone, replication and sharded deployments. A sharded deployment is restored to the same second on every shard, with the caveats in Sharded deployments.
Continuous backups come from a backup schedule that uses the aof method.
1
Create an aof schedule
Open the deployment, go to Schedules, and select New Schedule. Choose the aof backup method and set Retention to how far back you want to be able to restore, for example 7d.With the API:
POST /api/clusters/<deployment>/backups/schedules?namespace=<namespace>
The cron frequency doesn’t time anything for aof: the continuous backup starts as soon as the schedule is enabled and runs until it is disabled.On a sharded deployment created before this release, the schedule can be refused with Backup method 'aof' is not supported by backup policy. KubeBlocks adds the new method to a deployment’s backup policy the next time it reconciles the deployment. Change any annotation on the deployment to make it reconcile now, then create the schedule again:
Go to Backups. A backup of type continuous appears with the status running. It stays running for as long as the schedule is enabled. Its Restorable field shows the range it covers once it has archived something.
A continuous backup next to the daily full backups. Restorable is the range it can restore to.
Keep a datafile or volume-snapshot schedule next to the aof one (sharded deployments offer datafile only). A continuous backup doesn’t carry offloaded graphs, and a full backup is what you restore when a point in time isn’t needed.
The continuous backup needs FalkorDB to stamp a time into the AOF. The addon’s FalkorDB configuration turns aof-timestamp-enabled on for every deployment, and the continuous backup turns on aof-disable-auto-gc itself while it runs, so FalkorDB keeps its AOF files until they are archived. Leave aof-timestamp-enabled set to yes: if it is off, the continuous backup stops with an error and archives nothing. To check it:
kubectl exec -n <namespace> <deployment>-falkordb-0 -c falkordb -- \ sh -c 'redis-cli --no-auth-warning -a "$REDIS_DEFAULT_PASSWORD" CONFIG GET aof-timestamp-enabled'
The window runs from the oldest archived data to the newest:
Edge
What sets it
Earliest
The schedule’s retention. Archived AOF older than the retention is deleted, so the earliest restorable time stays roughly one retention period behind the present. It moves in steps, each time FalkorDB rewrites its AOF and an older part of the archive expires.
Latest
How far the archive has caught up. The archive is shipped every few seconds, and the latest time keeps moving forward even while nothing is written. It trails the present by several seconds, since the addon only claims a second once its writes are certain to be in the uploaded archive. Writes made after it aren’t in a restore, so stop writes and wait for the latest time to pass them when you need everything.
The archive starts from the snapshot FalkorDB took at its last AOF rewrite before the schedule was enabled, so the window can begin somewhat before you enabled the schedule. Go by the window the Admin Server reports, not by when you enabled it. Disabling the schedule stops the archive, and the window then ends at that point. If enabling it again starts a new continuous backup, that backup has a window of its own, so a deployment can have several windows with a gap between them. A continuous backup that fails keeps the window it archived before failing.The window doesn’t depend on full backups. The continuous backup archives its own copies of the data the AOF builds on, so it restores without a separate full backup.To see the window:
GET /api/clusters/<deployment>/restores/window?namespace=<namespace>
ranges lists each window, latest first. Times are UTC. When ranges is empty, reason says why: there is no continuous backup yet, or, on a sharded deployment, the shards don’t share a time yet or the shard count has changed since the backup started (see Sharded deployments).
Select Restore at the top of the page, or Restore to a point in time on the continuous backup.
Under Restore from, choose Point in time.
Choose a date and time. The picker starts at the latest restorable time, in your browser’s time zone, which is shown under it. Select Use UTC to choose the time in UTC instead. The restorable window is listed in both your time zone and UTC.
Enter a name for the new deployment.
Select Restore Now.
Restoring falkordb-prod as it was at 10:00 Berlin time, 09:00 UTC.
A time outside the window keeps Restore Now disabled:
11:00 Berlin time is after the latest restorable time.
On the day the clocks go back, an hour of local times happens twice, and the picker refuses a time in that hour: switch it to UTC to say which one you mean. A local time skipped when the clocks go forward is refused too. When the latest restorable time falls in a repeated hour, the picker starts in UTC.
restoreTime is UTC, to the second. backupName can be left out: the Admin Server uses the continuous backup whose window holds the time. If you give backupName, it must name that continuous backup.A point-in-time restore uses only the deployment’s own continuous backups, in its own namespace. Leave out backupNamespace, or set it to the deployment’s namespace.The request is rejected with 400 when the time is outside every window, when backupNamespace names another namespace, when backupName names a backup that isn’t a continuous one, or when the backup is a sharded deployment’s and its shard count has changed since the backup started.
--restore-time takes any ISO 8601 time with a zone, and the CLI sends it to the API in UTC. A time without a zone is refused, so that a restore never lands at the wrong hour.
kubectl get clusters.apps.kubeblocks.io -n <namespace> <new-deployment>kubectl get restores.dataprotection.kubeblocks.io -n <namespace> \ -o custom-columns=NAME:.metadata.name,PHASE:.status.phase | grep '^<new-deployment>-'
Running alone doesn’t mean the data is in. A sharded deployment reports Running once its shards form, and only then imports each shard’s data, which can take a while longer. Wait until every restore whose name starts with the new deployment’s name shows Completed. A sharded deployment has two per shard, one that prepares the shard’s data and one that imports it. If one shows Failed, the new deployment is incomplete: delete it and restore again.The new deployment’s kubeblocks.io/restore-from-backup annotation names the continuous backup and the restoreTime. Check the data itself before you move applications to it: look for a write you know happened just before the restore time, and confirm that one made just after it is missing.
Each shard archives its own AOF, from one of its replicas, or from its primary when it has none. The window the Admin Server reports for a sharded deployment is the time every shard covers: from the latest of the shards’ earliest times to the earliest of their latest times. While any shard has archived nothing yet, or has stopped archiving, there is no window.A restore replays every shard’s archive up to the same restore time and writes the result into the new deployment, so each key lands on the shard that owns its slot there. The new deployment has as many shards as the source, but its own slot layout.
Writes across shards. The shards agree on the restore time to the second, and to how closely the clocks of their nodes agree. A write that touched several shards, such as a client writing keys of different slots one after another, can come back on one shard and not another when it spans the restore time.
After a change in shard count. KubeBlocks fixes a continuous backup’s shards when it starts, so after a scale-out the new shard is never archived, and a restore to a time before a scale-in would need the old shard count, which nothing records. Once a sharded deployment has a different number of shards than its continuous backup archives, the Admin Server leaves that backup out of the window, refuses to restore from it, and replaces it, whether the deployment was scaled in the Admin UI or not. Within a minute of the scale, it:
disables the aof schedule. A scale-in waits for this: the continuous backup reads a removed shard’s volume, which KubeBlocks can’t delete while it’s in use;
waits for the old continuous backup to stop running, and for any new deployment still being restored from it, then deletes it. A restore from it that failed holds this step until you delete the deployment it was creating;
once the deployment is Running with its new shards, enables the schedule again, and KubeBlocks starts a new continuous backup.
The new window begins when the new backup has archived every shard, a few minutes after the scale. Times before that can only be restored from a full backup, and a full backup taken before the scale restores to as many shards as it holds. Each step appears in the audit log, as system:continuous-backups.The Admin Server checks the shard count every minute. If a deployment is scaled and scaled back to its old shard count within that time, the continuous backup isn’t replaced, and a shard that existed only in between was never archived: a restore to a time while it held slots can miss the writes to them. Scale one step at a time, or check the restored data for that period.The Admin Server does this for an aof schedule created on the Schedules tab or with the API. For an aof entry enabled in a schedule KubeBlocks generated, take the same steps by hand: a running backup can’t be deleted, and enabling the schedule again without deleting the backup resumes the old one.
Replication lag. A continuous backup archives a replica when the deployment has one. A replica stamps a write with the time it applies it, not the time the primary committed it, so a write committed within the replication lag before the restore time (usually milliseconds) can be left out.
Offloaded graphs. A continuous backup doesn’t package the dump files of offloaded graphs, so it can’t be relied on to bring them back. Restore a datafile or volume-snapshot backup, which the restore flow treats as full backups, when you need offloaded graphs.
Restore in place. Like every restore, a point-in-time restore creates a new deployment. See Restore in place for how to replace a deployment’s data.
One-second precision. The restore keeps every write stamped at or before the chosen second and drops the rest.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"FalkorDB Docs","description":"Official FalkorDB documentation — the high-performance graph database for GraphRAG, Cypher queries, and knowledge graphs powering accurate GenAI applications.","colors":{"primary":"#FF8101","light":"#FDE900","dark":"#FF8101"},"logo":{"light":"https://mintcdn.com/falkordb-core/UsHkXui7FITcReVh/images/falkordb-logo-color.svg?fit=max\u0026auto=format\u0026n=UsHkXui7FITcReVh\u0026q=85\u0026s=d6cd14615384aaf1873f14dcebd7da7f","dark":"https://mintcdn.com/falkordb-core/4RKo-4HTPunDsB0h/images/falkordb-logo.svg?fit=max\u0026auto=format\u0026n=4RKo-4HTPunDsB0h\u0026q=85\u0026s=9fd7d3e195a0bf8907a119804e3f0694","href":"https://www.falkordb.com"},"favicon":"https://mintcdn.com/falkordb-core/4RKo-4HTPunDsB0h/images/favicon.ico?fit=max\u0026auto=format\u0026n=4RKo-4HTPunDsB0h\u0026q=85\u0026s=01ae535e76349bd2047c3da2475b1356","appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://github.com/FalkorDB/FalkorDB","label":"Github"},{"href":"https://support.falkordb.com","label":"Support"},{"href":"https://discord.com/invite/6M4QwDXn2w","label":"Discord"}],"primary":{"type":"button","label":"Try FalkorDB Cloud","href":"https://app.falkordb.cloud"}},"footer":{"socials":{"github":"https://github.com/FalkorDB/FalkorDB","x":"https://x.com/FalkorDB","linkedin":"https://www.linkedin.com/company/falkordb","discord":"https://discord.com/invite/6M4QwDXn2w","youtube":"https://www.youtube.com/@falkordb","reddit":"https://www.reddit.com/r/falkordb"}},"seo":{"metatags":{"og:image":"https://docs.falkordb.com/images/falkor-logo.png","og:image:alt":"FalkorDB — the high-performance graph database for GraphRAG and GenAI","og:locale":"en_US","twitter:image":"https://docs.falkordb.com/images/falkor-logo.png","twitter:image:alt":"FalkorDB — the high-performance graph database for GraphRAG and GenAI","twitter:card":"summary_large_image","twitter:site":"@FalkorDB","twitter:creator":"@FalkorDB","author":"FalkorDB","publisher":"FalkorDB","application-name":"FalkorDB Docs","robots":"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1","googlebot":"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1","keywords":"FalkorDB, graph database, GraphRAG, knowledge graph, Cypher, OpenCypher, vector search, GenAI, RAG, RedisGraph, RedisGraph alternative, RedisGraph successor, RedisGraph migration, RedisGraph end of life, sparse matrix, linear algebra"},"organization":{"id":"https://www.falkordb.com/#organization","name":"FalkorDB","legalName":"FalkorDB Inc.","url":"https://www.falkordb.com","logo":"https://docs.falkordb.com/images/falkor-logo.png","sameAs":["https://github.com/FalkorDB/FalkorDB","https://x.com/FalkorDB","https://www.linkedin.com/company/falkordb","https://discord.com/invite/6M4QwDXn2w","https://www.youtube.com/@falkordb","https://www.reddit.com/r/falkordb/"]}},"integrations":{"gtm":{"tagId":"GTM-MBWB627H"}},"contextual":{"options":["copy","view","assistant","chatgpt","claude","perplexity","mcp","add-mcp","cursor","vscode","download-spec"],"display":"header"},"markdown":{"instructions":["FalkorDB is a graph database that speaks the Redis protocol. Queries are issued as OpenCypher through the GRAPH.QUERY and GRAPH.RO_QUERY commands, not over Bolt or a SQL connection.","FalkorDB implements a subset of OpenCypher with proprietary extensions. Do not assume Neo4j-only syntax or procedures are available — check /cypher/cypher-support and /cypher/known-limitations before using a clause.","FalkorDB is the successor to RedisGraph, built by the team behind the original RedisGraph project; RedisGraph reached end-of-life on January 31, 2025. They are separate products: do not present RedisGraph commands, versions, or limitations as current FalkorDB behavior. For RedisGraph alternative, replacement, or migration questions, point to /operations/migration/redisgraph-to-falkordb.","Use the official clients listed in /getting-started/clients rather than generic Redis or Neo4j drivers, and prefer the language the user is already working in.","Configuration parameters are set with GRAPH.CONFIG SET or at startup; cite the exact parameter name from /getting-started/configuration rather than inventing one.","This site covers four products: FalkorDB (core), FalkorDB Cloud, FalkorDB Enterprise, and the GraphRAG SDK. Name which one an answer applies to, since setup and operations differ."]},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"falkordb-core","hasAudioNarration":false,"actualSubdomain":"falkordb-core","customDomains":["docs.falkordb.com"],"gitSource":{"type":"github","owner":"falkordb","repo":"docs","deployBranch":"docs-site","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aeb814c0fc5c41469337170","collectionId":"c8780dfa-8e4f-4f54-87cc-9b938c47283e","liveDeploymentHistoryId":"6aeb814c0fc5c41469337170","schemaVersion":"v3"},"feedback":{"edits":true,"issues":true,"thumbs":true},"entitlements":{},"buildId":"6aeb814c0fc5c41469337170","clientVersion":"0.0.4064","searchFilterCounts":[{"language":"default","tag":"FalkorDB Cloud","count":227},{"language":"default","tag":"API Reference","count":209},{"language":"default","tag":"Documentation","count":196},{"language":"default","tag":"FalkorDB Enterprise","count":191},{"language":"default","tag":"FalkorDB","count":171},{"language":"default","tag":"API reference","count":131},{"language":"default","tag":"Admin Server API","count":128},{"language":"default","tag":"Enterprise BYOA","count":55},{"language":"default","tag":"Enterprise","count":55},{"language":"default","tag":"Browser","count":44}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar-content .sidebar-group{margin-top:0.5rem}#sidebar-content .sidebar-group:first-child{margin-top:0}"}],"page":{"pagePath":"enterprise/operations/restore-point-in-time","slug":"/enterprise/operations/restore-point-in-time","pageMetadata":{"title":"Restore a FalkorDB deployment to a point in time","sidebarTitle":"Point-in-time restore","description":"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.","icon":"clock-rotate-left","href":"/enterprise/operations/restore-point-in-time"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Frame,Heading,Note,OptimizedImage,Step,Steps,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A point-in-time restore creates a new deployment with the data a deployment held at a moment you choose, to the second. It replays a continuous backup, which archives the FalkorDB append-only file (AOF) as it is written, so it can return to any moment the archive covers rather than only to the moment a full backup was taken.`}),`\n`,_jsxs(_components.p,{children:[`Like every restore, it creates a new deployment and leaves the source unchanged. See `,_jsx(_components.a,{href:`/enterprise/operations/restore-new-database`,children:`Restore to a new deployment`}),` for what the new deployment copies from the source.`]}),`\n`,_jsxs(_components.p,{children:[`It works for standalone, replication and sharded deployments. A sharded deployment is restored to the same second on every shard, with the caveats in `,_jsx(_components.a,{href:`#sharded-deployments`,children:`Sharded deployments`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`turn-on-continuous-backups`,children:`Turn on continuous backups`}),`\n`,_jsxs(_components.p,{children:[`Continuous backups come from a backup schedule that uses the `,_jsx(_components.code,{children:`aof`}),` method.`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Create an aof schedule`,children:[_jsxs(_components.p,{children:[`Open the deployment, go to `,_jsx(_components.strong,{children:`Schedules`}),`, and select `,_jsx(_components.strong,{children:`New Schedule`}),`. Choose the `,_jsx(_components.code,{children:`aof`}),` backup method and set `,_jsx(_components.strong,{children:`Retention`}),` to how far back you want to be able to restore, for example `,_jsx(_components.code,{children:`7d`}),`.`]}),_jsx(_components.p,{children:`With the API:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`POST /api/clusters/\u003cdeployment>/backups/schedules?namespace=\u003cnamespace>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"scheduleName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cdeployment>-pitr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"backupMethod\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aof\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"frequency\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0 3 * * *\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"retentionPeriod\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"7d\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`The cron frequency doesn’t time anything for `,_jsx(_components.code,{children:`aof`}),`: the continuous backup starts as soon as the schedule is enabled and runs until it is disabled.`]}),_jsxs(_components.p,{children:[`On a sharded deployment created before this release, the schedule can be refused with `,_jsx(_components.code,{children:`Backup method 'aof' is not supported by backup policy`}),`. KubeBlocks adds the new method to a deployment’s backup policy the next time it reconciles the deployment. Change any annotation on the deployment to make it reconcile now, then create the schedule again:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` annotate`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clusters.apps.kubeblocks.io`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`deploymen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` falkordb.cloud/backup-policy-sync=\"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`date`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +%s)\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --overwrite`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Check that it is archiving`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Backups`}),`. A backup of type `,_jsx(_components.code,{children:`continuous`}),` appears with the status `,_jsx(_components.code,{children:`running`}),`. It stays `,_jsx(_components.code,{children:`running`}),` for as long as the schedule is enabled. Its `,_jsx(_components.strong,{children:`Restorable`}),` field shows the range it covers once it has archived something.`]}),_jsx(Frame,{caption:`A continuous backup next to the daily full backups. Restorable is the range it can restore to.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=8df3269ec6563d22eda41a07df36de78`,alt:`The Backups tab of falkordb-prod, with a running continuous backup whose Restorable field reads 26/10/2026 04:00:12 to 02/11/2026 10:30:15, a Restore to a point in time button on it, and completed daily full backups below`,\"data-og-width\":`2720`,width:`2720`,\"data-og-height\":`1720`,height:`1720`,\"data-path\":`enterprise/images/point-in-time-restore/backups-tab.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?w=280\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=5cb7d62d69410600e69a12a8ac273a80 280w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?w=560\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=b0fce54367944d6655a9d9c3cc0beef7 560w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?w=840\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=350c688a18c94b99c5f7333e0f53d404 840w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?w=1100\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=d4eedc8e292f3e4bbf06747450b9c58c 1100w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?w=1650\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=2f3285bb416cdcda15c0a18f7109a4aa 1650w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/backups-tab.png?w=2500\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=608c83136fb07f8f443d8ff6bd9d257a 2500w`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` get`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backups.dataprotection.kubeblocks.io`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -l`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dataprotection.kubeblocks.io/backup-type=Continuous`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` custom-columns=NAME:.metadata.name,STATUS:.status.phase,START:.status.timeRange.start,END:.status.timeRange.end`})]}),`\n`]})})})]}),_jsx(Step,{title:`Keep full backups too`,children:_jsxs(_components.p,{children:[`Keep a `,_jsx(_components.code,{children:`datafile`}),` or `,_jsx(_components.code,{children:`volume-snapshot`}),` schedule next to the `,_jsx(_components.code,{children:`aof`}),` one (sharded deployments offer `,_jsx(_components.code,{children:`datafile`}),` only). A continuous backup doesn’t carry `,_jsx(_components.a,{href:`#limitations`,children:`offloaded graphs`}),`, and a full backup is what you restore when a point in time isn’t needed.`]})})]}),`\n`,_jsxs(_components.p,{children:[`The continuous backup needs FalkorDB to stamp a time into the AOF. The addon’s FalkorDB configuration turns `,_jsx(_components.code,{children:`aof-timestamp-enabled`}),` on for every deployment, and the continuous backup turns on `,_jsx(_components.code,{children:`aof-disable-auto-gc`}),` itself while it runs, so FalkorDB keeps its AOF files until they are archived. Leave `,_jsx(_components.code,{children:`aof-timestamp-enabled`}),` set to `,_jsx(_components.code,{children:`yes`}),`: if it is off, the continuous backup stops with an error and archives nothing. To check it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`deploymen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`-falkordb-0`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` falkordb`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` sh`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'redis-cli --no-auth-warning -a \"$REDIS_DEFAULT_PASSWORD\" CONFIG GET aof-timestamp-enabled'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`what-decides-the-restorable-window`,children:`What decides the restorable window`}),`\n`,_jsx(_components.p,{children:`The window runs from the oldest archived data to the newest:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Edge`}),_jsx(_components.th,{children:`What sets it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Earliest`}),_jsx(_components.td,{children:`The schedule’s retention. Archived AOF older than the retention is deleted, so the earliest restorable time stays roughly one retention period behind the present. It moves in steps, each time FalkorDB rewrites its AOF and an older part of the archive expires.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Latest`}),_jsx(_components.td,{children:`How far the archive has caught up. The archive is shipped every few seconds, and the latest time keeps moving forward even while nothing is written. It trails the present by several seconds, since the addon only claims a second once its writes are certain to be in the uploaded archive. Writes made after it aren’t in a restore, so stop writes and wait for the latest time to pass them when you need everything.`})]})]})]}),`\n`,_jsx(_components.p,{children:`The archive starts from the snapshot FalkorDB took at its last AOF rewrite before the schedule was enabled, so the window can begin somewhat before you enabled the schedule. Go by the window the Admin Server reports, not by when you enabled it. Disabling the schedule stops the archive, and the window then ends at that point. If enabling it again starts a new continuous backup, that backup has a window of its own, so a deployment can have several windows with a gap between them. A continuous backup that fails keeps the window it archived before failing.`}),`\n`,_jsx(_components.p,{children:`The window doesn’t depend on full backups. The continuous backup archives its own copies of the data the AOF builds on, so it restores without a separate full backup.`}),`\n`,_jsx(_components.p,{children:`To see the window:`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`API`,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`GET /api/clusters/\u003cdeployment>/restores/window?namespace=\u003cnamespace>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(CodeBlock,{filename:`CLI`,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`falkordb-admin`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backups`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` restore-window`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`deploymen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timeZone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"UTC\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ranges\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"backupName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003ccontinuous-backup>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"backupNamespace\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cnamespace>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"earliest\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-26T03:00:12Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"latest\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-02T09:30:15Z\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ranges`}),` lists each window, latest first. Times are UTC. When `,_jsx(_components.code,{children:`ranges`}),` is empty, `,_jsx(_components.code,{children:`reason`}),` says why: there is no continuous backup yet, or, on a sharded deployment, the shards don’t share a time yet or the shard count has changed since the backup started (see `,_jsx(_components.a,{href:`#sharded-deployments`,children:`Sharded deployments`}),`).`]}),`\n`,_jsx(Heading,{level:`2`,id:`restore`,children:`Restore`}),`\n`,_jsx(_components.p,{children:`The restore time must be inside a window. A restore aimed outside the window is rejected with the window in the error message.`}),`\n`,_jsx(Heading,{level:`3`,id:`admin-ui`,children:`Admin UI`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the deployment, then go to `,_jsx(_components.strong,{children:`Backups`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Restore`}),` at the top of the page, or `,_jsx(_components.strong,{children:`Restore to a point in time`}),` on the continuous backup.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Restore from`}),`, choose `,_jsx(_components.strong,{children:`Point in time`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Choose a date and time. The picker starts at the latest restorable time, in your browser’s time zone, which is shown under it. Select `,_jsx(_components.strong,{children:`Use UTC`}),` to choose the time in UTC instead. The restorable window is listed in both your time zone and UTC.`]}),`\n`,_jsx(_components.li,{children:`Enter a name for the new deployment.`}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Restore Now`}),`.`]}),`\n`]}),`\n`,_jsx(Frame,{caption:`Restoring falkordb-prod as it was at 10:00 Berlin time, 09:00 UTC.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=b2ffc8497cb8ed09fde244d4d9023e8f`,alt:`The Restore to a New Deployment dialog with Point in time selected, the picker set to 02/11/2026 10:00:00, the Europe/Berlin time zone and a Use UTC link shown under it, the restorable window listed in local time and UTC, and the new deployment name falkordb-prod-1000`,\"data-og-width\":`1024`,width:`1024`,\"data-og-height\":`1280`,height:`1280`,\"data-path\":`enterprise/images/point-in-time-restore/restore-point-in-time.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?w=280\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=083b89dd20c5786aac5adb2d021f4a24 280w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?w=560\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=413b466cfce9afcdb35ce654dc6b8dbf 560w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?w=840\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=933c12dd1612da5a2d61962fa260bff3 840w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?w=1100\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=4cb2e662ba1f0afb47830e67e22ae75c 1100w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?w=1650\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=2a8212a43606236fe9671fa30d61108e 1650w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-point-in-time.png?w=2500\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=bab7f408584e45cc40b69ef4e89a0c06 2500w`})}),`\n`,_jsxs(_components.p,{children:[`A time outside the window keeps `,_jsx(_components.strong,{children:`Restore Now`}),` disabled:`]}),`\n`,_jsx(Frame,{caption:`11:00 Berlin time is after the latest restorable time.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=5ac5c0e33597d870c8c707cff1b7b132`,alt:`The same dialog with the picker set to 02/11/2026 11:00:00, the message Choose a time inside the restorable window, and Restore Now disabled`,\"data-og-width\":`1024`,width:`1024`,\"data-og-height\":`1328`,height:`1328`,\"data-path\":`enterprise/images/point-in-time-restore/restore-outside-window.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?w=280\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=a4a80d78e65d3568b721a19dcef6e95f 280w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?w=560\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=f416b03cf333a230f79f8e10e8e87303 560w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?w=840\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=912ad6b47f753932e78e4974aabc3788 840w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?w=1100\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=b183e57f086cc01efb251c8c66a249f6 1100w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?w=1650\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=cfba635b2ee42078863c7949c704642d 1650w, https://mintcdn.com/falkordb-core/A42o0rReOMd_d4Vm/enterprise/images/point-in-time-restore/restore-outside-window.png?w=2500\u0026fit=max\u0026auto=format\u0026n=A42o0rReOMd_d4Vm\u0026q=85\u0026s=1e0f870374c95e8e80fc8a989e0c9488 2500w`})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`On the day the clocks go back, an hour of local times happens twice, and the picker refuses a time in that hour: switch it to UTC to say which one you mean. A local time skipped when the clocks go forward is refused too. When the latest restorable time falls in a repeated hour, the picker starts in UTC.`})}),`\n`,_jsx(Heading,{level:`3`,id:`api`,children:`API`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`POST /api/clusters/\u003cdeployment>/restores/clone?namespace=\u003cnamespace>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"newClusterName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cnew-deployment>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"restoreTime\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-02T08:00:00Z\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`restoreTime`}),` is UTC, to the second. `,_jsx(_components.code,{children:`backupName`}),` can be left out: the Admin Server uses the continuous backup whose window holds the time. If you give `,_jsx(_components.code,{children:`backupName`}),`, it must name that continuous backup.`]}),`\n`,_jsxs(_components.p,{children:[`A point-in-time restore uses only the deployment’s own continuous backups, in its own namespace. Leave out `,_jsx(_components.code,{children:`backupNamespace`}),`, or set it to the deployment’s namespace.`]}),`\n`,_jsxs(_components.p,{children:[`The request is rejected with `,_jsx(_components.code,{children:`400`}),` when the time is outside every window, when `,_jsx(_components.code,{children:`backupNamespace`}),` names another namespace, when `,_jsx(_components.code,{children:`backupName`}),` names a backup that isn’t a continuous one, or when the backup is a sharded deployment’s and its shard count has changed since the backup started.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cli`,children:`CLI`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`falkordb-admin`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backups`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`deploymen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --newClusterName`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`new-deploymen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --restore-time`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 2026-11-02T10:00:00+02:00`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--restore-time`}),` takes any ISO 8601 time with a zone, and the CLI sends it to the API in UTC. A time without a zone is refused, so that a restore never lands at the wrong hour.`]}),`\n`,_jsx(Heading,{level:`2`,id:`check-the-restored-data`,children:`Check the restored data`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` get`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clusters.apps.kubeblocks.io`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`new-deploymen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`t`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` get`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` restores.dataprotection.kubeblocks.io`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` custom-columns=NAME:.metadata.name,PHASE:.status.phase`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` grep`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '^\u003cnew-deployment>-'`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Running`}),` alone doesn’t mean the data is in. A sharded deployment reports `,_jsx(_components.code,{children:`Running`}),` once its shards form, and only then imports each shard’s data, which can take a while longer. Wait until every restore whose name starts with the new deployment’s name shows `,_jsx(_components.code,{children:`Completed`}),`. A sharded deployment has two per shard, one that prepares the shard’s data and one that imports it. If one shows `,_jsx(_components.code,{children:`Failed`}),`, the new deployment is incomplete: delete it and restore again.`]}),`\n`,_jsxs(_components.p,{children:[`The new deployment’s `,_jsx(_components.code,{children:`kubeblocks.io/restore-from-backup`}),` annotation names the continuous backup and the `,_jsx(_components.code,{children:`restoreTime`}),`. Check the data itself before you move applications to it: look for a write you know happened just before the restore time, and confirm that one made just after it is missing.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sharded-deployments`,children:`Sharded deployments`}),`\n`,_jsx(_components.p,{children:`Each shard archives its own AOF, from one of its replicas, or from its primary when it has none. The window the Admin Server reports for a sharded deployment is the time every shard covers: from the latest of the shards’ earliest times to the earliest of their latest times. While any shard has archived nothing yet, or has stopped archiving, there is no window.`}),`\n`,_jsx(_components.p,{children:`A restore replays every shard’s archive up to the same restore time and writes the result into the new deployment, so each key lands on the shard that owns its slot there. The new deployment has as many shards as the source, but its own slot layout.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Writes across shards.`}),` The shards agree on the restore time to the second, and to how closely the clocks of their nodes agree. A write that touched several shards, such as a client writing keys of different slots one after another, can come back on one shard and not another when it spans the restore time.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`After a change in shard count.`}),` KubeBlocks fixes a continuous backup’s shards when it starts, so after a scale-out the new shard is never archived, and a restore to a time before a scale-in would need the old shard count, which nothing records. Once a sharded deployment has a different number of shards than its continuous backup archives, the Admin Server leaves that backup out of the window, refuses to restore from it, and replaces it, whether the deployment was scaled in the Admin UI or not. Within a minute of the scale, it:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`disables the `,_jsx(_components.code,{children:`aof`}),` schedule. A scale-in waits for this: the continuous backup reads a removed shard’s volume, which KubeBlocks can’t delete while it’s in use;`]}),`\n`,_jsx(_components.li,{children:`waits for the old continuous backup to stop running, and for any new deployment still being restored from it, then deletes it. A restore from it that failed holds this step until you delete the deployment it was creating;`}),`\n`,_jsxs(_components.li,{children:[`once the deployment is `,_jsx(_components.code,{children:`Running`}),` with its new shards, enables the schedule again, and KubeBlocks starts a new continuous backup.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The new window begins when the new backup has archived every shard, a few minutes after the scale. Times before that can only be restored from a full backup, and a full backup taken before the scale restores to as many shards as it holds. Each step appears in the audit log, as `,_jsx(_components.code,{children:`system:continuous-backups`}),`.`]}),`\n`,_jsx(_components.p,{children:`The Admin Server checks the shard count every minute. If a deployment is scaled and scaled back to its old shard count within that time, the continuous backup isn’t replaced, and a shard that existed only in between was never archived: a restore to a time while it held slots can miss the writes to them. Scale one step at a time, or check the restored data for that period.`}),`\n`,_jsxs(_components.p,{children:[`The Admin Server does this for an `,_jsx(_components.code,{children:`aof`}),` schedule created on the `,_jsx(_components.strong,{children:`Schedules`}),` tab or with the API. For an `,_jsx(_components.code,{children:`aof`}),` entry enabled in a schedule KubeBlocks generated, take the same steps by hand: a running backup can’t be deleted, and enabling the schedule again without deleting the backup resumes the old one.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`limitations`,children:`Limitations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Replication lag.`}),` A continuous backup archives a replica when the deployment has one. A replica stamps a write with the time it applies it, not the time the primary committed it, so a write committed within the replication lag before the restore time (usually milliseconds) can be left out.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Offloaded graphs.`}),` A continuous backup doesn’t package the dump files of `,_jsx(_components.a,{href:`/enterprise/operations/graph-offloading`,children:`offloaded graphs`}),`, so it can’t be relied on to bring them back. Restore a `,_jsx(_components.code,{children:`datafile`}),` or `,_jsx(_components.code,{children:`volume-snapshot`}),` backup, which the restore flow treats as full backups, when you need offloaded graphs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Restore in place.`}),` Like every restore, a point-in-time restore creates a new deployment. See `,_jsx(_components.a,{href:`/enterprise/operations/restore-same-database`,children:`Restore in place`}),` for how to replace a deployment’s data.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`One-second precision.`}),` The restore keeps every write stamped at or before the chosen second and drops the rest.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Restore a FalkorDB deployment to a point in time","sidebarTitle":"Point-in-time restore","description":"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.","icon":"clock-rotate-left","href":"/enterprise/operations/restore-point-in-time"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Turn on continuous backups","slug":"turn-on-continuous-backups","depth":2,"children":[]},{"title":"What decides the restorable window","slug":"what-decides-the-restorable-window","depth":2,"children":[]},{"title":"Restore","slug":"restore","depth":2,"children":[{"title":"Admin UI","slug":"admin-ui","depth":3,"children":[]},{"title":"API","slug":"api","depth":3,"children":[]},{"title":"CLI","slug":"cli","depth":3,"children":[]}]},{"title":"Check the restored data","slug":"check-the-restored-data","depth":2,"children":[]},{"title":"Sharded deployments","slug":"sharded-deployments","depth":2,"children":[]},{"title":"Limitations","slug":"limitations","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"falkordb-core","siteName":"FalkorDB Docs","title":"Restore a FalkorDB deployment to a point in time - FalkorDB Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T19:02:55.442Z","originalFileLocation":"enterprise/operations/restore-point-in-time.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.\">\u003cmeta data-mint-head name=\"keywords\" content=\"FalkorDB, graph database, GraphRAG, knowledge graph, Cypher, OpenCypher, vector search, GenAI, RAG, RedisGraph, RedisGraph alternative, RedisGraph successor, RedisGraph migration, RedisGraph end of life, sparse matrix, linear algebra\">\u003cmeta data-mint-head name=\"application-name\" content=\"FalkorDB Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Restore a FalkorDB deployment to a point in time - FalkorDB Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FalkorDB Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.falkordb.com/images/falkor-logo.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Restore a FalkorDB deployment to a point in time - FalkorDB Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.falkordb.com/images/falkor-logo.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/falkordb-core/mDs9ei6IUGTBvS7e/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FalkorDB Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF8101\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"FalkorDB — the high-performance graph database for GraphRAG and GenAI\">\u003cmeta data-mint-head name=\"twitter:image:alt\" content=\"FalkorDB — the high-performance graph database for GraphRAG and GenAI\">\u003cmeta data-mint-head name=\"twitter:creator\" content=\"@FalkorDB\">\u003cmeta data-mint-head name=\"author\" content=\"FalkorDB\">\u003cmeta data-mint-head name=\"publisher\" content=\"FalkorDB\">\u003cmeta data-mint-head name=\"application-name\" content=\"FalkorDB Docs\">\u003cmeta data-mint-head name=\"googlebot\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/enterprise/operations/restore-point-in-time.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.falkordb.com/#organization\",\"name\":\"FalkorDB\",\"legalName\":\"FalkorDB Inc.\",\"url\":\"https://www.falkordb.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://docs.falkordb.com/images/falkor-logo.png\"},\"sameAs\":[\"https://github.com/FalkorDB/FalkorDB\",\"https://x.com/FalkorDB\",\"https://www.linkedin.com/company/falkordb\",\"https://discord.com/invite/6M4QwDXn2w\",\"https://www.youtube.com/@falkordb\",\"https://www.reddit.com/r/falkordb/\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.falkordb.com#website\",\"name\":\"FalkorDB Docs\",\"url\":\"https://docs.falkordb.com\",\"publisher\":{\"@id\":\"https://www.falkordb.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time#webpage\",\"url\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time\",\"name\":\"Restore a FalkorDB deployment to a point in time\",\"description\":\"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.\",\"dateModified\":\"2026-11-04T19:02:55.442Z\",\"isPartOf\":{\"@id\":\"https://docs.falkordb.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Operations\",\"item\":\"https://docs.falkordb.com/enterprise/operations/scaling\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Restore a FalkorDB deployment to a point in time\",\"item\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time#article\",\"headline\":\"Restore a FalkorDB deployment to a point in time\",\"name\":\"Restore a FalkorDB deployment to a point in time\",\"description\":\"Turn on continuous AOF backups, see the window you can restore to, and restore a deployment as it was at a chosen second.\",\"url\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time\",\"mainEntityOfPage\":{\"@id\":\"https://docs.falkordb.com/enterprise/operations/restore-point-in-time#webpage\"},\"image\":\"https://docs.falkordb.com/images/falkor-logo.png\",\"dateModified\":\"2026-11-04T19:02:55.442Z\",\"publisher\":{\"@id\":\"https://www.falkordb.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.falkordb.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FalkorDB Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"FalkorDB Docs","nav":{"global":null,"products":[{"product":"FalkorDB","icon":"database","description":"The open source graph database, Cypher language, and tooling.","pages":[{"title":"FalkorDB","href":""}]},{"product":"FalkorDB Cloud","icon":"cloud","description":"The managed FalkorDB service and its provisioning API.","pages":[{"title":"FalkorDB Cloud","href":"/cloud"}]},{"product":"FalkorDB Enterprise","icon":"building","description":"Self-managed FalkorDB on your own Kubernetes clusters.","tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"FalkorDB Enterprise documentation: self-managed graph database on Kubernetes","sidebarTitle":"Home","mode":"wide","icon":"house","href":"/enterprise"},{"title":"FalkorDB Enterprise platform overview and architecture","sidebarTitle":"Overview","icon":"layer-group","href":"/enterprise/get-started/overview"},{"title":"Prerequisites and system requirements for FalkorDB Enterprise","sidebarTitle":"Requirements","icon":"list-check","href":"/enterprise/get-started/requirements"},{"title":"Use the FalkorDB Enterprise Portal","sidebarTitle":"Enterprise Portal","icon":"id-card","href":"/enterprise/get-started/enterprise-portal"},{"title":"Quickstart: install FalkorDB Enterprise on Kubernetes","sidebarTitle":"Quickstart","icon":"rocket","href":"/enterprise/get-started/quickstart"}]},{"group":"Install","pages":[{"title":"Production installation guide for FalkorDB Enterprise","sidebarTitle":"Production install","icon":"shield-check","href":"/enterprise/deployment/production"},{"title":"Deploy FalkorDB Enterprise with private registries and air-gapped mirrors","sidebarTitle":"Private registries","icon":"box","href":"/enterprise/deployment/private-images"},{"title":"Configure external DNS access for FalkorDB deployments","sidebarTitle":"External DNS access","icon":"globe","href":"/enterprise/deployment/external-dns"},{"title":"Set up network infrastructure for FalkorDB access from your VPC","sidebarTitle":"VPC access","icon":"route","href":"/enterprise/deployment/vpc-access"},{"group":"Platform guides","icon":"server","pages":[{"title":"Deploy FalkorDB Enterprise on Azure Kubernetes Service (AKS)","sidebarTitle":"Azure (AKS)","icon":"microsoft","href":"/enterprise/deployment/aks"},{"title":"Private AKS deployment with internal load balancers and TLS","sidebarTitle":"Private AKS","icon":"lock","href":"/enterprise/deployment/aks-internal"},{"title":"Deploy FalkorDB Enterprise on Amazon Elastic Kubernetes Service (EKS)","sidebarTitle":"AWS (EKS)","icon":"aws","href":"/enterprise/deployment/eks"},{"title":"Deploy FalkorDB Enterprise on Google Kubernetes Engine (GKE)","sidebarTitle":"Google (GKE)","icon":"google","href":"/enterprise/deployment/gke"},{"title":"Deploy FalkorDB Enterprise on K3s","sidebarTitle":"K3s","icon":"cube","href":"/enterprise/deployment/k3s"},{"title":"Deploy FalkorDB Enterprise on Red Hat OpenShift with SCC and ODF","sidebarTitle":"OpenShift","icon":"red-hat","href":"/enterprise/deployment/openshift"},{"title":"Deploy FalkorDB Enterprise on Rancher (RKE2 and K3s)","sidebarTitle":"Rancher","icon":"cow","href":"/enterprise/deployment/rancher"}]}]},{"group":"Authentication","pages":[{"title":"Configure Google OAuth and Google Workspace group mapping in FalkorDB Enterprise","sidebarTitle":"Google OAuth","icon":"google","href":"/enterprise/authentication/google-oauth"},{"title":"Configure Microsoft Entra ID (Azure AD) OAuth and role mapping","sidebarTitle":"Microsoft Entra ID","icon":"microsoft","href":"/enterprise/authentication/azure-ad-oauth"}]},{"group":"Deploy databases","pages":[{"title":"Kubernetes networking and service connectivity for FalkorDB deployments","sidebarTitle":"Networking","icon":"network-wired","href":"/enterprise/databases/networking"},{"title":"TLS encryption for FalkorDB deployments","sidebarTitle":"TLS","icon":"lock","href":"/enterprise/databases/tls"},{"title":"Deploy a standalone FalkorDB instance on Kubernetes","sidebarTitle":"Standalone","icon":"database","href":"/enterprise/databases/standalone"},{"title":"Deploy a replicated multi-node FalkorDB instance on Kubernetes","sidebarTitle":"Replicated","icon":"copy","href":"/enterprise/databases/replicated"},{"title":"Deploy high-availability FalkorDB with Redis Sentinel on Kubernetes","sidebarTitle":"Sentinel","icon":"shield","href":"/enterprise/databases/sentinel"},{"title":"Deploy a sharded distributed FalkorDB deployment on Kubernetes","sidebarTitle":"Sharded","icon":"grid-2","href":"/enterprise/databases/sharded"},{"title":"Deploy FalkorDB from raw KubeBlocks YAML manifests","sidebarTitle":"Deploy from YAML","icon":"file-code","href":"/enterprise/databases/yaml"}]},{"group":"Operations","pages":[{"title":"Scale FalkorDB deployments horizontally and vertically on Kubernetes","sidebarTitle":"Scaling","icon":"arrow-up-right-dots","href":"/enterprise/operations/scaling"},{"title":"Reduce FalkorDB memory by offloading idle graphs to disk","sidebarTitle":"Graph offloading","icon":"box-archive","href":"/enterprise/operations/graph-offloading"},{"title":"Configure FalkorDB engine parameters and Kubernetes pod resources","sidebarTitle":"Parameters \u0026 resources","icon":"gear","href":"/enterprise/operations/parameters"},{"title":"Configure automated backups and schedules in FalkorDB Enterprise","sidebarTitle":"Backups \u0026 schedules","icon":"floppy-disk","href":"/enterprise/operations/backups"},{"title":"Restoring a FalkorDB backup over an existing deployment","sidebarTitle":"Restore in place","icon":"clock-rotate-left","href":"/enterprise/operations/restore-same-database"},{"title":"Restore a FalkorDB backup to a new Kubernetes deployment","sidebarTitle":"Restore to new","description":"Create a new deployment from an existing backup.","icon":"clone","href":"/enterprise/operations/restore-new-database"},{"title":"Restore a FalkorDB deployment to a point in time","sidebarTitle":"Point-in-time restore","icon":"clock-rotate-left","href":"/enterprise/operations/restore-point-in-time"},{"title":"Export and import RDB files","sidebarTitle":"RDB export and import","description":"Export a deployment to portable RDB files, and import RDB data into an existing deployment from an export, another deployment, or any Redis-protocol server.","icon":"right-left","href":"/enterprise/operations/rdb-export-import"},{"title":"Run Cypher queries from the Admin UI","sidebarTitle":"Query console","icon":"terminal","href":"/enterprise/operations/query-console"},{"title":"Recover FalkorDB deployments in another region","sidebarTitle":"Disaster recovery","icon":"life-ring","href":"/enterprise/operations/disaster-recovery"},{"title":"Monitor FalkorDB with Prometheus, Grafana, and Admin UI metrics","sidebarTitle":"Monitoring \u0026 Grafana","icon":"chart-line","href":"/enterprise/operations/monitoring"},{"title":"Track Kubernetes infrastructure spend with Cost Showback","sidebarTitle":"Cost Showback","icon":"dollar-sign","href":"/enterprise/operations/cost-showback"},{"title":"Reset FalkorDB Enterprise admin password via Kubernetes secrets","sidebarTitle":"Reset admin password","icon":"key","href":"/enterprise/operations/reset-admin-password"}]},{"group":"Licensing","pages":[{"title":"FalkorDB Enterprise licensing, quotas, and cluster activation","sidebarTitle":"Licensing","icon":"key","href":"/enterprise/licensing"}]},{"group":"Security","pages":[{"title":"FalkorDB Enterprise security architecture, hardening, and RBAC","sidebarTitle":"Security","icon":"shield","href":"/enterprise/security"}]},{"group":"Releases","pages":[{"title":"What's new in FalkorDB Enterprise 1.0: security, hardening, and verification","sidebarTitle":"1.0","icon":"sparkles","href":"/enterprise/releases/1-0"}]},{"group":"Upgrade and uninstall","pages":[{"title":"Upgrade FalkorDB Enterprise control plane and Helm release","sidebarTitle":"Upgrade Enterprise","icon":"arrow-up","href":"/enterprise/upgrades/enterprise"},{"title":"FalkorDB Enterprise release notes and changelog","sidebarTitle":"Changelog","icon":"list","href":"/enterprise/upgrades/changelog"},{"group":"Migration guides","pages":[{"title":"Migration guide: upgrade FalkorDB Enterprise 0.3 to 0.4","sidebarTitle":"0.3 to 0.4","icon":"right-left","href":"/enterprise/upgrades/migrations/0.3-to-0.4"},{"title":"Migration guide: upgrade FalkorDB Enterprise 0.3 directly to 1.0","sidebarTitle":"0.3 to 1.0","icon":"right-left","href":"/enterprise/upgrades/migrations/0.3-to-1.0"}]},{"title":"Move FalkorDB deployments to a newer addon release","sidebarTitle":"Upgrade the addon","icon":"puzzle-piece","href":"/enterprise/upgrades/addon"},{"title":"Upgrade KubeBlocks operator for FalkorDB Enterprise","sidebarTitle":"Upgrade KubeBlocks","icon":"cubes","href":"/enterprise/upgrades/kubeblocks"},{"title":"Upgrade database engine version for FalkorDB deployments","sidebarTitle":"Upgrade FalkorDB version","icon":"code-branch","href":"/enterprise/upgrades/falkordb-version"},{"title":"Uninstall FalkorDB Enterprise and clean up Kubernetes resources","sidebarTitle":"Uninstall","icon":"trash","href":"/enterprise/upgrades/uninstall"}]},{"group":"Troubleshooting","pages":[{"title":"Troubleshoot FalkorDB deployments, pods, and KubeBlocks","sidebarTitle":"Troubleshoot deployments","icon":"stethoscope","href":"/enterprise/troubleshooting/deployments"},{"title":"Collect FalkorDB diagnostics and support packages","sidebarTitle":"Support packages","icon":"life-ring","href":"/enterprise/troubleshooting/support-package"}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/enterprise/reference/helm-values"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/enterprise/api-reference/introduction"}]}]},{"product":"GraphRAG SDK","icon":"share-nodes","description":"Build knowledge graphs from documents and query them with natural language.","pages":[{"title":"GraphRAG SDK","href":"/graphrag"}]}]},"basePath":"","title":"Restore a FalkorDB deployment to a point in time - FalkorDB Docs","buildId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","deploymentId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-Du0ep7S2.js","DynamicMarkdown-Jk8YAWGN.js","zoom-image-lightbox-DR0NJNUZ.js","lightbox-handle-r17bVUz3.js"]}