Configure RDBMS for manual installations
Configure RDBMS secondary storage drivers, connections, and initial schema for manual Camunda 8 installations (VM, bare metal, or standalone Java).
Prerequisites
- Supported RDBMS: See the RDBMS support policy.
- JDBC drivers: PostgreSQL, MariaDB, SQL Server, and H2 are bundled. Oracle and MySQL must be user-supplied.
- Java 21+: Required for Orchestration Cluster components (Zeebe, Operate, Tasklist). Management Identity remains Java 17+. See supported environments.
- Database user: Needs DDL permissions (CREATE TABLE, ALTER TABLE, DROP TABLE) for schema initialization.
JDBC driver management
Bundled drivers
Camunda bundles these JDBC drivers for redistribution:
| Database | Driver artifact |
|---|---|
| PostgreSQL | org.postgresql:postgresql |
| MariaDB | org.mariadb.jdbc:mariadb-java-client |
| Microsoft SQL Server | com.microsoft.sqlserver:mssql-jdbc |
| H2 | com.h2database:h2 |
| AWS Aurora JDBC | Bundled |
You can optionally supply your own version of any bundled driver for flexibility or compliance requirements.
User-supplied drivers (Oracle, MySQL)
Recommended approach: Place drivers in /opt/camunda-drivers and set CLASSPATH:
export CLASSPATH="/opt/camunda-drivers/*:$CLASSPATH"
./camunda.sh
For Docker, mount external drivers using a volume. The driver JAR must be placed directly in the mounted directory (no subdirectories):
services:
camunda:
image: camunda/camunda-platform:8.9.0
ports:
- "8080:8080"
- "26500:26500"
- "9600:9600"
environment:
CAMUNDA_DATA_SECONDARY_STORAGE_TYPE: rdbms
CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_URL: jdbc:mysql://mysql:3306/camunda
CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_USERNAME: camunda
CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_PASSWORD: demo
volumes:
- /path/to/driver-lib:/driver-lib
Database setup
Step 1: Create database and user
PostgreSQL example:
CREATE DATABASE camunda ENCODING 'UTF8';
CREATE USER camunda WITH PASSWORD 'your-secure-password';
GRANT CONNECT ON DATABASE camunda TO camunda;
GRANT USAGE ON SCHEMA public TO camunda;
GRANT CREATE ON DATABASE camunda TO camunda;
For other databases, see RDBMS Helm configuration.
Step 2: Configure connection
Use the unified Camunda configuration properties:
export CAMUNDA_DATA_SECONDARY_STORAGE_TYPE=rdbms
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_URL="jdbc:postgresql://localhost:5432/camunda"
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_USERNAME="camunda"
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_PASSWORD="your-secure-password"
Step 3: Schema initialization
By default, Liquibase automatically creates the schema on first startup. To manually manage schema:
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_AUTO_DDL=false
Then apply SQL/Liquibase scripts manually using your DBA tools. See access SQL and Liquibase scripts.
Orchestration Cluster configuration
The Orchestration Cluster uses a single RDBMS configuration shared across the orchestration services and the UIs that read from secondary storage.
Connection parameters
All orchestration services and UIs share the same database connection:
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_URL="jdbc:postgresql://localhost:5432/camunda"
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_USERNAME="camunda"
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_PASSWORD="your-secure-password"
Zeebe exporter configuration
Configure Zeebe's exporter flush behavior:
export CAMUNDA_DATA_SNAPSHOTPERIOD=5m
export CAMUNDA_DATA_EXPORTERS_RDBMS_CLASSNAME=io.camunda.exporter.rdbms.RdbmsExporter
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_FLUSHINTERVAL=PT0.5S
export CAMUNDA_DATA_SECONDARY_STORAGE_RDBMS_QUEUESIZE=1000
Schema management
Liquibase (recommended)
Liquibase is the recommended approach for schema management. It is supported for the Orchestration Cluster and automatically applies migrations on startup (when auto-ddl=true, the default).
When Liquibase runs successfully, you'll see this log entry at INFO level:
[INFO] io.camunda.application.commons.rdbms.MyBatisConfiguration - Initializing Liquibase for RDBMS with global table trimmedPrefix ''.
Manual SQL execution
Manual SQL execution is supported as an alternative. When using manual SQL:
- You must strictly adhere to the bundled scripts in the order provided.
- Camunda cannot guarantee future updates will work if you modify scripts.
- This approach is useful when DBAs require strict control over database changes.
Download scripts: Access SQL and Liquibase scripts.