This guide introduces how to back up meta service data and restore from a backup.
A meta snapshot is a backup of meta service’s data at a specific point in time. Meta snapshots are persisted in object storage. RisingWave supports multiple object storage backends including S3, MinIO, Google Cloud Storage (GCS), Alibaba Cloud OSS, Huawei Cloud OBS, Azure Blob Storage, HDFS, WebHDFS, and local filesystem.
Before you can create a meta snapshot, you need to set the backup_storage_url and backup_storage_directory system parameters prior to the first backup attempt.
Be careful not to set the backup_storage_url and backup_storage_directory when there are snapshots. However, it’s not strictly forbidden. If you insist on doing so, please note the snapshots taken before the setting will all be invalidated and cannot be used in restoration anymore.
If these parameters are not explicitly set, RisingWave will automatically initialize them from your state store configuration: backup_storage_url will default to your state_store URL (or “memory” if using in-memory state store), and backup_storage_directory will default to {data_directory}/backup.To learn about how to configure system parameters, see How to configure system parameters.
Meta snapshot is created by meta service whenever requested by users. There is no automatic process in the RisingWave kernel that creates meta snapshot regularly. However, external tools like RisingWave Console can provide automated backup scheduling and management.Using RisingWave ConsoleYou can create and manage metadata snapshots through the RisingWave Console, which provides a web-based interface for snapshot operations including manual snapshot creation and automated backup configuration.Using Command LineHere’s an example of how to create a new meta snapshot with risectl:
risectl meta backup-meta
risectl is included in the pre-built RisingWave binary. Use the following command instead:
If the cluster has been using a SQL database as meta store backend, follow these steps to restore from a meta snapshot.
Shut down RisingWave nodes, including meta, compute, compactor and frontend.
This step is especially important because the meta backup and recovery process does not replicate SST files. It is not permitted for multiple clusters to run with the same SSTs set at any time, as this can corrupt the SST files.
If the Elastic Disk Cache feature is enabled, clear the disk cache on every node where disk cache is enabled before starting the restored cluster. Specifically, delete the contents of the directories configured by storage.meta_file_cache.dir and storage.data_file_cache.dir, or delete and then recreate those directories with the correct permissions before starting the restored cluster.
Create a new meta store, i.e., a new SQL database. This database must have the same table structure as the original, but all tables must be empty. Use one of the following methods to achieve this:
(Preferred) Create the meta store schema using risectl meta create-meta-store-schema.
For RisingWave v3.0.2 and above, use the RisingWave image where the embedded risectl supports create-meta-store-schema. Ensure the RisingWave image version matches your meta snapshot.
For RisingWave prior to v3.0.2, use the dedicated risectl image that supports create-meta-store-schema. Ensure the risectl image version matches your meta snapshot. For example, for a RisingWave v2.8.3 meta snapshot, use risectl v2.8.
After running the command, truncate tables populated during create-meta-store-schema, such as seaql_migrations.
Use database-specific tools (e.g., pgdump for Postgres) to duplicate table schemas.
Use the schema migration tool to create tables, then truncate those non-empty tables populated by the tool. The version of the migration tool must match the version of the meta snapshot. For example, if the meta snapshot was created with RisingWave v2.4.3, the migration tool should also be from RisingWave v2.4.3.
Restore the meta snapshot to the new meta store.
risectl \meta \restore-meta \--meta-store-type sql \--meta-snapshot-id [snapshot_id] \--sql-endpoint [sql_endpoint] \--backup-storage-url [backup_storage_url, e.g. s3://bucket_read_from] \--backup-storage-directory [backup_storage_directory, e.g. dir_read_from] \--hummock-storage-url [hummock_storage_url, e.g. s3://bucket_write_to] \--hummock-storage-directory [hummock_storage_directory, e.g. dir_write_to]
restore-meta reads snapshot data from backup storage and writes them to meta store and hummock storage.
For example, given the cluster settings below:
psql=> show parameters; Name | Value | Mutable---------------------------------------+--------------------------------------+---------state_store | hummock+s3://state_bucket | fdata_directory | state_data | fbackup_storage_url | s3://backup_bucket | tbackup_storage_directory | backup_data | t
Parameters to risectl meta restore-meta should be:
--backup-storage-url s3://backup_bucket.
--backup-storage-directory backup_data.
--hummock-storage-url s3://state_bucket. Note that the hummock+ prefix is stripped.
--hummock-storage-directory state_data.
Additional optional parameters:
--dry-run: Print the target snapshot without restoring (default: false)
--read-attempt-timeout-ms: Read timeout for object store operations (default: 600000)
--read-retry-attempts: Maximum retry attempts for object store reads (default: 3)
--validate-integrity: Verify all referenced objects exist in object store (default: false)
--overwrite-hummock-storage-endpoint: Overwrite storage endpoint system parameters (default: false)
--overwrite-backup-storage-url: Override backup storage URL in restored meta store
--overwrite-backup-storage-directory: Override backup storage directory in restored meta store
If the cluster has been using etcd as meta store backend, follow these steps to restore from a meta snapshot.
Shut down RisingWave nodes, including meta, compute, compactor and frontend.
This step is especially important because the meta backup and recovery process does not replicate SST files. It is not permitted for multiple clusters to run with the same SSTs set at any time, as this can corrupt the SST files.
Create a new meta store, i.e. a new and empty etcd instance.
Restore the meta snapshot to the new meta store.
risectl \meta \restore-meta \--meta-store-type etcd \--meta-snapshot-id [snapshot_id] \--etcd-endpoints [etcd_endpoints, e.g. 127.0.0.1:2388] \--backup-storage-url [backup_storage_url, e.g. s3://bucket_read_from] \--backup-storage-directory [backup_storage_directory, e.g. dir_read_from] \--hummock-storage-url [hummock_storage_url, e.g. s3://bucket_write_to] \--hummock-storage-directory [hummock_storage_directory, e.g. dir_write_to]
If etcd enables authentication, also specify the following:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"RisingWave","colors":{"primary":"#005eec","light":"#005eec","dark":"#005eec"},"logo":{"light":"https://mintcdn.com/risingwavelabs/MBiw07hESa08PLsp/logo/light.svg?fit=max\u0026auto=format\u0026n=MBiw07hESa08PLsp\u0026q=85\u0026s=ec9c31744f8c3ddaa5c37f6f7fd0385b","dark":"https://mintcdn.com/risingwavelabs/MBiw07hESa08PLsp/logo/dark.svg?fit=max\u0026auto=format\u0026n=MBiw07hESa08PLsp\u0026q=85\u0026s=5faa0cc3c55a9407df9bb353ee579e89","href":"https://risingwave.com/"},"favicon":"https://mintcdn.com/risingwavelabs/eqqtg34aUutkXCuz/favicon.png?fit=max\u0026auto=format\u0026n=eqqtg34aUutkXCuz\u0026q=85\u0026s=32d724d78a6ff3342f31bed536427c8f","background":{"decoration":"gradient"},"navbar":{"links":[{"href":"https://risingwave.com/resources/?filter=blogs","label":"Blog"}],"primary":{"type":"button","label":"Sign up free","href":"https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/redirect?encryptedPayload=AVxigLIVNzabNcOPWI6bnbgE5v5wBhWy6pk6dNZ0jpoHYTJVXYdKJ2sN2%2Bz81tvbqU9obUFnA6qJBV3VfxEI3LOXQz%2FR1xANlR5nhw9CzFWt250u2%2B%2FfsHip8lVRCRiV%2FX0l10HpM%2BZWdr%2FmPAe%2BTHYRotiKZ1nJ494JNXcirwOZXbhlh5RTBgXXdxwxHyst\u0026webInteractiveContentId=183953770777\u0026portalId=24308934"}},"footer":{"socials":{"github":"https://github.com/risingwavelabs/risingwave","x":"https://go.risingwave.com/twitter","linkedin":"https://go.risingwave.com/linkedin","slack":"https://go.risingwave.com/slack","youtube":"https://go.risingwave.com/youtube"}},"fonts":{"heading":{"family":"Inter","format":"woff2"},"body":{"family":"Inter","format":"woff2"}},"integrations":{"ga4":{"measurementId":"G-VG98SVDEYE"},"gtm":{"tagId":"GTM-WT9WLCBX"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Join Slack community","icon":"slack","href":"https://go.risingwave.com/slack"},{"anchor":"GitHub","icon":"github","href":"https://github.com/risingwavelabs/risingwave"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"risingwavelabs","hasAudioNarration":false,"actualSubdomain":"risingwavelabs","customDomains":["docs.risingwave.com"],"gitSource":{"type":"github","owner":"risingwavelabs","repo":"risingwave-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aed242fed8341fabea21e61","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Guides","count":279},{"language":"default","tag":"SQL/Python/UDFs","count":156},{"language":"default","tag":"SQL reference","count":148},{"language":"default","tag":"Work with data","count":117},{"language":"default","tag":"Commands","count":99},{"language":"default","tag":"Cloud","count":67},{"language":"default","tag":"Ingest data","count":52},{"language":"default","tag":"Apache Iceberg™","count":37},{"language":"default","tag":"Deliver data","count":35},{"language":"default","tag":"Install \u0026 Operate","count":32}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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":"editor-metadata","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},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"@font-face{font-family:'Monument Grotesk';src:url('https://fonts.gstatic.com/s/inter/v18/UcCo3FwrK3iLTcviYwYZ8UA3.woff2');font-weight:normal;font-style:normal;font-display:swap}h1,h2,h3{font-family:'monument grotesk';letter-spacing:normal!important}"}],"page":{"pagePath":"operate/meta-backup","slug":"/operate/meta-backup","pageMetadata":{"title":"Back up and restore meta service","description":"This guide introduces how to back up meta service data and restore from a backup.","href":"/operate/meta-backup"},"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: \"This guide introduces how to back up meta service data and restore from a backup.\"\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`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A meta snapshot is a backup of meta service’s data at a specific point in time. Meta snapshots are persisted in object storage. RisingWave supports multiple object storage backends including S3, MinIO, Google Cloud Storage (GCS), Alibaba Cloud OSS, Huawei Cloud OBS, Azure Blob Storage, HDFS, WebHDFS, and local filesystem.`}),`\n`,_jsx(Heading,{level:`2`,id:`set-backup-parameters`,children:`Set backup parameters`}),`\n`,_jsxs(_components.p,{children:[`Before you can create a meta snapshot, you need to set the `,_jsx(_components.code,{children:`backup_storage_url`}),` and `,_jsx(_components.code,{children:`backup_storage_directory`}),` system parameters prior to the first backup attempt.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Be careful not to set the `,_jsx(_components.code,{children:`backup_storage_url`}),` and `,_jsx(_components.code,{children:`backup_storage_directory`}),` when there are snapshots. However, it’s not strictly forbidden. If you insist on doing so, please note the snapshots taken before the setting will all be invalidated and cannot be used in restoration anymore.`]})}),`\n`,_jsxs(_components.p,{children:[`If these parameters are not explicitly set, RisingWave will automatically initialize them from your state store configuration: `,_jsx(_components.code,{children:`backup_storage_url`}),` will default to your `,_jsx(_components.code,{children:`state_store`}),` URL (or “memory” if using in-memory state store), and `,_jsx(_components.code,{children:`backup_storage_directory`}),` will default to `,_jsx(_components.code,{children:`{data_directory}/backup`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`To learn about how to configure system parameters, see `,_jsx(_components.a,{href:`/operate/view-configure-system-parameters#how-to-configure-system-parameters`,children:`How to configure system parameters`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-meta-snapshot`,children:`Create a meta snapshot`}),`\n`,_jsx(_components.p,{children:`Meta snapshot is created by meta service whenever requested by users. There is no automatic process in the RisingWave kernel that creates meta snapshot regularly. However, external tools like RisingWave Console can provide automated backup scheduling and management.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Using RisingWave Console`})}),`\n`,_jsxs(_components.p,{children:[`You can create and manage metadata snapshots through the `,_jsx(_components.a,{href:`/web-ui/risingwave-console/manage-monitor-clusters#managing-metadata-snapshots`,children:`RisingWave Console`}),`, which provides a web-based interface for snapshot operations including manual snapshot creation and automated backup configuration.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Using Command Line`})}),`\n`,_jsxs(_components.p,{children:[`Here’s an example of how to create a new meta snapshot with `,_jsx(_components.code,{children:`risectl`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,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:`risectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` meta`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backup-meta`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`risectl`}),` is included in the pre-built RisingWave binary. Use the following command instead:`]}),`\n`,_jsx(CodeBlock,{filename:``,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:`./risingwave`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ctl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` meta`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backup-meta`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`view-existing-meta-snapshots`,children:`View existing meta snapshots`}),`\n`,_jsx(_components.p,{children:`The following SQL command lists existing meta snapshots:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,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:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`SELECT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` meta_snapshot_id, hummock_version_id, remarks, rw_version `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`FROM`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` rw_catalog`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`rw_meta_snapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Example output:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,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:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` meta_snapshot_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` hummock_version_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` remarks`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` rw_version`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`------------------`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 3`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 123`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` manual`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` v2.0.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 4`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` 456`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` NULL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` v2.0.1`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`rw_catalog.rw_meta_snapshot`}),` catalog also includes a `,_jsx(_components.code,{children:`state_table_info`}),` field containing detailed state table information in JSON format.`]}),`\n`,_jsx(Heading,{level:`2`,id:`delete-a-meta-snapshot`,children:`Delete a meta snapshot`}),`\n`,_jsxs(_components.p,{children:[`Here’s an example of how to delete a meta snapshot with `,_jsx(_components.code,{children:`risectl`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,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:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`risectl meta `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`delete`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`meta`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`snapshots `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`--snapshot-ids \u003csnapshot_id> [--snapshot-ids \u003csnapshot_id>...]`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`restore-from-a-meta-snapshot`,children:`Restore from a meta snapshot`}),`\n`,_jsx(_components.p,{children:`Below are two separate methods to restore from a meta snapshot using SQL database and etcd as the meta store backend.`}),`\n`,_jsx(Heading,{level:`3`,id:`sql-database-as-meta-store-backend`,children:`SQL database as meta store backend`}),`\n`,_jsx(_components.p,{children:`If the cluster has been using a SQL database as meta store backend, follow these steps to restore from a meta snapshot.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Shut down RisingWave nodes, including meta, compute, compactor and frontend.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`This step is especially important because the meta backup and recovery process does not replicate SST files. It is not permitted for multiple clusters to run with the same SSTs set at any time, as this can corrupt the SST files.`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`If the Elastic Disk Cache feature is enabled, clear the disk cache on every node where disk cache is enabled before starting the restored cluster. Specifically, delete the contents of the directories configured by `,_jsx(_components.code,{children:`storage.meta_file_cache.dir`}),` and `,_jsx(_components.code,{children:`storage.data_file_cache.dir`}),`, or delete and then recreate those directories with the correct permissions before starting the restored cluster.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Create a new meta store, i.e., a new SQL database. This database must have the same table structure as the original, but all tables must be empty. Use one of the following methods to achieve this:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`(Preferred) Create the meta store schema using `,_jsx(_components.code,{children:`risectl meta create-meta-store-schema`}),`.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For RisingWave v3.0.2 and above, use the RisingWave image where the embedded `,_jsx(_components.code,{children:`risectl`}),` supports `,_jsx(_components.code,{children:`create-meta-store-schema`}),`. Ensure the RisingWave image version matches your meta snapshot.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`7`,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:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/risingwave/bin/risingwave ctl meta create-meta-store-schema \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --meta-store-type postgres \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --sql-endpoint 127.0.0.1:8432 \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --sql-username placeholder \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --sql-password placeholder \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --sql-database placeholder`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For RisingWave prior to v3.0.2, use the `,_jsx(_components.a,{href:`https://github.com/risingwavelabs/risingwave/pkgs/container/risectl`,children:`dedicated risectl image`}),` that supports create-meta-store-schema. Ensure the risectl image version matches your meta snapshot. For example, for a RisingWave v2.8.3 meta snapshot, use risectl v2.8.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,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:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`/risingwave/bin/risectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` meta`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-meta-store-schema`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--meta-store-type `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`postgres`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--sql-endpoint `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`127.0.0.1:8432`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--sql-username `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`placeholder`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--sql-password `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`placeholder`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--sql-database `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`placeholder`})]}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`After running the command, truncate tables populated during `,_jsx(_components.code,{children:`create-meta-store-schema`}),`, such as `,_jsx(_components.code,{children:`seaql_migrations`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Use database-specific tools (e.g., `,_jsx(_components.code,{children:`pgdump`}),` for Postgres) to duplicate table schemas.`]}),`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.a,{href:`https://github.com/risingwavelabs/risingwave/tree/main/src/meta/model/migration`,children:`schema migration tool`}),` to create tables, then truncate those non-empty tables populated by the tool. The version of the migration tool must match the version of the meta snapshot. For example, if the meta snapshot was created with RisingWave v2.4.3, the migration tool should also be from RisingWave v2.4.3.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Restore the meta snapshot to the new meta store.`}),`\n`,_jsx(CodeBlock,{numberOfLines:`11`,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:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`risectl \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`meta \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`restore-meta \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--meta-store-type sql \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--meta-snapshot-id [snapshot_id] \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--sql-endpoint [sql_endpoint] \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--backup-storage-url [backup_storage_url, e.g. s3://bucket_read_from] \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--backup-storage-directory [backup_storage_directory, e.g. dir_read_from] \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--hummock-storage-url [hummock_storage_url, e.g. s3://bucket_write_to] \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`--hummock-storage-directory [hummock_storage_directory, e.g. dir_write_to]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`restore-meta`}),` reads snapshot data from backup storage and writes them to meta store and hummock storage.\nFor example, given the cluster settings below:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,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:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`psql=> show parameters;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Name | Value | Mutable`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`---------------------------------------+--------------------------------------+---------`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`state_store | hummock+s3://state_bucket | f`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`data_directory | state_data | f`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`backup_storage_url | s3://backup_bucket | t`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`backup_storage_directory | backup_data | t`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Parameters to `,_jsx(_components.code,{children:`risectl meta restore-meta`}),` should be:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--backup-storage-url s3://backup_bucket`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--backup-storage-directory backup_data`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--hummock-storage-url s3://state_bucket`}),`. Note that the `,_jsx(_components.code,{children:`hummock+`}),` prefix is stripped.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--hummock-storage-directory state_data`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Additional optional parameters:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--dry-run`}),`: Print the target snapshot without restoring (default: false)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--read-attempt-timeout-ms`}),`: Read timeout for object store operations (default: 600000)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--read-retry-attempts`}),`: Maximum retry attempts for object store reads (default: 3)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--validate-integrity`}),`: Verify all referenced objects exist in object store (default: false)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--overwrite-hummock-storage-endpoint`}),`: Overwrite storage endpoint system parameters (default: false)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--overwrite-backup-storage-url`}),`: Override backup storage URL in restored meta store`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--overwrite-backup-storage-directory`}),`: Override backup storage directory in restored meta store`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--sql-url-params`}),`: Additional SQL connection parameters (e.g., `,_jsx(_components.code,{children:`sslmode=disable`}),`)`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Configure meta service to use the new meta store.`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`etcd-as-meta-store-backends`,children:`etcd as meta store backends`}),`\n`,_jsx(_components.p,{children:`If the cluster has been using etcd as meta store backend, follow these steps to restore from a meta snapshot.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Shut down RisingWave nodes, including meta, compute, compactor and frontend.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`This step is especially important because the meta backup and recovery process does not replicate SST files. It is not permitted for multiple clusters to run with the same SSTs set at any time, as this can corrupt the SST files.`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Create a new meta store, i.e. a new and empty etcd instance.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Restore the meta snapshot to the new meta store.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,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:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`risectl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`meta `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`restore-meta `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--meta-store-type `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`etcd`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--meta-snapshot-id [snapshot_id] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`--etcd-endpoints`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [etcd_endpoints, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e.g.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 127.0.0.1:2388]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--backup-storage-url [backup_storage_url, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e.g.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` s3://bucket_read_from]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--backup-storage-directory [backup_storage_directory, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e.g.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dir_read_from]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--hummock-storage-url [hummock_storage_url, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e.g.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` s3://bucket_write_to]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--hummock-storage-directory [hummock_storage_directory, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e.g.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dir_write_to]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`If etcd enables authentication, also specify the following:`}),`\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:`--etcd-auth`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--etcd-username [etcd_username] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`--etcd-password`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [etcd_password] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`restore-meta`}),` reads snapshot data from backup storage and writes them to meta store and hummock storage.\nFor example, given the cluster settings below:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,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:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`psql`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=>`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` show`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` Name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` Value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` Mutable`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`---------------------------------------+--------------------------------------+---------`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`state_store`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` hummock+s3://state_bucket`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` f`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`data_directory`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` state_data`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` f`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`backup_storage_url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` s3://backup_bucket`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` t`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`backup_storage_directory`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` backup_data`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` t`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Parameters to `,_jsx(_components.code,{children:`risectl meta restore-meta`}),` should be:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--backup-storage-url s3://backup_bucket`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--backup-storage-directory backup_data`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--hummock-storage-url s3://state_bucket`}),`. Note that the `,_jsx(_components.code,{children:`hummock+`}),` prefix is stripped.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--hummock-storage-directory state_data`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Additional optional parameters:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--dry-run`}),`: Print the target snapshot without restoring (default: false)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--read-attempt-timeout-ms`}),`: Read timeout for object store operations (default: 600000)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--read-retry-attempts`}),`: Maximum retry attempts for object store reads (default: 3)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--validate-integrity`}),`: Verify all referenced objects exist in object store (default: false)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--overwrite-hummock-storage-endpoint`}),`: Overwrite storage endpoint system parameters (default: false)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--overwrite-backup-storage-url`}),`: Override backup storage URL in restored meta store`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--overwrite-backup-storage-directory`}),`: Override backup storage directory in restored meta store`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`--sql-url-params`}),`: Additional SQL connection parameters (e.g., `,_jsx(_components.code,{children:`sslmode=disable`}),`)`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Configure meta service to use the new meta store.`}),`\n`]}),`\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":"Back up and restore meta service","description":"This guide introduces how to back up meta service data and restore from a backup.","href":"/operate/meta-backup"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Set backup parameters","slug":"set-backup-parameters","depth":2,"children":[]},{"title":"Create a meta snapshot","slug":"create-a-meta-snapshot","depth":2,"children":[]},{"title":"View existing meta snapshots","slug":"view-existing-meta-snapshots","depth":2,"children":[]},{"title":"Delete a meta snapshot","slug":"delete-a-meta-snapshot","depth":2,"children":[]},{"title":"Restore from a meta snapshot","slug":"restore-from-a-meta-snapshot","depth":2,"children":[{"title":"SQL database as meta store backend","slug":"sql-database-as-meta-store-backend","depth":3,"children":[]},{"title":"etcd as meta store backends","slug":"etcd-as-meta-store-backends","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"risingwavelabs","siteName":"RisingWave","title":"Back up and restore meta service - RisingWave","navMaps":{"firstHrefInVersion":{"Current (v3.0)":{"href":"/operate/meta-backup","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-07-22T13:14:07.113Z","originalFileLocation":"operate/meta-backup.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=\"system\"}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=\"This guide introduces how to back up meta service data and restore from a backup.\">\u003cmeta data-mint-head name=\"application-name\" content=\"RisingWave\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_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/risingwavelabs/XB2VPvZUQ1sTe2fS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Back up and restore meta service - RisingWave\">\u003cmeta data-mint-head property=\"og:description\" content=\"This guide introduces how to back up meta service data and restore from a backup.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"RisingWave\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.risingwave.com/operate/meta-backup\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://risingwavelabs.mintlify.site/_mintlify/api/og/v2?division=Maintenance\u0026amp;title=Back+up+and+restore+meta+service\u0026amp;description=This+guide+introduces+how+to+back+up+meta+service+data+and+restore+from+a+backup.\u0026amp;theme=f623197ed300707840b7cb4e\u0026amp;signature=4b1bba3de50dd2b87276277e1552f59e1a8fd62d1327f71602ef072cb7328ba2\">\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=\"Back up and restore meta service - RisingWave\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"This guide introduces how to back up meta service data and restore from a backup.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://risingwavelabs.mintlify.site/_mintlify/api/og/v2?division=Maintenance\u0026amp;title=Back+up+and+restore+meta+service\u0026amp;description=This+guide+introduces+how+to+back+up+meta+service+data+and+restore+from+a+backup.\u0026amp;theme=f623197ed300707840b7cb4e\u0026amp;signature=4b1bba3de50dd2b87276277e1552f59e1a8fd62d1327f71602ef072cb7328ba2\">\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/risingwavelabs/XB2VPvZUQ1sTe2fS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"RisingWave\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#005eec\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.risingwave.com/operate/meta-backup\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/operate/meta-backup.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.risingwave.com/#organization\",\"name\":\"RisingWave\",\"url\":\"https://docs.risingwave.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/risingwavelabs/MBiw07hESa08PLsp/logo/light.svg?fit=max\u0026auto=format\u0026n=MBiw07hESa08PLsp\u0026q=85\u0026s=ec9c31744f8c3ddaa5c37f6f7fd0385b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.risingwave.com#website\",\"name\":\"RisingWave\",\"url\":\"https://docs.risingwave.com\",\"publisher\":{\"@id\":\"https://docs.risingwave.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.risingwave.com/operate/meta-backup#webpage\",\"url\":\"https://docs.risingwave.com/operate/meta-backup\",\"name\":\"Back up and restore meta service\",\"description\":\"This guide introduces how to back up meta service data and restore from a backup.\",\"dateModified\":\"2026-07-22T13:14:07.113Z\",\"isPartOf\":{\"@id\":\"https://docs.risingwave.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.risingwave.com/operate/meta-backup#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.risingwave.com/operate/meta-backup#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Install \u0026 Operate\",\"item\":\"https://docs.risingwave.com/deploy/deployment-modes-overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Operate\",\"item\":\"https://docs.risingwave.com/operate/monitor-risingwave-cluster\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Maintenance\",\"item\":\"https://docs.risingwave.com/deploy/upgrade-risingwave-k8s\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Back up and restore meta service\",\"item\":\"https://docs.risingwave.com/operate/meta-backup\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.risingwave.com/operate/meta-backup#article\",\"headline\":\"Back up and restore meta service\",\"name\":\"Back up and restore meta service\",\"description\":\"This guide introduces how to back up meta service data and restore from a backup.\",\"url\":\"https://docs.risingwave.com/operate/meta-backup\",\"mainEntityOfPage\":{\"@id\":\"https://docs.risingwave.com/operate/meta-backup#webpage\"},\"dateModified\":\"2026-07-22T13:14:07.113Z\",\"publisher\":{\"@id\":\"https://docs.risingwave.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.risingwave.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"RisingWave\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"RisingWave","nav":{"global":{"anchors":[{"anchor":"Join Slack community","icon":"slack","href":"https://go.risingwave.com/slack"},{"anchor":"GitHub","icon":"github","href":"https://github.com/risingwavelabs/risingwave"}]},"versions":[{"version":"Current (v3.0)","tabs":[{"tab":"Guides","groups":[{"group":"Get started","pages":[{"title":"What is RisingWave?","href":"/get-started/intro"},{"title":"Quick start","sidebarTitle":"Quick start","href":"/get-started/quickstart"},{"title":"RisingWave use cases","sidebarTitle":"Use cases","href":"/get-started/use-cases"},{"group":"Recipes","pages":[{"title":"Kafka → materialized view → serve","sidebarTitle":"Kafka to MV to serve","href":"/get-started/recipes/kafka-to-mv-to-serve"},{"title":"PostgreSQL CDC pipeline","sidebarTitle":"PostgreSQL CDC","href":"/get-started/recipes/cdc-postgres"},{"title":"Feature store","sidebarTitle":"Feature store","href":"/get-started/recipes/feature-store"},{"title":"Real-time stream enrichment","sidebarTitle":"Stream enrichment","href":"/get-started/recipes/stream-enrichment"},{"title":"Webhook event ingestion","sidebarTitle":"Webhook ingest","href":"/get-started/recipes/webhook-ingest"},{"title":"Stream data to Iceberg","sidebarTitle":"Stream to Iceberg","href":"/get-started/recipes/stream-to-iceberg"},{"title":"Lakehouse ingestion pipeline","sidebarTitle":"Lakehouse ingestion","href":"/get-started/recipes/lakehouse-ingestion"},{"title":"Subscription push notifications","sidebarTitle":"Subscription push","href":"/get-started/recipes/subscription-push"}]},{"title":"RisingWave architecture","sidebarTitle":"Architecture","mode":"wide","href":"/get-started/architecture"},{"title":"Source, Table, Materialized View, and Sink","sidebarTitle":"Source, Table, MV, and Sink","href":"/get-started/source-table-mv-sink"},{"title":"RisingWave Premium features","sidebarTitle":"Premium features","href":"/get-started/premium-features"},{"title":"Elastic disk cache","sidebarTitle":"Elastic disk cache","href":"/get-started/disk-cache"},{"group":"Example projects","pages":[{"title":"Overview","mode":"wide","href":"/demos/overview"},{"title":"Example repository","url":"https://github.com/risingwavelabs/awesome-stream-processing","href":"/demos/example-repository"},{"group":"Capital markets","pages":[{"title":"Market data enrichment and transformation","href":"/demos/market-data-enrichment"},{"title":"Market and trade activity surveillance","href":"/demos/market-trade-surveillance"}]},{"group":"E-Commerce","pages":[{"title":"Marketing campaign performance analysis","href":"/demos/marketing-analysis"}]},{"group":"Sports betting","pages":[{"title":"User betting behavior analysis","href":"/demos/betting-behavior-analysis"},{"title":"Risk and profit analysis in sports betting","href":"/demos/sports-risk-profit-analysis"}]},{"group":"Logistics","pages":[{"title":"Inventory management and demand forecast","href":"/demos/inventory-management-forecast"}]},{"group":"RAG system","pages":[{"title":"Building a RAG system on RisingWave","href":"/demos/rag-system-on-risingwave"}]},{"group":"RisingWave agent","pages":[{"title":"Use agents to analyze data ingested into RisingWave","sidebarTitle":"RisingWave agent demo","href":"/demos/risingwave-agent"}]}]},{"group":"Performance benchmarks","pages":[{"title":"Stream processing benchmarks: Nexmark results","sidebarTitle":"Stream processing benchmarks","href":"/get-started/rw-benchmarks-stream-processing"},{"title":"Query serving benchmarks: sysbench results","sidebarTitle":"Query serving benchmarks","href":"/get-started/rw-benchmarks-query"}]},{"title":"Connectors Overview","sidebarTitle":"Connectors","href":"/get-started/connectors"}]},{"group":"Work with data","pages":[{"group":"Ingest data","pages":[{"title":"Data ingestion patterns","sidebarTitle":"Overview","href":"/ingestion/overview"},{"group":"Core concepts","pages":[{"title":"CREATE SOURCE vs. CREATE TABLE","sidebarTitle":"CREATE SOURCE vs. CREATE TABLE","href":"/ingestion/create-source-vs-create-table"},{"title":"Data formats and encoding options","sidebarTitle":"Data formats and encoding options","href":"/ingestion/formats-and-encoding-options"},{"group":"Manage schemas","pages":[{"title":"Modify source or table schemas","sidebarTitle":"Modify schemas","href":"/ingestion/modify-source-or-table-schemas"},{"title":"Extract metadata from sources","sidebarTitle":"Source metadata","href":"/ingestion/extract-metadata-from-sources"}]}]},{"group":"Webhooks \u0026 Events API","pages":[{"title":"Ingest data from webhook","sidebarTitle":"Overview","href":"/integrations/sources/webhook"},{"title":"Ingest OpenTelemetry data (OTel) into RisingWave","sidebarTitle":"OpenTelemetry (OTel)","href":"/integrations/sources/opentelemetry-webhook"},{"title":"Ingest data with Events API (HTTP)","sidebarTitle":"Events API","href":"/integrations/sources/events-api"},{"title":"Ingest data from GitHub webhook","sidebarTitle":"GitHub webhook","href":"/integrations/sources/github-webhook"},{"title":"Ingest data from Segment webhook","sidebarTitle":"Segment webhook","href":"/integrations/sources/segment-webhook"},{"title":"Ingest data from HubSpot webhook","sidebarTitle":"HubSpot webhook","href":"/integrations/sources/hubspot-webhook"},{"title":"Ingest data from Amazon EventBridge webhook","sidebarTitle":"Amazon EventBridge webhook","href":"/integrations/sources/eventbridge-webhook"},{"title":"Ingest data from RudderStack webhook","sidebarTitle":"RudderStack webhook","href":"/integrations/sources/rudderstack-webhook"}]},{"group":"Change Data Capture","pages":[{"title":"Change data capture","sidebarTitle":"CDC with RisingWave","href":"/ingestion/cdc-with-risingwave"},{"title":"Monitor CDC progress","sidebarTitle":"Monitor CDC progress","href":"/ingestion/monitor-cdc-progress"},{"group":"PostgreSQL CDC","pages":[{"title":"PostgreSQL CDC","sidebarTitle":"Connect to PostgreSQL","href":"/ingestion/sources/postgresql/pg-cdc"},{"group":"Platform-specific setup","pages":[{"title":"Set up a self-hosted PostgreSQL database","sidebarTitle":"Self-hosted","href":"/ingestion/sources/postgresql/self-hosted"},{"title":"Set up AWS RDS \u0026 Aurora PostgreSQL","sidebarTitle":"AWS RDS \u0026 Aurora","href":"/ingestion/sources/postgresql/aws-rds"},{"title":"Set up Neon PostgreSQL","sidebarTitle":"Neon","href":"/ingestion/sources/postgresql/neon"},{"title":"Set up Supabase PostgreSQL","sidebarTitle":"Supabase","href":"/ingestion/sources/postgresql/supabase"}]}]},{"group":"MySQL CDC","pages":[{"title":"MySQL CDC","sidebarTitle":"MySQL CDC","href":"/ingestion/sources/mysql/mysql-cdc"},{"group":"Platform-specific setup","pages":[{"title":"Set up a self-hosted MySQL database","sidebarTitle":"Self-hosted","href":"/ingestion/sources/mysql/self-hosted"},{"title":"Set up AWS RDS MySQL \u0026 Aurora (MySQL-compatible)","sidebarTitle":"AWS RDS \u0026 Aurora","href":"/ingestion/sources/mysql/aws-rds"}]}]},{"title":"Ingest data from MongoDB CDC","sidebarTitle":"MongoDB CDC","href":"/ingestion/sources/mongodb-cdc"},{"title":"Ingest data from SQL Server CDC","sidebarTitle":"SQL Server CDC","href":"/ingestion/sources/sql-server-cdc"}]},{"group":"Apache Kafka","pages":[{"title":"Ingest from Apache Kafka","sidebarTitle":"Connect to Kafka","href":"/ingestion/sources/kafka"},{"title":"Kafka configuration options","sidebarTitle":"Kafka config","href":"/ingestion/sources/kafka-config"},{"title":"Monitor Kafka consumer lag","sidebarTitle":"Monitor Kafka consumer lag","href":"/ingestion/monitor-kafka-consumer-lag"},{"group":"Managed/Hosted Kafka","pages":[{"title":"Ingest data from Amazon MSK","sidebarTitle":"Amazon MSK","href":"/integrations/sources/amazon-msk"},{"title":"Ingest data from AutoMQ Kafka","sidebarTitle":"AutoMQ Kafka","href":"/integrations/sources/automq-kafka"},{"title":"Ingest data from Confluent Cloud","sidebarTitle":"Confluent Cloud","href":"/integrations/sources/confluent-cloud"},{"title":"Ingest data from Instaclustr Kafka","sidebarTitle":"Instaclustr Kafka","href":"/integrations/sources/instaclustr-kafka"},{"title":"Ingest data from RedHat AMQ Streams","sidebarTitle":"RedHat AMQ Streams","href":"/integrations/sources/redhat-amq-streams"},{"title":"Ingest data from WarpStream","sidebarTitle":"WarpStream","href":"/integrations/sources/warpstream"}]}]},{"title":"Apache Iceberg","url":"/iceberg/ingest-from-iceberg","href":"/ingestion/sources/iceberg"},{"group":"Database tables (non-CDC)","pages":[{"title":"Query PostgreSQL tables (non-CDC)","sidebarTitle":"PostgreSQL tables (non-CDC)","href":"/integrations/sources/postgresql-table"},{"title":"Query MySQL tables (non-CDC)","sidebarTitle":"MySQL tables (non-CDC)","href":"/integrations/sources/mysql-table"},{"title":"Ingest data from Snowflake","sidebarTitle":"Snowflake","href":"/ingestion/sources/snowflake"}]},{"group":"Object storage","pages":[{"title":"Ingest data from Azure Blob","sidebarTitle":"Azure Blob","href":"/integrations/sources/azure-blob"},{"title":"Ingest data from Google Cloud Storage","sidebarTitle":"Google Cloud Storage","href":"/integrations/sources/google-cloud-storage"},{"title":"Ingest data from S3 buckets","sidebarTitle":"AWS S3","href":"/integrations/sources/s3"}]},{"group":"Other messaging platforms","pages":[{"title":"Monitor source connector acknowledgments","sidebarTitle":"Monitor connector acks","href":"/ingestion/monitor-source-connector-acks"},{"title":"Ingest data from Google Pub/Sub","sidebarTitle":"Google Pub/Sub","href":"/integrations/sources/google-pub-sub"},{"title":"Ingest data from Kinesis","sidebarTitle":"AWS Kinesis","href":"/integrations/sources/kinesis"},{"group":"MQTT","pages":[{"title":"Ingest data from MQTT brokers","sidebarTitle":"Overview","href":"/integrations/sources/mqtt"},{"title":"Ingest data from Coreflux broker","sidebarTitle":"Coreflux","href":"/integrations/sources/coreflux-broker"},{"title":"Ingest data from EMQX broker","sidebarTitle":"EMQX","href":"/integrations/sources/emqx"},{"title":"Ingest data from HiveMQ broker","sidebarTitle":"HiveMQ","href":"/integrations/sources/hivemq"}]},{"title":"Ingest data from NATS JetStream","sidebarTitle":"NATS JetStream","href":"/integrations/sources/nats-jetstream"},{"title":"Ingest data from Pulsar","sidebarTitle":"Apache Pulsar","href":"/integrations/sources/pulsar"},{"title":"Ingest data from Redpanda","mode":"wide","sidebarTitle":"Redpanda","href":"/integrations/sources/redpanda"},{"title":"Ingest data from Solace","sidebarTitle":"Solace","href":"/integrations/sources/solace"}]}]},{"group":"Process data","pages":[{"title":"Data processing in RisingWave","sidebarTitle":"Overview","href":"/processing/overview"},{"group":"Manage pipelines","pages":[{"title":"Use dbt for data transformations","sidebarTitle":"dbt","href":"/integrations/other/dbt"},{"title":"Use SQLMesh to streamline pipelines","sidebarTitle":"SQLMesh","href":"/integrations/other/sqlmesh"}]},{"group":"SQL patterns","pages":[{"title":"Dynamic filters","mode":"wide","href":"/processing/sql/dynamic-filters"},{"title":"Temporal filters","href":"/processing/sql/temporal-filters"},{"title":"Periodic query pattern","href":"/processing/sql/periodic-query"},{"title":"Joins","href":"/processing/sql/joins"},{"title":"Time windows","href":"/processing/sql/time-windows"},{"title":"Top-N by group","href":"/processing/sql/top-n-by-group"},{"title":"Full SQL references","url":"/sql/overview","href":"/processing/sql/sql-references"}]},{"title":"Deletes and updates","href":"/processing/deletes-and-updates"},{"title":"Transactions","href":"/processing/transactions"},{"title":"Maintain wide table with table sinks","href":"/processing/maintain-wide-table-with-table-sinks"},{"title":"Watermarks","href":"/processing/watermarks"},{"title":"Emit on window close","href":"/processing/emit-on-window-close"},{"title":"Indexes","href":"/processing/indexes"},{"title":"Vector indexes","href":"/processing/vector-indexes"},{"title":"Time travel queries","href":"/processing/time-travel-queries"},{"title":"Serverless backfilling","href":"/processing/serverless-backfill"}]},{"group":"Store and access data","pages":[{"title":"RisingWave storage overview","sidebarTitle":"Storage","href":"/store/overview"},{"title":"Query \u0026 serve data from RisingWave","sidebarTitle":"Access","href":"/serve/overview"},{"title":"Integrate with PostgreSQL via foreign data wrapper (FDW)","sidebarTitle":"PostgreSQL FDW","href":"/serve/risingwave-as-postgres-fdw"},{"group":"Visualization tools","pages":[{"title":"Overview","mode":"wide","href":"/integrations/visualization/overview"},{"title":"Connect Bytebase to RisingWave","sidebarTitle":"Bytebase","href":"/integrations/visualization/bytebase"},{"title":"Connect Beekeeper Studio to RisingWave","sidebarTitle":"Beekeeper Studio","href":"/integrations/visualization/beekeeper-studio"},{"title":"Connect DBeaver to RisingWave","sidebarTitle":"DBeaver","href":"/integrations/visualization/dbeaver"},{"title":"Configure Grafana to read data from RisingWave","sidebarTitle":"Grafana","href":"/integrations/visualization/grafana"},{"title":"Connect Looker to RisingWave","sidebarTitle":"Looker","href":"/integrations/visualization/looker"},{"title":"Connect Metabase to RisingWave","sidebarTitle":"Metabase","href":"/integrations/visualization/metabase"},{"title":"Configure Superset to read data from RisingWave","sidebarTitle":"Superset","href":"/integrations/visualization/superset"}]}]},{"group":"Deliver data","pages":[{"title":"Data delivery overview","sidebarTitle":"Overview","href":"/delivery/overview"},{"title":"Subscribe to real-time updates","sidebarTitle":"Subscribe to real-time updates","href":"/serve/subscription"},{"title":"Sink data from RisingWave to Apache Iceberg","sidebarTitle":"Apache Iceberg","url":"/iceberg/deliver-to-iceberg","href":"/integrations/destinations/apache-iceberg"},{"title":"Sink to Kafka","sidebarTitle":"Apache Kafka","href":"/integrations/destinations/apache-kafka"},{"title":"Sink data from RisingWave to ClickHouse","sidebarTitle":"ClickHouse","href":"/integrations/destinations/clickhouse"},{"title":"Sink data from RisingWave to Elasticsearch","sidebarTitle":"Elasticsearch","href":"/integrations/destinations/elasticsearch"},{"title":"Sink data from RisingWave to PostgreSQL","sidebarTitle":"PostgreSQL","href":"/integrations/destinations/postgresql"},{"title":"Sink data from RisingWave to MySQL with the JDBC connector","sidebarTitle":"MySQL","href":"/integrations/destinations/mysql"},{"group":"Other connectors","pages":[{"group":"Message queues","pages":[{"title":"Sink data from RisingWave to Apache Pulsar","sidebarTitle":"Apache Pulsar","href":"/integrations/destinations/apache-pulsar"},{"title":"Sink to AWS Kinesis","sidebarTitle":"AWS Kinesis","href":"/integrations/destinations/aws-kinesis"},{"title":"Sink data to NATS and NATS JetStream","sidebarTitle":"NATS JetStream","href":"/integrations/destinations/nats-and-nats-jetstream"},{"title":"Sink data from RisingWave to Google Pub/Sub","sidebarTitle":"Google Pub/Sub","href":"/integrations/destinations/google-pub-sub"},{"title":"Sink data from RisingWave to HTTP endpoints","sidebarTitle":"HTTP","href":"/integrations/destinations/http"},{"title":"Sink data from RisingWave to MQTT","sidebarTitle":"MQTT","href":"/integrations/destinations/mqtt"}]},{"group":"Operational","pages":[{"title":"Sink data from RisingWave to MongoDB","sidebarTitle":"MongoDB","href":"/integrations/destinations/mongodb"},{"title":"Sink data from RisingWave to Amazon DynamoDB","sidebarTitle":"Amazon DynamoDB","href":"/integrations/destinations/amazon-dynamodb"},{"title":"Sink data from RisingWave to SQL Server","sidebarTitle":"Microsoft SQL Server","href":"/integrations/destinations/sql-server"},{"title":"Sink data from RisingWave to Redis","sidebarTitle":"Redis","href":"/integrations/destinations/redis"},{"title":"Sink data from RisingWave to Supabase","sidebarTitle":"Supabase","href":"/integrations/destinations/supabase"},{"title":"Sink data from RisingWave to Turbopuffer","sidebarTitle":"Turbopuffer","href":"/integrations/destinations/turbopuffer"},{"title":"Sink data from RisingWave to TiDB with the JDBC connector","sidebarTitle":"TiDB","href":"/integrations/destinations/tidb"},{"title":"Sink data from RisingWave to CockroachDB","sidebarTitle":"CockroachDB","href":"/integrations/destinations/cockroachdb"},{"title":"Sink data from RisingWave to Cassandra or ScyllaDB","sidebarTitle":"Cassandra","href":"/integrations/destinations/cassandra-or-scylladb"}]},{"group":"Analytical","pages":[{"title":"Sink data from RisingWave to Apache Doris","sidebarTitle":"Apache Doris","href":"/integrations/destinations/apache-doris"},{"title":"Sink data from RisingWave to StarRocks","sidebarTitle":"StarRocks","href":"/integrations/destinations/starrocks"},{"title":"Sink data from RisingWave to Snowflake","sidebarTitle":"Snowflake","href":"/integrations/destinations/snowflake"},{"title":"Sink data from RisingWave to Snowflake (v2)","sidebarTitle":"Snowflake v2","href":"/integrations/destinations/snowflake-v2"},{"title":"Sink data from RisingWave to Amazon Redshift","sidebarTitle":"Amazon Redshift","href":"/integrations/destinations/redshift"},{"title":"Sink data from RisingWave to Google BigQuery","sidebarTitle":"Google BigQuery","href":"/integrations/destinations/bigquery"},{"title":"Sink data from RisingWave to OpenSearch","sidebarTitle":"OpenSearch","href":"/integrations/destinations/opensearch"},{"title":"Sink data from RisingWave to Delta Lake","sidebarTitle":"Delta Lake","href":"/integrations/destinations/delta-lake"}]},{"group":"Object storages","pages":[{"title":"Sink data from RisingWave to AWS S3","sidebarTitle":"AWS S3","href":"/integrations/destinations/aws-s3"},{"title":"Sink data from RisingWave to Azure Blob","sidebarTitle":"Azure Blob Storage","href":"/integrations/destinations/azure-blob"},{"title":"Sink data from RisingWave to Google Cloud Storage","sidebarTitle":"Google Cloud Storage","href":"/integrations/destinations/google-cloud-storage"},{"title":"Sink data from RisingWave to WebHDFS","sidebarTitle":"WebHDFS","href":"/integrations/destinations/webhdfs"}]}]}]}]},{"group":"Install \u0026 Operate","pages":[{"group":"Install","pages":[{"title":"Deployment options","sidebarTitle":"Overview","href":"/deploy/deployment-modes-overview"},{"title":"Standalone mode","href":"/operate/rw-standalone-mode"},{"title":"Docker Compose","href":"/deploy/risingwave-docker-compose"},{"title":"RisingWave Cloud","mode":"wide","href":"/deploy/risingwave-cloud"},{"title":"Kubernetes (Helm)","href":"/deploy/risingwave-k8s-helm"},{"title":"Kubernetes (Operator)","href":"/deploy/risingwave-kubernetes"},{"group":"Prerequisites","pages":[{"title":"Hardware requirements","href":"/deploy/hardware-requirements"},{"title":"Install psql without PostgreSQL","sidebarTitle":"Install psql","href":"/deploy/install-psql-without-postgresql"}]},{"group":"Post-deployment configuration","pages":[{"title":"Node-specific configurations","href":"/deploy/node-specific-configurations"},{"title":"Migrate from etcd to SQL backend for metadata management","sidebarTitle":"Migrate to SQL backend","href":"/deploy/migrate-to-sql-backend"}]},{"title":"Uninstall RisingWave from a Kubernetes cluster","sidebarTitle":"Uninstall RisingWave from a cluster","href":"/deploy/uninstall-risingwave-k8s"}]},{"group":"Operate","pages":[{"group":"Monitor","pages":[{"title":"Monitor a RisingWave cluster","href":"/operate/monitor-risingwave-cluster"},{"title":"Prometheus metrics reference","href":"/operate/prometheus-metrics-reference"},{"title":"Monitor statement progress","href":"/operate/monitor-statement-progress"}]},{"group":"Configuration","pages":[{"title":"View and configure system parameters","href":"/operate/view-configure-system-parameters"},{"title":"View and configure runtime parameters","href":"/operate/view-configure-runtime-parameters"},{"title":"Cluster limit","href":"/operate/cluster-limit"}]},{"group":"Maintenance","pages":[{"title":"Upgrade RisingWave in a Kubernetes cluster","href":"/deploy/upgrade-risingwave-k8s"},{"title":"Cluster scaling","description":"This article describes adaptive parallelism as the default scaling policy for all new streaming jobs starting from v1.7 in RisingWave. With adaptive parallelism, the system will automatically adjust parallelism to leverage added CPU cores or nodes in the cluster, ensuring optimal resource utilization.","href":"/deploy/k8s-cluster-scaling"},{"title":"Back up and restore meta service","href":"/operate/meta-backup"},{"title":"Update source properties with risectl","description":"Use risectl commands to dynamically update source connector properties without recreating sources.","href":"/operate/risectl-source-commands"}]},{"group":"Security","pages":[{"title":"Access control","href":"/operate/access-control"},{"title":"LDAP authentication","href":"/operate/ldap-authentication"},{"title":"Implement row-level security in RisingWave","sidebarTitle":"Row-level security","href":"/operate/row-level-security"},{"title":"Manage secrets","href":"/operate/manage-secrets"},{"title":"Set up secure connections to RisingWave with SSL/TLS","sidebarTitle":"Secure connections with SSL/TLS","href":"/operate/secure-connections-with-ssl-tls"}]},{"group":"Performance optimization","pages":[{"title":"Workload isolation and interaction","href":"/operate/workload-isolation-interaction"},{"title":"Tune reserved memory and cache eviction policy","href":"/operate/tune-reserved-memory"},{"title":"Dedicated Compute Nodes","sidebarTitle":"Set up a dedicated Compute Node","href":"/operate/dedicated-compute-node"},{"title":"Manage a large number of streaming jobs","href":"/operate/manage-a-large-number-of-streaming-jobs"}]},{"group":"Streaming jobs","pages":[{"title":"Alter a streaming job","href":"/operate/alter-streaming"}]},{"title":"Telemetry","href":"/operate/telemetry"}]}]},{"group":"Performance","pages":[{"title":"Performance guide overview","sidebarTitle":"Overview","href":"/performance/overview"},{"title":"Monitoring and metrics","sidebarTitle":"Monitoring and metrics","href":"/performance/metrics"},{"group":"Best practices","pages":[{"title":"Best practices for optimizing performance","sidebarTitle":"Overview","href":"/performance/best-practices"},{"title":"Serving optimizations","href":"/performance/serving-optimizations"},{"title":"Streaming optimizations","href":"/performance/streaming-optimizations"}]},{"group":"Troubleshoot","pages":[{"title":"General troubleshooting approach","href":"/performance/performance-troubleshoot-ov"},{"title":"High latency","href":"/performance/troubleshoot-high-latency"},{"title":"End-to-end latency","href":"/performance/troubleshoot-e2e-latency"},{"title":"Specific bottlenecks","href":"/performance/specific-bottlenecks"}]},{"title":"Workload analysis","href":"/performance/workload-analysis"},{"title":"Frequently asked questions (FAQ)","sidebarTitle":"FAQs","href":"/performance/faq"}]},{"group":"Troubleshooting","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/troubleshoot/overview"},{"title":"Out of memory","href":"/troubleshoot/troubleshoot-oom"},{"group":"Node failure","pages":[{"title":"Node failure","href":"/troubleshoot/node-failure"},{"title":"Meta failure","href":"/troubleshoot/meta-failure"}]},{"title":"Recovery failure","href":"/troubleshoot/troubleshoot-recovery-failure"},{"title":"Sources and sinks","sidebarTitle":"Sources \u0026 sinks","href":"/troubleshoot/troubleshoot-source-sink"},{"title":"Deployment issues","href":"/troubleshoot/troubleshoot-deployment-issues"}]},{"group":"Reference","pages":[{"title":"Key concepts","sidebarTitle":"Glossary","href":"/reference/key-concepts"},{"title":"What is a Streaming Database?","sidebarTitle":"Streaming Database","href":"/reference/what-is-streaming-database"},{"title":"What is a Materialized View in RisingWave?","sidebarTitle":"Materialized Views","href":"/reference/what-is-materialized-view"},{"title":"What is a Source in RisingWave?","sidebarTitle":"Sources","href":"/reference/what-is-source"},{"title":"What is a Sink in RisingWave?","sidebarTitle":"Sinks","href":"/reference/what-is-sink"},{"title":"What is Change Data Capture (CDC) in RisingWave?","sidebarTitle":"Change Data Capture (CDC)","href":"/reference/what-is-cdc"},{"title":"What is Stream Processing?","sidebarTitle":"Stream Processing","href":"/reference/what-is-stream-processing"},{"title":"What is Streaming ETL?","sidebarTitle":"Streaming ETL","href":"/reference/what-is-streaming-etl"},{"title":"Fault tolerance","mode":"wide","href":"/reference/fault-tolerance"},{"title":"Data persistence","mode":"wide","href":"/reference/data-persistence"},{"title":"RisingWave vs. Apache Kafka: Which one to choose?","sidebarTitle":"RisingWave vs. Kafka","href":"/reference/risingwave-kafka-comparison"},{"title":"RisingWave vs. Apache Flink","sidebarTitle":"RisingWave vs. Flink","href":"/reference/risingwave-flink-comparison"},{"title":"RisingWave vs. Flink: Feature-by-feature comparison","sidebarTitle":"RisingWave vs. Flink: feature comparison","href":"/reference/rw-flink-feature-comparison"},{"title":"RisingWave vs. Debezium","sidebarTitle":"RisingWave vs. Debezium","href":"/reference/risingwave-debezium-comparison"},{"title":"RisingWave vs. ksqlDB","sidebarTitle":"RisingWave vs. ksqlDB","href":"/reference/risingwave-ksqldb-comparison"},{"title":"RisingWave vs. Kafka Streams","sidebarTitle":"RisingWave vs. Kafka Streams","href":"/reference/risingwave-kafka-streams-comparison"},{"title":"RisingWave vs. Spark Structured Streaming","sidebarTitle":"RisingWave vs. Spark Streaming","href":"/reference/risingwave-spark-comparison"}]},{"group":"Cloud","pages":[{"group":"About","pages":[{"title":"What's RisingWave Cloud?","mode":"wide","href":"/cloud/intro"},{"title":"FAQ","mode":"wide","href":"/cloud/faq"}]},{"group":"Get started","pages":[{"title":"Quick start","href":"/cloud/quickstart"},{"title":"Sign up and log in","url":"https://cloud.risingwave.com/auth/signup/","href":"/cloud/signup-login"},{"title":"Install the RisingWave Cloud CLI","href":"/cloud/install-cli"}]},{"group":"Clusters","pages":[{"title":"Manage clusters","sidebarTitle":"Overview","href":"/cloud/manage-projects"},{"title":"Choose a cluster plan","href":"/cloud/choose-a-project-plan"},{"title":"Connect to a cluster","href":"/cloud/connect-to-a-project"},{"title":"Connection errors","href":"/cloud/connection-errors"},{"title":"Bring your own cloud","href":"/cloud/project-byoc"},{"title":"Bring your own Kubernetes","href":"/cloud/project-byok"},{"title":"Check status and metrics of clusters","sidebarTitle":"Check status and metrics","href":"/cloud/check-status-and-metrics"},{"title":"Scale a cluster manually","href":"/cloud/scale-a-project-manually"},{"title":"Update RisingWave version","href":"/cloud/update-database-version"},{"title":"Maintenance windows","sidebarTitle":"Maintenance windows","href":"/cloud/maintenance-window"},{"title":"Stop and delete clusters","href":"/cloud/stop-and-delete-projects"}]},{"group":"Management","pages":[{"title":"Export metrics","sidebarTitle":"Metrics","href":"/cloud/export-metrics"},{"title":"Manage resources","sidebarTitle":"Resources","href":"/cloud/manage-resources"},{"title":"Manage disk cache","sidebarTitle":"Disk cache","href":"/cloud/manage-disk-cache"},{"title":"Configure serverless backfilling","href":"/cloud/serverless-backfilling"},{"title":"Serverless compaction","href":"/cloud/serverless-compaction"},{"title":"Manage database users","sidebarTitle":"Users","href":"/cloud/manage-database-users"},{"title":"Manage backups","sidebarTitle":"Backup","href":"/cloud/manage-backups"},{"title":"Cloud metadata","sidebarTitle":"Cloud metadata","href":"/cloud/cloud-metadata"},{"title":"Set up IAM role assume","sidebarTitle":"IAM role assume","href":"/cloud/iam-role-assume"},{"group":"PrivateLink","pages":[{"title":"PrivateLink connection","sidebarTitle":"Overview","href":"/cloud/privatelink-overview"},{"title":"PrivateLink connection configuration","sidebarTitle":"PrivateLink config","href":"/cloud/create-a-connection"}]},{"group":"BYOC","pages":[{"title":"Connect BYOC telemetry to Grafana","sidebarTitle":"BYOC telemetry in Grafana","href":"/cloud/connect-byoc-telemetry-to-grafana"}]}]},{"group":"Develop","pages":[{"title":"Develop with RisingWave Cloud","href":"/cloud/develop-overview"},{"title":"RisingWave Connect","sidebarTitle":"RisingWave Connect","href":"/cloud/risingwave-connect"},{"title":"Manage sources","href":"/cloud/manage-sources"},{"title":"Ingest data from webhook","href":"/cloud/ingest-data-from-webhook"},{"title":"Ingest data from WebSocket","href":"/cloud/ingest-data-from-websocket"},{"title":"Manage sinks","href":"/cloud/manage-sinks"},{"title":"Monitor materialized views","sidebarTitle":"Materialized views","mode":"wide","href":"/cloud/monitor-materialized-views"},{"title":"SQL Editor","href":"/cloud/console-overview"}]},{"group":"Organization","pages":[{"title":"Organization","sidebarTitle":"Overview","href":"/cloud/organization-overview"},{"title":"Invite and manage users in your organization","sidebarTitle":"Invite and manage users","href":"/cloud/manage-users"},{"title":"Set up Single Sign-On (SSO) for your organization","sidebarTitle":"Single Sign-On (SSO)","href":"/cloud/sso"},{"title":"Set up service accounts for applications","sidebarTitle":"Service account \u0026 API key","href":"/cloud/service-account"},{"title":"Role-based access control (RBAC)","sidebarTitle":"Role-based access control","href":"/cloud/organization-rbac"}]},{"group":"Billing","pages":[{"title":"Billing","sidebarTitle":"Overview","href":"/cloud/billing-overview"},{"title":"Pricing","href":"/cloud/pricing"},{"title":"Check spending details","href":"/cloud/check-spending-details"},{"title":"Review and pay invoices","href":"/cloud/review-and-pay-invoices"},{"title":"Manage payment methods","href":"/cloud/manage-payment-methods"}]},{"group":"Messages and alerts","pages":[{"title":"Monitor messages and alerts","sidebarTitle":"Overview","href":"/cloud/monitor-messages-and-alerts"},{"group":"Alert playbooks","pages":[{"title":"Alert playbooks","href":"/cloud/alert-playbooks"},{"group":"Service Health","pages":[{"title":"Out of memory error","sidebarTitle":"Out of memory error","href":"/cloud/alert-playbooks/service-health/out-of-memory-error"},{"title":"Meta recovery - high frequency","sidebarTitle":"Meta recovery - high frequency","href":"/cloud/alert-playbooks/service-health/recovery-failure-loop"},{"title":"Cluster health check failed","sidebarTitle":"Cluster health check failed","href":"/cloud/alert-playbooks/service-health/tenant-health-check-failed"},{"title":"RisingWave pod crash looping","sidebarTitle":"RisingWave pod crash looping","href":"/cloud/alert-playbooks/service-health/risingwave-pod-crash-looping"},{"title":"RisingWave pod not healthy","sidebarTitle":"RisingWave pod not healthy","href":"/cloud/alert-playbooks/service-health/risingwave-pod-not-healthy"},{"title":"RisingWave pod pending","sidebarTitle":"RisingWave pod pending","href":"/cloud/alert-playbooks/service-health/risingwave-pod-pending"},{"title":"Serving CPU load pressure","sidebarTitle":"Serving CPU load pressure","href":"/cloud/alert-playbooks/service-health/serving-cpu-load-pressure"}]},{"group":"Streaming","pages":[{"title":"Barrier pending for too long","sidebarTitle":"Barrier pending for too long","href":"/cloud/alert-playbooks/streaming/barrier-pending-for-too-long"},{"title":"Source error","sidebarTitle":"Source error","href":"/cloud/alert-playbooks/streaming/source-error"},{"title":"Sink error","sidebarTitle":"Sink error","href":"/cloud/alert-playbooks/streaming/sink-error"},{"title":"Streaming source offline","sidebarTitle":"Streaming source offline","href":"/cloud/alert-playbooks/streaming/source-status-down"},{"title":"MySQL CDC binlog file lag too high","sidebarTitle":"MySQL CDC binlog file lag too high","href":"/cloud/alert-playbooks/streaming/mysql-cdc-binlog-file-lag"},{"title":"PostgreSQL CDC WAL lag","sidebarTitle":"PostgreSQL CDC WAL lag","href":"/cloud/alert-playbooks/streaming/postgresql-cdc-wal-lag"},{"title":"Sink lag too large","sidebarTitle":"Sink lag too large","href":"/cloud/alert-playbooks/streaming/sink-lag-too-large"},{"title":"Cross-database subscription changelog expiry headroom low","sidebarTitle":"Cross-database changelog expiry headroom low","href":"/cloud/alert-playbooks/streaming/cross-database-subscription-changelog-expiry-headroom-low"}]},{"group":"Compaction","pages":[{"title":"Compaction back pressure","sidebarTitle":"Compaction back pressure","href":"/cloud/alert-playbooks/compaction/compaction-back-pressure"},{"title":"Write stall compaction stuck","sidebarTitle":"Write stall compaction stuck","href":"/cloud/alert-playbooks/compaction/write-stall-compaction-stuck"}]}]}]},{"group":"Account","pages":[{"title":"Manage your account","href":"/cloud/manage-your-account"},{"title":"Forgot password?","mode":"wide","href":"/cloud/forgot-password"}]}]}]},{"tab":"Apache Iceberg™","pages":[{"title":"Apache Iceberg™","href":"/iceberg/overview"}]},{"tab":"SQL/Python/UDFs","pages":[{"title":"SQL/Python/UDFs","href":"/sql/overview"}]},{"tab":"Client Libraries","pages":[{"title":"Client Libraries","href":"/client-libraries/overview"}]},{"tab":"Web UI","pages":[{"title":"Web UI","href":"/web-ui/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/release-notes"}]}]}]},"basePath":"","title":"Back up and restore meta service - RisingWave","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":[],"chunks":[]}