Skip to content

MariaDB

Adding and configuring a MariaDB connection within Qualytics empowers the platform to build a symbolic link with your schema to perform operations like data discovery, visualization, reporting, syncing, profiling, scanning, anomaly surveillance, and more.

This documentation provides a step-by-step guide on how to add MariaDB as both a source and enrichment datastore in Qualytics. It covers the entire process, from initial connection setup to testing and finalizing the configuration.

By following these instructions, enterprises can ensure their MariaDB environment is properly connected with Qualytics, unlocking the platform's potential to help you proactively manage your full data quality lifecycle.

mariadb-connection-form

Let’s get started 🚀

MariaDB Setup Guide

Qualytics connects to MariaDB through the MariaDB JDBC driver. It uses standard JDBC metadata APIs to discover databases, tables, columns, and primary keys. MariaDB uses the same permission model as MySQL: the database name you provide in the connection form is the scope for all operations.

Minimum MariaDB Permissions (Source Datastore)

Permission Purpose
SELECT Read data from all tables for profiling and scanning
SHOW VIEW Read view definitions for metadata discovery
PROCESS View active queries (used by the JDBC driver for connection metadata)

Additional Permissions for Enrichment Datastore

When using MariaDB as an enrichment datastore, the following additional permissions are required for Qualytics to write metadata tables (e.g., _qualytics_*):

Permission Purpose
CREATE Create enrichment tables (_qualytics_*)
ALTER Modify enrichment table schemas during version migrations
INSERT Write anomaly records, scan results, and check metrics
UPDATE Update enrichment records during rescans
DELETE Remove stale enrichment records
DROP Remove enrichment tables if the datastore is unlinked

Example: Source Datastore User (Read-Only)

Replace <database_name> and <password> with your actual values.

-- Create a dedicated read-only user
CREATE USER ‘qualytics_read’@’%’ IDENTIFIED BY ‘<password>’;

-- Grant read access to all tables and views
GRANT SELECT, SHOW VIEW ON <database_name>.* TO ‘qualytics_read’@’%’;

-- Grant the global PROCESS privilege (required by the JDBC driver for connection metadata)
GRANT PROCESS ON *.* TO ‘qualytics_read’@’%’;

-- Apply the changes
FLUSH PRIVILEGES;

Example: Enrichment Datastore User (Read-Write)

-- Create a dedicated read-write user
CREATE USER ‘qualytics_readwrite’@’%’ IDENTIFIED BY ‘<password>’;

-- Grant full data manipulation and table management
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, SHOW VIEW ON <database_name>.* TO ‘qualytics_readwrite’@’%’;

-- Grant the global PROCESS privilege (required by the JDBC driver for connection metadata)
GRANT PROCESS ON *.* TO ‘qualytics_readwrite’@’%’;

-- Apply the changes
FLUSH PRIVILEGES;

Note

Qualytics automatically filters out system databases (information_schema, mysql, performance_schema, sys) during schema discovery. You do not need to restrict access to these databases manually.

Troubleshooting Common Errors

Error Likely Cause Fix
Access denied for user Incorrect username, password, or the user does not have access from the connecting host Verify credentials and ensure the user is created with ’%’ or the specific Qualytics host IP
Host is not allowed to connect The MariaDB server rejects connections from the Qualytics host IP Create the user with ’qualytics_read’@’<qualytics_ip>’ or use ’%’ for any host
SELECT command denied to user The user lacks SELECT on the target database Run GRANT SELECT ON <database_name>.* TO ‘<user>’@’%’
CREATE command denied to user The enrichment user lacks CREATE on the database Run GRANT CREATE ON <database_name>.* TO ‘<user>’@’%’
SSL connection is required The MariaDB server enforces SSL but the connection is not configured for it Enable SSL in the connection parameters or configure the MariaDB user to not require SSL

Detailed Troubleshooting Notes

Authentication Errors

The error Access denied for user indicates that the credentials are incorrect or the user does not have access from the connecting host.

Common causes:

  • Incorrect password: the password does not match the one set for the user.
  • Host restriction: the user was created with a specific host (e.g., 'user'@'localhost') but Qualytics connects from a different IP.
  • User does not exist: the username was misspelled or was never created.

Note

MariaDB differentiates users by both username and host. 'qualytics'@'localhost' and 'qualytics'@'%' are treated as two separate users with potentially different passwords and permissions.

Permission Errors

The error SELECT command denied to user means the user authenticated successfully but lacks the necessary grants on the target database.

Common causes:

  • Missing SELECT grant: the user does not have SELECT on the target database.
  • Wrong database: the user has permissions on a different database than the one specified in the connection form.
  • Grant not flushed: after running GRANT statements, FLUSH PRIVILEGES was not executed.

Connection Errors

The error Host is not allowed to connect means the MariaDB server rejects the connection from the Qualytics host IP.

Common causes:

  • User host restriction: the user was created with 'user'@'localhost' instead of 'user'@'%'.
  • Firewall or network: a firewall is blocking connections on port 3306.
  • Bind address: MariaDB is configured to listen only on 127.0.0.1 (bind-address in my.cnf).

Tip

Start by confirming credentials are valid (authentication errors), then verify database permissions (permission errors), and finally check network connectivity (connection errors).

Add a Source Datastore

A source datastore is a storage location Qualytics connects to so it can profile, scan, and monitor data. Adding MariaDB as a source lets Qualytics query it through the MariaDB JDBC driver and run quality operations on the tables it discovers.

Before you start, review the Minimum MariaDB Permissions the connecting user needs.

Field reference

The Add Datastore page shows the sections below when MariaDB is selected. When reusing an existing connection, the Connection Properties and Secrets Management sections come already filled in and read-only: Qualytics has already validated those credentials, so you fill in only the Datastores Extraction and the Datastore Properties. To change a saved connection's credentials, edit the connection through the Manage Connections page; edits there apply to every datastore that reuses the connection.

Connection Properties

These fields define the MariaDB server Qualytics connects to and the account it connects with. They belong to the connection: when reusing an existing connection, they come already filled in and read-only.

FIELD REQUIRED TYPE DESCRIPTION
Connection Name Text A label for the saved connection (e.g., acme_mariadb_reporting), so other datastores can reuse it later.
Host Text The hostname or address of the MariaDB server.
Port Number The port the MariaDB instance listens on. Defaults to 3306.
User Text The MariaDB account Qualytics connects as.
Password Text The password for that account.

Secrets Management

This group is optional: use it only if you want Qualytics to pull credentials from a secrets manager instead of typing them into the form. Turn on HashiCorp Vault to show the fields below. Despite the label, any secrets manager that exposes a compatible REST API works, not only HashiCorp Vault; see Secrets Management. It also belongs to the connection: read-only when reusing an existing connection.

FIELD REQUIRED TYPE DESCRIPTION
Login URL Text The Vault endpoint Qualytics uses to authenticate (e.g., https://vault.example.com/v1/auth/approle/login).
Credentials Payload Text A JSON body containing the credentials Vault expects (e.g., {"role_id":"...","secret_id":"..."}).
Token JSONPath Text The JSONPath that extracts the client token from Vault's response. Defaults to $.auth.client_token.
Secret URL Text The Vault path where the secret is stored (e.g., https://vault.example.com/v1/secret/data/mariadb).
Token Header Name Text The HTTP header name used to send the token. Defaults to X-Vault-Token.
Data JSONPath Text The JSONPath that extracts the secret payload from Vault's response. Defaults to $.data.

Datastores Extraction

Pick the database or databases Qualytics should read from. You fill these in on both flows.

FIELD REQUIRED TYPE DESCRIPTION
Database Option One or more databases to read from. Each database you pick becomes its own Qualytics datastore. Click the refresh icon to load the ones visible to the account.

No separate schema step

MariaDB treats a database as the schema, so there is no catalog selection before it. Selecting more than one database creates one source datastore per database, named from the Name Template. See Multi-Schema Source Datastore Creation for details.

System databases

The information_schema, mysql, performance_schema, and sys databases are left out of discovery, so they do not appear in the list.

Datastore Properties

Common fields for every source datastore, shown below the Datastores Extraction section. You fill these in on both flows.

FIELD REQUIRED TYPE DESCRIPTION
Name Template Text Defines the naming pattern for each source datastore being created. Use {{schema}} as a placeholder that gets replaced with the actual database name (e.g., maria_{{schema}} becomes maria_sales). Left empty, the datastore is named from the connection name and the database.
Group Option Organizes your datastores under a shared group in the navigation tree. Select an existing group or create a new one with the Add New Group toggle.
Teams Option Select one or more teams to associate with this source datastore.
Initiate Sync Checkbox Automatically sync the datastore to detect containers and fields after creation.

Steps

There are two ways to set up the connection: reuse a connection you already saved (Existing Connection) or create a new one from scratch (New Connection). The tabs below walk through each option; pick the one you want to follow. Each field is described in the Field reference above.

Step 1: Navigate to the Source Datastores page.

Step 2: Click the Add Source Datastore button at the top-right corner.

Step 3: The Add Datastore page opens.

Step 4: Select New Connection next to the Search field.

Step 5: Select MariaDB from the connector grid. Use the search field to filter connectors by name.

Step 6: Fill in the Connection Properties: the Connection Name, Host, Port, User, and Password.

Step 7: Optionally, expand Secrets Management to retrieve credentials from a secrets manager.

Step 8: Fill in the Datastores Extraction fields (Database) and the Datastore Properties.

Step 9: Click Test connection. A success message confirms that the connection has been verified.

Info

The Finish and Next buttons stay disabled until the connection test passes on the current values. If the test fails, see Troubleshooting Common Errors.

Step 10: Click Finish to create the datastore.

Tip

To link an enrichment datastore so Qualytics can store anomalies and metadata from the first operation, click Next instead of Finish. See Add Enrichment Datastore below.

Step 11: A success dialog confirms that your datastore has been added. Click Go to your datastore to open its page.

Step 1: Navigate to the Source Datastores page.

Step 2: Click the Add Source Datastore button at the top-right corner.

Step 3: The Add Datastore page opens.

Step 4: Select Existing Connection next to the Search field.

Step 5: Select the saved MariaDB connection from the grid. Use the search field to filter connections by name. The Connection Properties and Secrets Management sections come already filled in and read-only.

Start a new connection from this one

To use the selected connection as a starting point for a brand-new connection instead, click the Duplicate as a new connection button on the selected connection. The form switches to New Connection mode with the connection's settings already filled in for you to adjust.

Step 6: Fill in the Datastores Extraction fields (Database) and the Datastore Properties. These are the only fields left to fill in.

Step 7: Click Test connection. A success message confirms that the connection has been verified.

Info

The Finish and Next buttons stay disabled until the connection test passes on the current values. If the test fails, see Troubleshooting Common Errors.

Step 8: Click Finish to create the datastore.

Tip

To link an enrichment datastore so Qualytics can store anomalies and metadata from the first operation, click Next instead of Finish. See Add Enrichment Datastore below.

Step 9: A success dialog confirms that your datastore has been added. Click Go to your datastore to open its page.

Add Enrichment Datastore

An enrichment datastore is where Qualytics writes what it finds: anomalies, remediation tables, and record enrichment. MariaDB is supported for this role, so the same instance can hold both the data you monitor and the results.

Field reference

The Enrichment Datastore step shows the sections below when MariaDB is selected. When reusing an existing connection, the Connection Properties and Secrets Management sections come already filled in and read-only.

Connection Properties

These fields define the MariaDB server Qualytics connects to and the account it connects with. They are the same fields as on the source datastore flow, repeated here so this section stands on its own.

FIELD REQUIRED TYPE DESCRIPTION
Connection Name Text A label for the saved connection (e.g., acme_mariadb_enrichment), so other datastores can reuse it later.
Host Text The hostname or address of the MariaDB server.
Port Number The port the MariaDB instance listens on. Defaults to 3306.
User Text The MariaDB account Qualytics connects as.
Password Text The password for that account.

Secrets Management

This group is optional: use it only if you want Qualytics to pull credentials from a secrets manager instead of typing them into the form. Turn on HashiCorp Vault to show the fields below. Despite the label, any secrets manager that exposes a compatible REST API works, not only HashiCorp Vault; see Secrets Management. It also belongs to the connection: read-only when reusing an existing connection.

FIELD REQUIRED TYPE DESCRIPTION
Login URL Text The Vault endpoint Qualytics uses to authenticate (e.g., https://vault.example.com/v1/auth/approle/login).
Credentials Payload Text A JSON body containing the credentials Vault expects (e.g., {"role_id":"...","secret_id":"..."}).
Token JSONPath Text The JSONPath that extracts the client token from Vault's response. Defaults to $.auth.client_token.
Secret URL Text The Vault path where the secret is stored (e.g., https://vault.example.com/v1/secret/data/mariadb).
Token Header Name Text The HTTP header name used to send the token. Defaults to X-Vault-Token.
Data JSONPath Text The JSONPath that extracts the secret payload from Vault's response. Defaults to $.data.

Enrichment Extraction

Where Qualytics writes the enrichment tables.

FIELD REQUIRED TYPE DESCRIPTION
Database Option The database Qualytics writes the enrichment tables into. Pick exactly one, and make sure the account has write access to it.

Warning

The account used for an enrichment datastore needs read and write access, while a source datastore needs only read access.

Enrichment Properties

FIELD REQUIRED TYPE DESCRIPTION
Name Text The name of the new enrichment datastore.
Teams Option Select one or more teams to associate with the enrichment datastore.

Table prefix

Qualytics generates a Prefix from the source datastore's name and adds it to every table it writes, so several source datastores can share one enrichment target without colliding. An information banner at the bottom of the step previews the resulting table names.

Advanced Options

Collapsed by default. Expand it to change how anomalous source records are replicated.

FIELD REQUIRED TYPE DESCRIPTION
Remediation Strategy Choice Controls whether and how anomalous source tables are replicated to the enrichment datastore. None does not replicate them and is the default, Append adds the anomalous records after each scan, and Overwrite keeps only the records from the latest scan.

Steps

A MariaDB enrichment datastore can be created from two places: as the second step of creating a source datastore, or on its own from the Enrichment Datastores page. Either way you choose between creating a connection from scratch (New Connection) or reusing a saved one (Existing Connection). The tabs below cover both entry points for each option; each field is described in the Field reference above.

Linking one that already exists

Both entry points also let you pick an enrichment datastore you created earlier instead of creating one. Nothing there is specific to MariaDB, since you only select it from a list, so see Link Enrichment on Datastore Creation or Link Enrichment Datastore for those flows.

Step 1: Open the Enrichment Datastore form, from either entry point:

  • While creating a source datastore: click Next at the bottom of the Add Datastore page once the source connection test has passed. The Enrichment Datastore step opens.
  • On its own: navigate to the Enrichment Datastores page and click the Add Enrichment Datastore button at the top-right corner. The Enrichment Datastore page opens.

Step 2: Select New Connection next to the Search field.

Step 3: Select MariaDB from the connector grid. Only connectors that can host an enrichment datastore are listed.

Same connector as the source

When you arrive from a MariaDB source datastore, MariaDB comes already selected, with the connection fields already filled in from the source connection. Click the selected card to change it.

Step 4: Fill in the Connection Properties: the Connection Name, Host, Port, User, and Password.

Step 5: Optionally, expand Secrets Management to retrieve credentials from a secrets manager.

Step 6: Fill in the Enrichment Extraction fields (Database) and the Enrichment Properties (Name and Teams).

Step 7: When you arrived from a source datastore, review the Prefix preview at the bottom of the step and, if needed, change the Remediation Strategy under Advanced Options. Both relate to the source datastore being linked, so they do not apply when creating the enrichment datastore on its own.

Step 8: Click Test connection. A success message confirms that the connection has been verified.

Info

The button that completes the step stays disabled until the required fields are filled in and the connection test passes on the current values. If the test fails, see Troubleshooting Common Errors.

Step 9: Complete the step: click Finish when you arrived from a source datastore, which creates both datastores and links them, or Create when creating the enrichment datastore on its own.

Step 10: A success dialog confirms the result. Click Go to your datastore to open the source datastore, or Go to your enrichment datastore when you created it on its own.

This option appears only when at least one saved connection can host an enrichment datastore.

Step 1: Open the Enrichment Datastore form, from either entry point:

  • While creating a source datastore: click Next at the bottom of the Add Datastore page once the source connection test has passed. The Enrichment Datastore step opens.
  • On its own: navigate to the Enrichment Datastores page and click the Add Enrichment Datastore button at the top-right corner. The Enrichment Datastore page opens.

Step 2: Select Existing Connection next to the Search field.

Step 3: Select the saved MariaDB connection from the grid. The Connection Properties and Secrets Management sections come already filled in and read-only.

Start a new connection from this one

To use the selected connection as a starting point for a brand-new connection instead, click the Duplicate as a new connection button on the selected connection.

Step 4: Fill in the Enrichment Extraction fields (Database) and the Enrichment Properties (Name and Teams).

Step 5: When you arrived from a source datastore, review the Prefix preview at the bottom of the step and, if needed, change the Remediation Strategy under Advanced Options. Both relate to the source datastore being linked, so they do not apply when creating the enrichment datastore on its own.

Step 6: Click Test connection. A success message confirms that the connection has been verified.

Info

The button that completes the step stays disabled until the required fields are filled in and the connection test passes on the current values. If the test fails, see Troubleshooting Common Errors.

Step 7: Complete the step: click Finish when you arrived from a source datastore, which creates both datastores and links them, or Create when creating the enrichment datastore on its own.

Step 8: A success dialog confirms the result. Click Go to your datastore to open the source datastore, or Go to your enrichment datastore when you created it on its own.

API Payload Examples

Creating a Datastore

This section provides a sample payload for creating a datastore. Replace the placeholder values with actual data relevant to your setup.

Endpoint (Post)

/api/datastores (post)

    {
        "name": "your_datastore_name",
        "teams": ["Public"],
        "database": "mariadb_database",
        "enrichment_only": false,
        "trigger_sync": true,
        "connection": {
            "name": "your_connection_name",
            "type": "mariadb",
            "host": "mariadb_host",
            "port": 3306,
            "username": "mariadb_username",
            "password": "mariadb_password"
        }
    }
    {
        "name": "your_datastore_name",
        "teams": ["Public"],
        "database": "mariadb_database",
        "enrichment_only": false,
        "trigger_sync": true,
        "connection_id": 123
    }
# Step 1: Create a Connection
qualytics connections create \
    --type mariadb \
    --name "your_connection_name" \
    --host ${DB_HOST} \
    --port 3306 \
    --username ${DB_USER} \
    --password ${DB_PASSWORD}

# Step 2: Create a Source Datastore
qualytics datastores create \
    --name "your_datastore_name" \
    --connection-name "your_connection_name" \
    --database your_database \
    --schema your_database

Creating an Enrichment Datastore

Endpoint (Post)

/api/datastores (post)

This section provides a sample payload for creating an enrichment datastore. Replace the placeholder values with actual data relevant to your setup.

    {
        "name": "your_datastore_name",
        "teams": ["Public"],
        "database": "mariadb_database",
        "enrichment_only": true,
        "connection": {
            "name": "your_connection_name",
            "type": "mariadb",
            "host": "mariadb_host",
            "port": 3306,
            "username": "mariadb_username",
            "password": "mariadb_password"
        }
    }
    {
        "name": "your_datastore_name",
        "teams": ["Public"],
        "database": "mariadb_database",
        "enrichment_only": true,
        "connection_id": 123
    }
# Step 1: Create a Connection
qualytics connections create \
    --type mariadb \
    --name "your_connection_name" \
    --host ${DB_HOST} \
    --port 3306 \
    --username ${DB_USER} \
    --password ${DB_PASSWORD}

# Step 2: Create an Enrichment Datastore
qualytics datastores create \
    --name "your_datastore_name" \
    --connection-name "your_connection_name" \
    --database your_enrichment_database \
    --schema your_enrichment_database \
    --enrichment-only

Linking Datastore to an Enrichment Datastore through API

Endpoint (Patch)

/api/datastores/{datastore-id}/enrichment/{enrichment-id} (patch)