arrow-left

Only this pageAll pages
gitbookPowered by GitBook
triangle-exclamation
Couldn't generate the PDF for 114 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Tools

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Administration

Hub page covering deployment, user management, backup and restore, hostname changes, and security in Enterprise Manager.

Usage

Hub page detailing how to use Enterprise Manager's core features, specifically Monitoring and the Workspace.

Dashboards

Hub page for MariaDB Enterprise Manager's pre-packaged Grafana dashboards, which provide deep visibility into server health, database topologies, and system performance.

Monitoring

Covers the monitoring capabilities including the built-in Grafana dashboards, metrics tracking, and predefined alert rules for the database fleet.

Architecture Overview

Explains the client/server architecture, central components (Supermax, Grafana, Prometheus), and local agents (OpenTelemetry, exporters).

MariaDB Enterprise Manager is a client/server application for monitoring and managing MariaDB deployments. It provides topology-aware monitoring, visual schema management, and query editing across multiple database connections.

The architecture consists of two primary components: a central Enterprise Manager Server that aggregates data and hosts the user interface, and an Enterprise Manager Agent that is deployed on each monitored host.

hashtag
Enterprise Manager Server

The Enterprise Manager Server runs on a dedicated host and acts as the central command center. It is delivered as a suite of Docker containers managed by Docker Compose.

The core components are the following:

Component
Description

hashtag
Enterprise Manager Agent

The Enterprise Manager Agent is installed on each MariaDB Server and MaxScale host that you want to monitor. Its job is to collect data and forward it to the central server.

These components are installed via the mema-agent package (RPM or DEB) and include:

  • Prometheus Exporters: These are the primary data gatherers.

    • Node Exporter: Collects system-level metrics (CPU, RAM, disk usage).

    • Mysqld Exporter: Collects detailed metrics from the MariaDB database itself.

hashtag
Networking Requirements

For the system to function correctly, the following firewall ports must be open on the Enterprise Manager Server host:

  • 8090 (HTTP/S): The main entry point for the web UI. Nginx listens on this port and proxies requests to Supermax and Grafana.

  • 4318 (HTTP/S): Agents on monitored nodes push telemetry data to this port.

This page is: Copyright © 2025 MariaDB. All rights reserved.

Deployment

Guidelines and instructions for deploying MariaDB Enterprise Manager, including network and firewall requirements for successful installation.

This section provides an overview of the deployment process for MariaDB Enterprise Manager, covering installation and upgrades for both the central server and the monitoring agents.

MariaDB Enterprise Manager is designed for a streamlined deployment experience. You can launch the main server with a single-line command for a quick start, and a UI-integrated helper tool simplifies the process of installing and registering agents on your monitored databases.

hashtag
Installing the Enterprise Manager Server

SSO to MaxScale (Single Sign-On)

Instructions for configuring Single Sign-On (SSO) integration to seamlessly access the MaxScale GUI directly from MariaDB Enterprise Manager.

For topologies managed by MaxScale, you can seamlessly access the MaxScale GUI directly from Enterprise Manager using Single Sign-On.SSO to MaxScale requires MaxScale 25.10.0 or higher.1

1

hashtag
Accessing the MaxScale GUI

Tools

This space includes documentation for clients, utilities, and applications, including AI-focused ones, designed to help you manage, monitor, back up, and interact with your MariaDB Server deployment.

hashtag
MariaDB Enterprise Manager

MariaDB Enterprise Manager is a comprehensive observability and management solution designed for your entire database fleet. It provides advanced, topology-aware monitoring and a powerful suite of visual tools for query development and schema management, all from a single, centralized interface.

MariaDB Enterprise Kubernetes Operator

MariaDB Enterprise Kubernetes Operator automates provisioning, scaling, backups, and high availability, making cloud-native database operations efficient and reliable.

Installation

Detailed guide on installing the MariaDB Enterprise Kubernetes Operator using Helm charts or manual manifests within a Kubernetes environment.

Backup and Restore

Procedures for configuring automated and on-demand backups using MariaDB Enterprise Backup, including restoration steps to recover data.

Topologies

Explains supported deployment patterns such as standalone instances, Primary/Replica replication, and Galera Cluster configurations for high availability.

MariaDB Enterprise MCP Server

Plugins

Overview of available plugins and extensions that can be used to enhance the functionality of the MariaDB Enterprise Kubernetes Operator.

Migrations

Learn about migrations with MariaDB Enterprise Kubernetes Operator. This section covers strategies and procedures for smoothly migrating your MariaDB databases within Kubernetes environments.

Specific guidance on migrating database instances into the multi-tenancy Catalog structure within a Kubernetes environment.

Example

hashtag

hashtag
MariaDB Enterprise Operator

MariaDB Enterprise Operator provides a seamless way to run and operate containerized versions of MariaDB Enterprise Server and MaxScale on Kubernetes, allowing you to leverage Kubernetes orchestration and automation capabilities. This document outlines the features and advantages of using Kubernetes and the MariaDB Enterprise Operator to streamline the deployment and management of MariaDB and MaxScale instances.

hashtag
MariaDB Enterprise MCP Server

MariaDB Enterprise MCP (Model Context Protocol) Server is a secure, enterprise-grade application designed to act as the primary interface between AI assistants and MariaDB data ecosystems. This product solves a key challenge: how to allow powerful AI agents to safely and efficiently leverage an organization's most valuable asset—its data.

hashtag
MariaDB AI RAG

MariaDB AI RAG is an enterprise-grade Retrieval-Augmented Generation (RAG) solution that integrates with MariaDB to provide AI-powered document processing, semantic search, and natural language generation capabilities.

MariaDB Enterprise Managerchevron-right
MariaDB Enterprise Kubernetes Operatorchevron-right
MariaDB Enterprise MCP Serverchevron-right
MariaDB AI RAGchevron-right

OpenTelemetry Collector: This local collector pulls data from the Prometheus exporters and pushes it to the central collector on the Enterprise Manager Server.

  • mema-agent CLI: A setup utility used to register the host with the Enterprise Manager Server and configure the local agent services.

  • Supermax

    The primary backend application that serves the main web UI for management, server registration, and configuration.

    Grafana

    Provides powerful, pre-built dashboards for visualizing time-series performance metrics.

    Prometheus

    The time-series database that ingests and stores all monitoring data collected from the agents.

    OpenTelemetry Collector

    The central endpoint that receives telemetry data (metrics, logs, traces) from all agents.

    Nginx

    A web server that acts as a reverse proxy, directing browser traffic to the appropriate service (Supermax or Grafana).

    The Enterprise Manager Server is a Docker-based application installed on a dedicated host. The installation is handled by the installer script, which pulls the necessary container images and starts the application.

    As a first step review the hardware, system, and network requirements:

    • Hardware and System Requirements

    • Network and Firewall Requirements

    After confirming your hardware, system, and network are compliant, proceed with the installation instructions: Installing MariaDB Enterprise Manager

    hashtag
    Installing Enterprise Manager Agents

    To monitor a MariaDB Server and MaxScale host, install agent on it. Then, use the Enterprise Manager UI to add the database topology and generate the agent setup command. This command includes the correct metric labels for that host.

    hashtag
    Quick start

    circle-info

    You can quickly set up and launch MariaDB Enterprise Manager with a single-line command. This allows you to start exploring its capabilities without extensive configuration.

    Enterprise Manager includes a helper tool, integrated in the UI, for adding agents. The helper prompts you to download a small (< 50M) binary and then provides command-line instructions to install and register agents, enabling quick and seamless addition of new MariaDB databases to Enterprise Manager.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Click the three-dot menu (⋮) next to a MaxScale node.

  • Select "Manage MaxScale".

  • 2

    hashtag
    Configuring SSO in maxscale.cnf

    To enable SSO, add the following parameters to your MaxScale configuration file (maxscale.cnf) on the MaxScale host:

    Parameter
    Description

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Add Multiple MaxScale Monitors

    Explains how to monitor multiple logical databases or clusters managed by a single MaxScale deployment by adding or changing specific MaxScale monitors in the UI.

    MariaDB Enterprise Manager allows you to monitor multiple logical databases or clusters that are managed by the same set of high-availability MaxScale instances. After adding your first MaxScale instance, you can easily add more monitors to track different services without re-entering the connection details.

    circle-info

    Default Monitor Behavior

    If you add a database from a MaxScale setup that has multiple monitors and do not explicitly select one, Enterprise Manager will automatically assign the first available monitor by default. To ensure you are tracking the correct service, it's best to specify the monitor manually.

    hashtag
    Adding an Additional Monitor

    Follow these steps to add another logical database that is monitored by the same MaxScale deployment.

    1

    hashtag
    Add a new monitored logical database

    1. Navigate to your main database inventory page.

    hashtag
    Changing the Monitor for an Existing Database

    If you need to change which MaxScale monitor an existing logical database is tracking, follow these steps.

    1

    hashtag
    Open the database edit menu

    1. Navigate to your main database inventory page and locate the logical database you wish to edit.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Installing MariaDB Enterprise Manager

    Step-by-step instructions for deploying the Docker-based Enterprise Manager Server, including standard online setups and air-gapped installation procedures.

    circle-info

    Prerequisites

    • Prepare a machine for Enterprise Manager installation that complies with Hardware and System Requirements

    • Make sure that you have required network ports opened:

    • Obtain MariaDB Customer Download Token

      • Navigate to the

      • Log in using your

    • Set up MariaDB Enterprise Repository - MariaDB Enterprise Tools for each monitored MariaDB Server and MaxScale

      • https://mariadb.com/docs/server/server-management/install-and-upgrade-mariadb/installing-mariadb/binary-packages/mariadb-package-repository-setup-and-usage

    hashtag
    Standard Installation

    1

    Log in to Docker registry

    Login to the MariaDB Enterprise Docker Registry providing your as a username and Customer Download Token as a password:

    2

    Download the installation script

    Insert your Customer Download Token into the download URL and download the installation script:

    The installer generates a self-signed TLS certificate for Enterprise Manager. To change the certificate, follow instructions at .

    To modify metrics retention time, see .

    hashtag
    Enterprise Manager Server Air-Gapped Installation

    Installing Enterprise Manager to a machine without an Internet connection is possible by manually copying the Docker images and related settings from an Internet-connected machine to the final target machine.

    Follow these steps:

    1

    Install on an Internet-connected machine

    First, install Enterprise Manager on an Internet-connected machine as explained in the normal installation section. When the installation script asks for the address and port that Enterprise Manager should listen at for incoming connections, enter the values for the final target machine.

    2

    Save images and settings

    Once installation is complete, save all related Docker images and settings by running the following commands from the directory that contains the

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Change Hostname or IP Address

    Steps for safely modifying the hostname or IP address of the Enterprise Manager server and ensuring all monitored agents remain connected.

    To set the hostname or IP address for an existing MariaDB Enterprise Management instance, follow these instructions. Changing the hostname or IP address is useful if your server's IP changed or if you need to switch from an IP address to a public DNS name.

    1

    hashtag
    Connect to your server

    SSH into the server where your Enterprise Manager is running:

    2

    hashtag
    Navigate to the directory

    Change into the enterprise-manager directory, where your Docker Compose files are located:

    3

    hashtag
    Edit the .env file

    Open the environment file with a text editor (for example nano):

    Find the line that begins with MEMA_HOSTNAME=

    4

    hashtag
    Save the file

    Save the file and exit the editor.

    5

    hashtag
    Restart the services

    Restart the MEM services so the new environment variable takes effect. The --force-recreate flag ensures the containers are rebuilt using the updated environment variables:

    After the restart, your Enterprise Manager will be accessible at the new hostname or IP address.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Backup & Restore of Enterprise Manager

    Procedures for backing up the Enterprise Manager configurations and metrics data, as well as steps for restoring the system in case of failure.

    Note: This is about backing up the data, configuration and collected metrics of the Enterprise Manager (EM), not the databases.

    hashtag
    Backing up Enterprise Manager Server

    1

    Stop the Enterprise Manager

    1. Go to the Enterprise Manager installation directory

    2. Run docker compose stop to stop the Enterprise Manager

    2

    Create a directory for backups

    3

    Take a backup of all the volumes

    The backups directory now contains the data from the Enterprise Manager.

    4

    Start the Enterprise Manager

    1. Go to the Enterprise Manager installation directory

    2. Run docker compose up -d to start the Enterprise Manager

    hashtag
    Restoring Enterprise Manager Server

    1

    Stop the Enterprise Manager

    1. Go to the Enterprise Manager installation directory

    2. Run docker compose stop to stop the Enterprise Manager

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Service Management

    MariaDB AI RAG runs as a web service using Uvicorn/FastAPI. You can manage the service using standard system commands.

    hashtag
    Starting the Service

    # Start the service using the executable directly
    ./databridge

    hashtag
    Viewing Logs

    Logs are stored in the logs directory within the installation path:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Usage Examples

    hashtag
    Standard SQL Query

    { "tool": "execute_sql", "parameters": { "database_name": "test_db", "sql_query": "SELECT * FROM users WHERE id = %s", "parameters": [123] } }

    hashtag
    Create Vector Store


    hashtag
    Insert Documents into Vector Store

    hashtag
    Semantic Search

    hashtag
    RAG Generation

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    MariaDB Enterprise Manager

    Overview of MariaDB Enterprise Manager, a centralized observability and management solution offering topology-aware monitoring, visual schema management, and query editing via an integrated workspace.

    MariaDB Enterprise Manager is a comprehensive observability and management solution designed for your entire database fleet. It provides advanced, topology-aware monitoring and a powerful suite of visual tools for query development and schema management, all from a single, centralized interface.

    At its core, Enterprise Manager uses lightweight agents to collect deep telemetry from your standalone databases, replicated topologies, and MaxScale clusters via the OpenTelemetry standard. This foundation powers the integrated Grafana dashboards, which come pre-packaged with production-ready visualizations and alerts. Beyond monitoring, the Workspace provides a shared environment for developers and DBAs with an advanced Query Editor and a visual ERD Designer. The entire system is secured with role-based access control, audit logging, and can integrate with your corporate identity provider (OIDC) for single sign-on.

    hashtag
    Key Capabilities at a Glance

    hashtag
    Advanced Monitoring

    Leverage the power of a built-in Grafana instance, complete with pre-packaged dashboards and production-ready alerts. The platform provides the flexibility to create custom , define , and route notifications to a wide range of destinations.

    hashtag
    Integration with Other Observability Solutions

    Built on open standards, Enterprise Manager uses OpenTelemetry for metrics collection. Its integrated Prometheus time-series database exposes a query API, allowing you to seamlessly export metrics and integrate with your existing observability stack.

    hashtag
    Centralized Management

    Gain a topology-based, centralized view of your entire database fleet. Enterprise Manager discovers and visualizes your replication and clustering setups, providing the ability to drill down into a specific through a seamless single sign-on (SSO) experience.

    hashtag
    Workspace

    The Workspace provides a powerful suite of tools for developers and DBAs. It features a rich for running and debugging SQL and a visual for schema management and modeling across multiple database connections.

    hashtag
    Enterprise Security

    Secure your management layer with robust security features. Authenticate users with your corporate , enforce granular permissions with , and maintain compliance with a comprehensive audit log for all administrative actions.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Agent Installation

    Instructions for installing the mema-agent application using native OS package managers, including prerequisite steps for creating a local monitor user in MariaDB.

    circle-exclamation

    To install mema-agent, you need to set up .

    The mema-agent is a small application that must be installed on every server you wish to monitor with MariaDB Enterprise Manager, including MariaDB Server nodes and MaxScale nodes.

    This guide covers the recommended installation method using a package manager.

    Network and Firewall Requirements

    Outlines the necessary network ports and firewall configurations (such as ports 8090 and 4318) required for UI access and agent telemetry data collection.

    circle-exclamation

    It's recommended to run MariaDB Enterprise Manager on an internal, secured network. Direct public exposure is not recommended.

    Before installing MariaDB Enterprise Manager, ensure that your firewall and network rules allow traffic on all required ports. Proper connectivity is essential for the system to function correctly.

    The following table details the necessary ports and their purposes.

    SMTP Server Configuration

    Instructions for configuring SMTP credentials and server details in the environment file to enable email alerts from the integrated alerting engine.

    This page explains how to configure email alerting for MariaDB Enterprise Manager using Grafana's integrated alerting engine. Configure SMTP credentials and server details in the main environment file so Enterprise Manager can send alert notifications via email.

    This is an advanced draft.

    1

    hashtag

    Alerts and Notifications

    Overview of the integrated Grafana-based alerting engine used to detect critical conditions and dispatch notifications to various destinations.

    MariaDB Enterprise Manager provides a powerful and flexible alerting system, built on the capabilities of the integrated Grafana Alerting engine. It allows you to proactively monitor your entire database fleet, define custom rules for potential issues, and receive notifications through various channels to ensure you can respond quickly.

    hashtag
    How It Works: The Alerting Flow

    The alerting process in MariaDB Enterprise Manager follows a clear, four-step flow from detection to notification.

    25.08 version update guide

    This guide illustrates, step by step, how to update to 25.8.0 from previous versions.

    • Uninstall you current mariadb-enterprise-operator for preventing conflicts:

    Alternatively, you may only downscale and delete the webhook configurations:

    Suspend Reconciliation

    Instructions on how to temporarily pause the Operator's automated management of a specific resource for maintenance or troubleshooting.

    hashtag
    Suspended state

    When a resource is suspended, all operations performed by the operator are disabled, including but not limited to:

    • Provisioning

    26.03 version update guide

    This guide illustrates, step by step, how to update to 26.3.1 from previous versions. This guide only applies if you are updating from a version prior to 26.3.x, otherwise you may upgrade directly (see and docs)

    • The must be updated to the 26.3.1 version. You must set updateStrategy.autoUpdateDataPlane=true in your MariaDB resources before updating the operator. Then, once updated, the operator will also be updating the data-plane based on its version:

    Overview

    circle-check

    "Model Context Protocol" (MCP) is a standard or interface designed to bridge the gap between AI development tools (like copilots in your code editor) and your project's specific environment.

    In simple terms, it's a way for an AI to understand the context of what you're working on.

    The MariaDB Enterprise MCP (Model Context Protocol) Server is a secure, enterprise-grade application designed to act as the primary interface between AI assistants and MariaDB data ecosystems. This product solves a key challenge: how to allow powerful AI agents to safely and efficiently leverage an organization's most valuable asset—its data.

    Supported Docker Images

    The following is a list of images that have plugins installed and available to use.

    circle-info

    Even though these images have plugins installed, that doesn't necessarily mean that they are enabled by default. You may need to install them. The recommended operator native way to do so is to use:

    Each supported plugin will have a section on how to install it.

    Component
    Image

    Token Management

    Token management is a critical part of the system's security, handled primarily by the RAG API.

    hashtag
    Token Generation

    The process involves two main steps:

    Migrate Embedded MaxScale To MaxScale Resource

    In this guide, we will be migrating a MaxScale embedded in a MariaDB resource to it's own resource.

    circle-info

    Note that if you've been using the embedded maxScale property, the operator will already have created a MaxScale resource to go along with it.

    Examples Catalog

    A collection of YAML manifests and configuration examples for various common deployment scenarios and resource management tasks.

    The contains a number of sample manifests that aim to show the operator functionality in a practical way. Follow these instructions for getting started:

    • Download the :

    • Install the configuration shared by all the examples:

    { "tool": "create_vector_store", "parameters": { "database_name": "test_db", "vector_store_name": "my_vectors", "model_name": "text-embedding-3-small", "distance_function": "cosine" } }

    Locate the existing logical database that is associated with your MaxScale deployment.

  • Click the three-dot menu icon (⋮) on the right side of the database entry to open the context menu and select Add Monitor.

  • 2

    hashtag
    Configure the new monitor

    1. In the dialog box that appears, provide a new Logical Database Name and select the specific MaxScale Monitor you wish to track from the dropdown list.

    2. Click the Confirm button to add the new monitored database.

    Click the three-dot menu icon (⋮) on the right side of the database entry.

  • Select the Edit option from the menu.\

  • 2

    hashtag
    Select a different monitor

    1. In the configuration window, scroll down to the Advanced section.

    2. From the Monitor name dropdown, select the new MaxScale monitor you want this logical database to track.\

    3. Click the Confirm button to save your changes.

    Copy the Customer Download Token to use as the password when logging in to the MariaDB Enterprise Docker Registry
    3

    Make the installer executable

    4

    Run the installer

    Install Enterprise Manager by running the script:

    The script prompts you to enter IP address and port number on which Enterprise Manager should listen to for incoming connections. Verify the auto-detected value and correct it if it's wrong.

    circle-info

    This address and port must be reachable from all monitored MariaDB Server and MaxScale hosts.

    After you provide the details, the script launches Enterprise Manager.

    5

    Verify containers

    Run docker compose ps in the enterprise-manager directory to check that all of the constituent Docker containers are running. The containers are:

    • enterprise-manager-grafana

    • enterprise-manager-nginx

    • enterprise-manager-otelcol

    • enterprise-manager-prometheus

    • enterprise-manager-supermax

    6

    Access the UI

    Access Enterprise Manager UI at:

    https://<Enterprise_Manager_IP>:8090

    At the login screen, use the default username admin and the generated password displayed after the installation script finishes.

    enterprise-manager
    folder:

    The resulting archive enterprise-manager.tar.gz contains all components of Enterprise Manager.

    3

    Transfer archive to target machine

    Copy enterprise-manager.tar.gz to the target (air-gapped) machine into the directory under which you want to install Enterprise Manager.

    4

    Extract and load images on target machine

    On the target machine, extract the archive and load the Docker images:

    5

    Start Enterprise Manager

    Start Enterprise Manager with:

    Network and Firewall Requirements
    Customer Download Token at the MariaDB Customer Portalarrow-up-right
    MariaDB IDarrow-up-right
    MariaDB IDarrow-up-right
    Security in Enterprise Manager
    Metrics retention configuration
    and update it with the new hostname or IP address. Example:
    2

    Restore the backup of all volumes

    The backups are stored in the ~/backups/ directory.

    3

    Start the Enterprise Manager

    1. Go to the Enterprise Manager installation directory

    2. Run docker compose up -d to start the Enterprise Manager

    hashtag
    Prerequisite: Create the Local Monitor User

    Before installing the agent on a MariaDB Server host, you must create a local user that the agent will use to connect to the database and collect metrics.

    Log in to your MariaDB Server and run the following:

    Replace <password> with a secure password. You will need these credentials later when linking the agent in the Enterprise Manager UI.

    hashtag
    Installation via Package Manager (Recommended)

    This method uses your OS's native package manager (dnf, apt, zypper) to install the agent from the MariaDB Enterprise repository.

    hashtag
    Step 1: Configure the MariaDB Enterprise Repository

    If you haven't already configured the MariaDB Enterprise repository on the server, follow these steps.

    1

    hashtag
    Get your Customer Download Token

    • Navigate to the MariaDB Customer Portalarrow-up-right and log in.

    • Copy your Customer Download Token. You will need this for the script.

    2

    hashtag
    Download the repository setup script

    In your server's terminal, download the official setup script:

    3

    hashtag
    Run the script

    Make the script executable, then run it with your download token:

    Replace YOUR_TOKEN_HERE with the token you copied from the Customer Portal.

    hashtag
    Step 2: Install the Agent Package

    Once the repository is configured, use your system's package manager to install the agent.

    The agent is now installed and running as a service.

    hashtag
    Next Steps: Linking the Agent 🔗

    After the agent is installed, it is running but not yet configured or linked to your MariaDB Enterprise Manager server.

    The final step is to link the agent, which is done from the Enterprise Manager UI. Please refer to the "Adding Databases to MariaDB Enterprise Manager" guide for the specific steps to generate the linking command.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Service/Component
    Port
    Protocol
    Traffic Direction
    Purpose

    Enterprise Manager Server

    8090

    HTTP/S

    Inbound

    User Access: Allows users to access the Enterprise Manager UI.

    Enterprise Manager Server

    4318

    HTTP/S

    Inbound

    Agent Metrics: Receives metrics data pushed from the Enterprise Manager Agents.

    Enterprise Manager Agent

    4318

    HTTP/S

    Outbound

    Agent Metrics: Pushes metrics data to the Enterprise Manager Server.

    circle-info

    All ports listed are TCP. Ensure your firewall rules explicitly allow TCP traffic for the specified ports.

    hashtag
    Summary of Required Firewall Rules

    For the current version of MariaDB Enterprise Manager, ensure the following rules are in place:

    • From user workstations, allow traffic to the Enterprise Manager Server on TCP port 8090.

    • From agent hosts, allow traffic to the Enterprise Manager Server on TCP port 4318.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Edit the environment file
    1. Navigate to your MariaDB Enterprise Manager installation directory:

    1. Open the .env file in a text editor (example uses nano):

    1. Add the following block of variables to the file, filling in values for your SMTP server:

    1. Save the file and exit the editor.

    2

    hashtag
    Restart the Grafana service

    The new settings are applied only after Grafana restarts.

    From the enterprise-manager/ directory, restart only the Grafana container so other Enterprise Manager components are not affected:

    3

    hashtag
    Verify the configuration in Grafana

    After Grafana restarts:

    1. Open the Grafana UI.

    2. Create a new "Contact point".

    3. Use the "Test" button to send a test email and confirm that SMTP settings are correct and Enterprise Manager can send alerts.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    1

    hashtag
    Alert Rule is Defined

    An alert rule contains a query (what to measure, e.g., disk usage), a condition (the threshold, e.g., > 90%), and labels for routing (e.g., type = server disk).

    2

    hashtag
    Instances are Evaluated

    Grafana periodically runs the query against your monitored targets. It creates an Alert Instance for each distinct entity (e.g., one for Server 01, one for Server 02, etc.).

    3

    hashtag
    An Instance "Fires"

    If the condition is met for a specific instance (e.g., Server 01's disk usage is over 90%), that instance enters a "firing" state.

    4

    hashtag
    Notifications are Sent

    The firing alert is routed through a Notification Policy. The policy matches the alert's labels (e.g., type = server disk) and sends a notification to the configured Contact Point (such as Email, Slack, or PagerDuty).

    hashtag
    Key Alerting Concepts

    To configure alerting effectively, it's helpful to understand these core concepts from Grafana:

    Term
    Description

    Alert Rules

    The combination of a data query and a threshold condition defining what to measure and when it's a problem.

    Alert Instances

    Generated from an alert rule for each monitored entity, showing individual statuses.

    Contact Points

    Destinations for notifications, such as email, Slack, PagerDuty, or webhooks.

    Notification Policies

    Uses labels to route alerts to contact points, facilitating team-specific alerting.

    Silences and Mute Timings

    Allow temporary notification pauses without halting alerts. Silences cover single events, like maintenance, while Mute Timings are for recurring periods, such as at night or weekends.

    circle-info

    For a deep dive into advanced topics like custom message templating, alert grouping, and more complex routing, see the official Grafana documentationarrow-up-right.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Upgrade mariadb-enterprise-operator-crds to 25.8.0:
    • The Galera data-plane must be updated to the 25.8.0 version.

    If you want the operator to automatically update the data-plane (i.e. init and agent containers), you can set updateStrategy.autoUpdateDataPlane=true in your MariaDB resources:

    Alternatively, you can also do this manually:

    • Upgrade mariadb-enterprise-operator to 25.8.0:

    • If you previously decided to downscale the operator, make sure you upscale it back:

    • If you previously set updateStratety.autoUpdateDataPlane=true, you may consider reverting the changes once the upgrades have finished:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    helm uninstall mariadb-enterprise-operator

    Upgrades

  • Volume resize

  • Galera cluster recovery

  • More specifically, the reconciliation loop of the operator is omitted, anything part of it will not happen while the resource is suspended. This could be useful in maintenance scenarios, where manual operations need to be performed, as it helps prevent conflicts with the operator.

    hashtag
    Suspend a resource

    Currently, only MariaDB and MaxScale resources support suspension. You can enable it by setting suspend=true:

    This results in the reconciliation loop being disabled and the status being marked as Suspended:

    To re-enable it, simply remove the suspend setting or set it to suspend=false.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    • MaxScale embedded definition inside the MariaDB has been deprecated, please refer to the migration guide.arrow-up-right to perform the migration.

    • At this point, you may proceed to update the operator. If you are using Helm:

    Upgrade the mariadb-enterprise-operator-crds helm chart to 26.3.1:

    Upgrade the mariadb-enterprise-operator helm chart to 26.3.1:

    • If you are on OpenShift:

    If you are on the stable channel using installPlanApproval=Automatic in your Subscription object, then the operator will be automatically updated. If you use installPlanApproval=Manual, you should have a new InstallPlan which needs to be approved to update the operator:

    • Consider reverting updateStrategy.autoUpdateDataPlane back to false in your MariaDB object to avoid unexpected updates:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Helmarrow-up-right
    OpenShiftarrow-up-right
    data-plane
    It achieves this by providing a single, hardened endpoint that offers not only standard database operations but also advanced AI workflow orchestration and integration with industry-standard authentication systems.

    hashtag
    What is a Model Context Protocol (MCP) Server?

    MCP provides a standardized, model-agnostic way for language models and other AI systems to interact with external tools and data sources. The MCP Server implements this protocol, ensuring a consistent and reliable method for AI applications to request information and perform operations. This streamlined communication layer accelerates the development and deployment of AI-integrated systems.

    hashtag
    The Value of an MCP Server for Databases

    Connecting AI directly to a production database is both risky and inefficient. An MCP server provides a critical abstraction layer that delivers three key benefits:

    1. Security and Governance: It acts as a single, hardened chokepoint for all AI-driven data interactions. Instead of embedding credentials across numerous applications, the MCP Server manages access centrally, enabling robust auditing, permission enforcement, and integration with enterprise secret managers.

    2. Abstraction and Simplicity: Developers building AI applications do not need to be database experts. They can interact with a simple, well-defined set of tools (e.g., list_tables, execute_sql) without writing complex connection logic or security checks, dramatically accelerating development cycles.

    3. Standardization and Interoperability: By adhering to the MCP standard, your data infrastructure can seamlessly connect with a growing ecosystem of AI assistants and development frameworks—such as Cursor, Windsurf, and VSCode plugins—without requiring bespoke integrations for each one.

    hashtag
    The Objective of an MCP Server

    The primary goal of the MariaDB Enterprise MCP Server is to enable the secure and scalable deployment of AI agents within enterprise environments.

    Key objectives include:

    • Enhance Security and Compliance: Integrate with centralized secret management platforms like HashiCorp Vault and 1Password to eliminate static credentials and meet stringent enterprise security policies.

    • Streamline Complex AI Workflows: Provide a unified endpoint for orchestrating multi-step RAG (Retrieval-Augmented Generation) pipelines, from data ingestion to final response generation.

    • Improve Manageability: Offer a robust, configurable, and observable server that can be reliably deployed and managed by platform engineering and DBA teams.

    • Accelerate AI Application Development: Provide a standardized protocol that simplifies how developers connect AI agents to MariaDB data.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Supported Tags
    CPU Architecture

    MariaDB Enterprise Server (ppc64le support)

    docker.mariadb.com/enterprise-server

    11.8.5-2 11.8.3-1 11.4.8-5 11.4.7-4.3 11.4.7-4.2 11.4.7-4.1 11.4 10.6.23-19 10.6.22-18.1 10.6

    amd64 arm64 ppc64le

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      # ....
      myCnf: |
        [mariadb]
        plugin_load_add = auth_pam # Load auth plugin
      # ....
    hashtag
    Step 1: User Registration

    hashtag
    Step 2: User Login & Token Generation

    hashtag
    Token Usage

    Once a client has a JWT, it includes it in the Authorization header of every request to the MCP Server. The server then validates the token before processing the request.

    hashtag
    Key Security Measures

    • Signature Verification: Prevents token tampering.

    • Expiration Check: Tokens have a limited lifetime (e.g., 30 minutes).

    • Database Validation: Ensures the user associated with the token still exists and is active.

    • Issuer/Audience Validation: Prevents a token from one system from being used on another.

    • Not-Before Check: Prevents a token from being used before it is valid

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    1. Get the migration scriptarrow-up-right and grant execute permissions:

    2. Migrate all of your existing MariaDB resources where MaxScale is embedded.

    This will have created new <migrated.mariadb_manifest.yaml> manifests.

    3. Inspect the newly created manifests and overwrite the source manifests if satisfied with the changes.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
    +  maxScaleRef:
    +     name: mariadb-maxscale
    -  # Provision a MaxScale instance and set 'spec.maxScaleRef' automatically.
    -  maxScale:
    -    enabled: true
    -    connection:
    -      secretName: mxs-repl-conn
    -      port: 3306
    -    metrics:
    -      enabled: true

    Start deploying examples:

    Some examples rely on external dependencies for specific tasks, make sure to install them when it applies:

    • prometheus-operatorarrow-up-right for metrics

    • cert-managerarrow-up-right for TLS certificates

    • minioarrow-up-right for S3 object storage

    It is recommended to complement the examples with the API reference documentation to understand the full range of configuration options available.

    If you are looking for production-grade examples, you can check the following manifests:

    • mariadb_replication_production.yaml and maxscale_replication_production.yaml for asynchronous replication

    • mariadb_galera_production.yaml and maxscale_galera_production.yaml for Galera

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    examples catalogarrow-up-right
    examples catalogarrow-up-right

    admin_oidc_url

    Hostname or IP address of your Enterprise Manager server.

    admin_host

    Must be set to 0.0.0.0 to allow external connections from Enterprise Manager.

    admin_oidc_client_id

    Default credentials used by Enterprise Manager to request the access token.

    admin_oidc_client_secret

    Default credentials used by Enterprise Manager to request the access token.

    # View API logs
    cat logs/api.log
    
    # View ingestion logs
    cat logs/ingestion.log
    { "tool": "insert_docs_vector_store", "parameters": { "database_name": "test_db", "vector_store_name": "my_vectors", "documents": ["Sample text 1", "Sample text 2"], "metadata": [{"source": "doc1"}, {"source": "doc2"}] } }
    dashboards
    unique alert rules
    Query Editor
    ERD Designer
    identity provider (OIDC)
    role-based access control (RBAC)

    Security in Enterprise Manager

    Overview of security best practices within Enterprise Manager, including securing the UI, managing audit logs, and enforcing strict access controls.

    MariaDB Enterprise Manager provides security at multiple levels, including transport-layer encryption for all components, secure authentication, and a detailed audit log.

    circle-info

    This guide covers the primary security configurations. For Users, Roles and Permissions, see User Management.

    hashtag
    SSL/TLS Certificate Management

    The Enterprise Manager installation generates a self-signed TLS certificate and key for immediate use. For production environments, you should use your own custom certificates.

    1

    Place custom certificates

    Copy your custom certificate and private key files into the enterprise-manager/certs/ directory on the host machine.

    2

    Update the configuration

    Open the enterprise-manager/.env

    hashtag
    Enabling the Audit Log

    The audit log records all REST API requests made to MariaDB Enterprise Manager, providing a clear trail of administrative actions for security and compliance.

    1

    Step: Navigate to the directory

    Open a terminal and change into your MariaDB Enterprise Manager installation directory.

    2

    Step: Edit the .env file

    Open the environment file using a text editor.

    3

    hashtag
    Configuring Secure Connections

    hashtag
    Agent to Enterprise Manager Connections

    The connection from the mema-agent to the Enterprise Manager server is secured using HTTPS.

    • To enable encryption: ensure the URL provided in the agent setup command uses https://.

    • To bypass certificate checks: if you are using a self-signed or non-trusted TLS certificate on the Enterprise Manager server, you can add the --otlp-insecure flag to the agent setup command. This is recommended only for testing environments.

    hashtag
    Enterprise Manager to Monitored Databases

    You can configure secure TLS connections from Enterprise Manager to your monitored MariaDB Servers and MaxScale instances when you first add them.

    In the "Add Database" page:

    1. Toggle the SSL/TLS option to ON.

    2. To validate the server's certificate against your Certificate Authority (CA), provide the path to your CA file in the Certificate Authority field. The file must be located in the enterprise-manager/certs/ directory and the path must begin with /certs/.

    3. Check Verify peer certificate to enable validation.

    circle-exclamation

    All certificate and key files referenced for server validation or client authentication must be placed in the enterprise-manager/certs/ directory on the host and referenced with a path beginning with /certs/.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Node and Operating System

    Monitors the underlying host infrastructure, providing detailed metrics for CPU utilization, memory consumption, disk I/O, and network throughput for each database node.

    The Node Dashboard pane provides detailed visibility into the health and performance of individual nodes that run MariaDB Server and MaxScale. It combines uptime, system capacity, operating system details, and hardware utilization with disk and network activity. This view helps administrators ensure each node has sufficient resources and can support the workloads running on it.

    hashtag
    Node Information

    Provides a high-level, at-a-glance summary of a specific server node's status, configuration, and capacity.

    Metric
    Description

    hashtag
    Node System Information

    Tracks memory usage, CPU performance, system load, and resource consumption at the process level.

    Metric
    Description

    hashtag
    Filesystem Section

    Monitors disk performance and utilization for the node’s storage devices.

    Metric
    Description

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Quickstart Guide

    Installation and configuration steps for Enterprise Manager and agents, covering standalone and MaxScale topologies.

    MariaDB Enterprise Manager is a database management and observability solution that provides advanced topology-aware monitoring coupled with visual schema management, query editing, and ERD design across multiple database connections.

    This guide describes steps to install MariaDB Enterprise Manager for evaluation purposes.

    hashtag
    Prerequisites

    1

    Prepare a machine for Enterprise Manager installation

    (minimal hardware resources for evaluation):

    • CPU: 2 cores (or 2 vCPUs) with x86-64 architecture

    • RAM: 4 GB

    2

    Obtain MariaDB Customer Download Token

    1. Navigate to the

    2. Log in using your

    3

    Setup MariaDB Enterprise Repository - "MariaDB Enterprise Tools"

    hashtag
    Step 1: Install Enterprise Manager

    1

    Login to the MariaDB Enterprise Docker Registry

    Use your MariaDB ID as username and Customer Download Token as password:

    2

    Download the installation script

    Insert your Customer Download Token into the download URL and download the installation script:

    3

    hashtag
    Step 2: Register database topology in Enterprise Manager and enable monitoring

    Below are procedures for topologies without and with MaxScale.

    hashtag
    Topology without MaxScale

    1

    Create monitoring user for each MariaDB Server (Enterprise Manager access)

    Run on each (replace <Enterprise_Manager_IP> ):

    2

    Add database topology in Enterprise Manager UI

    Add each MariaDB Server in the Enterprise Manager UI, providing access details for each server.

    hashtag
    Topology with MaxScale

    1

    Add MaxScale instances to Enterprise Manager

    Add each MaxScale instance in the Enterprise Manager UI, providing access details.

    2

    Install agent on each MaxScale and MariaDB Server

    On each MaxScale and each MariaDB server install the mema-agent package.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Configure OpenID Connect Identity Provider

    Instructions for integrating Enterprise Manager with an OpenID Connect (OIDC) identity provider for centralized Single Sign-On (SSO) authentication.

    MariaDB Enterprise Manager can be integrated with external identity providers (like Okta, Keycloak, or Azure AD) using OpenID Connect (OIDC). This allows you to centralize user authentication, enforce your organization's security policies, and enable single sign-on (SSO).

    circle-info

    Integrating with an external Identity Provider is an optional feature. MariaDB Enterprise Manager includes a built-in user management system that works out-of-the-box.

    hashtag
    Before You Begin

    Before configuring OIDC in Enterprise Manager, you must first register Enterprise Manager as a client application within your Identity Provider's administrative console and obtain the necessary credentials.

    1

    hashtag
    Configure client settings in your identity provider

    In your Identity Provider's client configuration screen, you will need to provide several URLs that point back to your MariaDB Enterprise Manager instance. These URLs tell the provider where to send the user after authentication and what origins are allowed to make requests.

    circle-check

    OIDC Using Keycloak

    Here is an example of what the filled-in fields might look like if you are using Keycloak.

    • Authentication URL: This is the URL to your specific Keycloak realm:

    hashtag
    Mapping IDP Roles to Enterprise Manager Permissions

    For Enterprise Manager to assign the correct permissions to a user logging in via OIDC, it expects the JWT token from your provider to contain a specific field (claim) named account.

    The value of this account field must exactly match the name of a role that exists in MariaDB Enterprise Manager (for example, admin, viewer, or a custom role).

    circle-check

    Example JWT payload showing the account claim

    { "account": "admin", "aud": "admin", "exp": 1760133641, "iat": 1760104841, "iss": "maxscale",

    1

    Resetting the OIDC Configuration

    To restore the default settings:

    1. Click the Reset Configuration button.\

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Database Administration

    Highlights the administrative tools within the Workspace, including the Schema Inspector, Object Browser, user management, and live process list viewing.

    The MariaDB Enterprise Manager Workspace includes a powerful set of integrated tools that allow DBAs and developers to perform common administrative tasks graphically, without needing to write raw SQL commands. These features are primarily accessed through the Schemas Sidebar and dedicated tabs in the main worksheet area.

    hashtag
    Schema Inspector

    The Schema Inspector provides detailed, read-only metadata views for any selected schema object. This allows you to quickly understand the structure, data types, constraints, and dependencies of your tables, views, and other objects without querying the information_schema. To use it, simply click on an object in the Object Browser.

    hashtag
    Object Browser

    The Object Browser is the hierarchical tree view located in the Schemas Sidebar on the left side of the Workspace. It is your primary tool for navigating and exploring your database instances. You can expand databases to see their tables, views, stored procedures, and triggers, and use the filter box at the top to quickly locate specific objects.

    hashtag
    Object Editor

    The Object Editor allows you to create, modify, and delete schema objects using graphical forms and dialogs. You can access these functions by right-clicking on an object (or object type) in the Object Browser. This will open a context menu with actions such as:

    • CREATE TABLE, CREATE VIEW

    • ALTER TABLE

    • DROP TABLE

    hashtag
    User Management

    This dedicated tab provides a grid-based interface for managing database users and their privileges directly, without writing GRANT or CREATE USER statements.

    From this interface, you can:

    • View a list of all database users and their assigned global privileges.

    • Create new database users using a simple form.

    • Edit an existing user's password or modify their privileges.

    hashtag
    Process List Viewer

    The Processlist tab provides a real-time view of the database server's active sessions and the commands they are executing, equivalent to running SHOW FULL PROCESSLIST. This is an essential tool for diagnosing performance issues.

    Using the Processlist Viewer, you can:

    • Monitor all active connections, their current status (e.g., Query, Sleep), and how long they have been running.

    • Identify long-running or problematic queries that may be impacting server performance.

    • Manage live sessions, which may include the ability to terminate (kill) a specific process.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Metrics Retention Configuration

    Guide to modifying the default 30-day metrics data retention period by editing the PROMETHEUS_RETENTION_TIME environment variable and restarting services.

    By default, MariaDB Enterprise Manager retains detailed metrics for 30 days. You can configure this data retention period to balance your need for historical data with storage costs.

    This guide explains how to change the retention period and how the underlying storage system works.

    hashtag
    How to Change the Retention Period

    Changing the retention time is done by editing the environment file for Enterprise Manager and then restarting the services.

    1

    hashtag
    Locate and edit the .env file

    Navigate to your Enterprise Manager installation directory and open the .env file in a text editor.

    2

    hashtag
    Data Retention Policy

    Prometheus, the time-series database used by Enterprise Manager, does not delete expired data instantly.

    • Block-Based Storage: Prometheus stores metrics data in blocks, which are typically two-hour chunks of time. In the background, these small blocks are compacted into larger ones.

    • Delayed Cleanup: Data is not deleted on a sample-by-sample basis. Instead, Prometheus removes an entire block once all the data within it has passed the retention period. This cleanup process runs in the background and may not be immediate.

    circle-info

    Delayed metrics removal for deleted databases

    After you delete a database from MariaDB Enterprise Manager, you may continue to see its historical metrics in Grafana dashboards for a period of time.

    This is expected behavior. Enterprise Manager does not immediately delete a database's metric history from Prometheus. Instead, the data is removed automatically by Prometheus's own cleanup process once it passes the configured retention period.

    These old metrics will no longer receive new data and will eventually disappear from the dashboards on their own.

    hashtag
    Valid Retention Time Units

    When setting PROMETHEUS_RETENTION_TIME, you can use the following units:

    • y - years

    • w - weeks

    • d - days

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    CSI Specific Configuration

    hashtag
    blob-csi-driver (Azure Blob Storage)

    This section outlines a recommended StorageClass configuration for the Azure Blob Storage CSI Driverarrow-up-right that resolves common mounting and list operation issues encountered in Kubernetes environments.

    The following StorageClassarrow-up-right is recommended when working with Azure Blob Storage (ABS).

    Next, when defining your PhysicalBackup resource, make sure to use the new StorageClass we created.

    hashtag
    Issue 1: Access for Non-Root Containers (-o allow_other)

    The default configuration prevents non-root Kubernetes containers from accessing the mounted blob container, resulting in an "unaccessible" volume. By setting the mountOption -o allow_other, non-root containers are granted access to the volume, resolving this issue.

    See for more information.

    hashtag
    Issue 2: Immediate List Operations and Backup Deletion (--cancel-list-on-mount-seconds=0)

    When using the blob-csi-driver with its default settings, list operations (which are critical for cleaning up old backups) may not work immediately upon mount, leading to issues like old physical backups never being deleted. Setting the mountOption --cancel-list-on-mount-seconds to "0" ensures that list operations work as expected immediately after the volume is mounted.

    See for more information.

    circle-exclamation

    Setting cancel-list-on-mount-seconds to 0 forces the driver to perform an immediate list operation, which may increase both initial mount time and Azure transaction costs (depending on the number of objects in the container). Operators should consider these performance and financial trade-offs and consult the official Azure Blob Storage documentation or an Azure representative for guidance.


    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Enabling TLS in existing instances

    In this guide, we will be migrating existing MariaDB Galera and MaxScale instances to TLS without downtime.

    1. Ensure that MariaDB has TLS enabled and not enforced. Set the following options if needed:

    By setting these options, the operator will issue and configure certificates for MariaDB, but TLS will not be enforced in the connections i.e. both TLS and non-TLS connections will be accepted. TLS enforcement will be optionally configured at the end of the migration process.

    This will trigger a rolling upgrade, make sure it finishes successfully before proceeding with the next step. Refer to the for further information about update strategies.

    2. If you are currently using MaxScale, it is important to note that, unlike MariaDB, it does not support TLS and non-TLS connections simultaneously (see ). For this reason, you must temporarily point your applications to MariaDB during the migration process. You can achieve this by configuring your application to use the . At the end of the MariaDB migration process, the MaxScale instance will need to be recreated in order to use TLS, and then you will be able to point your application back to MaxScale. Ensure that all applications are pointing to MariaDB before moving on to the next step.

    3. MariaDB is now accepting TLS connections. The next step is by pointing them to MariaDB securely. Ensure that all applications are connecting to MariaDB via TLS before proceeding to the next step.

    4. If you are currently using MaxScale, and you are planning to connect via TLS through it, you should now delete your MaxScale instance. If needed, keep a copy of the MaxScale manifest, as we will need to recreate it with TLS enabled in further steps:

    It is very important that you wait until your old MaxScale instance is fully terminated to make sure that the old configuration is cleaned up by the operator.

    5. For enhanced security, it is recommended to enforce TLS in all MariaDB connections by setting the following options. This will trigger a rolling upgrade, make sure it finishes successfully before proceeding with the next step:

    6. For improved security, you can optionally configure TLS for Galera SSTs by following the steps below:

    • Get the and grant execute permissions:

    • Run the migration script. Make sure you set <mariadb-name> with the name of the MariaDB resource:

    • Set the following option to enable TLS for Galera SSTs:

    This will trigger a rolling upgrade, make sure it finishes successfully before proceeding with the next step

    7. As mentioned in step 4, recreate your MaxScale instance with tls.enabled=true if needed:

    8. MaxScale is now accepting TLS connections. Next, you need to by pointing them back to MaxScale securely. You have done this previously for MariaDB, you just need to update your application configuration to use the and its CA bundle.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Getting Started

    Welcome to MariaDB AI RAG! This section will guide you through installing, configuring, and running the MariaDB AI RAG API and MCP Server.

    hashtag
    Documentation in This Section

    hashtag

    Learn about the MariaDB AI RAG system architecture and components:

    • System architecture

    • Core modules (Ingestion, Chunking, Retrieval, Generation)

    • Data flow and processing pipeline

    hashtag

    Step-by-step installation instructions for all supported platforms:

    • Linux (Ubuntu/Debian - .deb packages)

    • Linux (RHEL/Fedora - .rpm packages)

    • Windows (.msi installer)

    hashtag

    Configure the RAG API and MCP Server:

    • Environment variables

    • Configuration file setup

    • Database connection settings

    • API keys and authentication

    hashtag

    Manage the RAG API and MCP Server services:

    • Starting and stopping services

    • Service status monitoring

    • Log file locations

    • Troubleshooting service issues

    hashtag
    Quick Start Guide

    1. Install the package for your platform (see )

    2. Configure your environment with database credentials and API keys (see )

    3. Start the services using the service management commands

    hashtag
    Next Steps

    After completing the getting started guide:

    • Explore the for detailed endpoint documentation

    • Learn about for user management

    • Review for optimization

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Migrate external MariaDB into Kubernetes

    In this guide, we will be migrating an external MariaDB into a new MariaDB instance running in Kubernetes and managed by MariaDB Enterprise Kubernetes Operator. We will be using logical backups for achieving this migration.

    circle-info

    Ensure you understand the key considerations and limitations of the Backup and Restore resources in the MariaDB Enterprise Kubernetes Operator.

    1. Take a logical backup of your external MariaDB using one of the commands below:

    mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARIADB_HOST} --single-transaction --events --routines --all-databases > backup.2024-08-26T12:24:34Z.sql

    If you are currently using or migrating to a Galera instance, use the following command instead:

    2. Ensure that your backup file matches the following format: backup.2024-08-26T12:24:34Z.sql. If the file name does not follow this format, it will be ignored by the operator.

    3. Upload the backup file to one of the supported . We recommend using S3.

    4. Create your MariaDB resource declaring that you want to and providing a that matches the backup:

    5. If you are using Galera in your new instance, migrate your previous users and grants to use the User and Grant CRs. Refer to the for further detail.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Frequently Asked Questions

    chevron-rightWhere do you get MCP Server from and what are the installation requirements?hashtag

    The MCP Server can be launched individually or as part of the RAG-in-a-box system. It is distributed as pre-compiled binaries that can run on various operating systems, including:

    • Windows

    • RHEL (Red Hat Enterprise Linux)

    • Ubuntu

    chevron-rightIs MCP Server a command-line tool, or does it have a GUI?hashtag

    The MCP Server is a network service that runs as an HTTP server; it does not have a graphical user interface (GUI) or a direct command-line interface (CLI) for tools. It's designed to be a backend service that is:

    • Accessed programmatically via the Model Context Protocol.

    chevron-rightHow do you configure the MCP Server and connect it to MariaDB?hashtag

    The MCP Server does not include its own database. It acts as a client and requires a connection to an external, pre-existing MariaDB server.

    The system components are connected as follows:

    Configuration is managed through environment files where you specify the connection details for your MariaDB instance.

    chevron-rightHow are tools like list_databases executed?hashtag

    Tools are not typed into a command line. Instead, they are executed programmatically by a Large Language Model (LLM) in response to a user's query in natural language.

    The process works like this:

    1. A user asks a question in an integrated client (e.g., "Can you show me what databases are available?").

    chevron-rightWhat are the JSON snippets in the documentation for?hashtag

    The JSON snippets shown in the documentation are examples of the "behind-the-scenes" communication between a client, the LLM, and the MCP Server. They are not meant to be copied and pasted into a CLI but serve to illustrate how the protocol functions.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Installation

    hashtag
    System Requirements

    • Operating System: Linux (Debian/Ubuntu/RHEL), macOS 10.15+, or Windows 10/11

    • CPU: 4+ cores recommended

    • RAM: Minimum 8GB, 16GB+ recommended

    • Storage: 10GB for installation, additional space for document storage

    • Database: MariaDB 10.6+ or compatible MySQL 8.0+

    • Python: Version 3.9+ (included in the installation package)

    hashtag
    Installation Procedure

    hashtag
    Debian/Ubuntu Installation

    1. Download the Debian / Ubuntu .deb installation package from:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Configuration

    hashtag
    Overview

    This guide covers the basic configuration of the MariaDB AI RAG system. For production deployments and advanced configuration scenarios, please refer to the Deployment Documentation.

    See Also:

    • - Production configuration for Ubuntu/Debian

    • - Container-based deployment configuration

    • - Configuration validation checklist

    • - System architecture and configuration details

    hashtag
    Configuration File

    MariaDB AI RAG uses a .env configuration file located in the installation directory. A template is provided at config.env.template. Copy this file to .env and modify the parameters according to your environment.

    hashtag
    Database Initialization

    MariaDB AI RAG requires a properly configured database. The system can automatically initialize the database schema during first startup, or you can manually initialize it using the provided SQL script:

    hashtag
    Security Configuration

    hashtag
    Authentication

    MariaDB AI RAG implements JWT-based authentication. Configure the following parameters in your .env file:

    For production environments, it is strongly recommended to use a properly generated secure random string for the SECRET_KEY.

    hashtag
    API Key Management

    External service API keys should be securely stored in the .env file. In production environments, consider using a secure vault solution or environment variable management system.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Troubleshooting Enterprise Manager

    Guide to resolving common installation, configuration, agent connectivity, and metrics collection issues.

    Troubleshooting installation/deployment issues for Enterprise Manager and Agent

    chevron-rightIs the MariaDB Enterprise repository configured correctly?hashtag

    The agent is distributed as a native OS package that can be installed from the MariaDB Enterprise repositories. The repositories can be installed by following the .

    Make sure to use the mariadb_es_repo_setup

    MariaDB Galera Cluster

    Extends standard server monitoring with Galera-specific metrics like flow control pauses, write conflicts, replication queue depth, and individual node cluster states.

    The dashboard mirrors most sections from the dashboard extending it with Galera Metrics section and the Galera Nodes table. Use this dashboard when you need Galera-specific cluster health alongside the familiar server views.

    hashtag
    Galera Metrics

    Insights into Galera Cluster health with critical metrics and node-specific status details.

    Metrics

    Overview of the metrics collected by Enterprise Manager, including MariaDB Server counters, MaxScale performance data, and node-level system resource utilization.

    hashtag
    MariaDB Server Metrics

    MariaDB Server metrics are gathered with the Prometheus exporter for MySQL and stored in Enterprise Manager’s Prometheus with the mariadb prefix. The agent runs the exporter with the following collector flags:

    Collector name
    Description

    Standalone

    This guide covers configuring standalone MariaDB Enterprise Server with minimal settings for development. Avoid using it in production due to risks like single point of failure and necessary downtime

    This operator allows you to configure standalone MariaDB Enterprise Server instances. To achieve this, you can either omit the replicas field or set it to 1:

    Whilst this can be useful for development and testing, it is not recommended for production use because of the following reasons:

    • Single point of failure

    25.10 LTS version update guide

    This guide illustrates, step by step, how to update to 25.10.4 from previous versions. This guide only applies if you are updating from a version prior to 25.10.x, otherwise you may upgrade directly (see and docs)

    • The Galera data-plane must be updated to the 25.10.4 version. You must set updateStrategy.autoUpdateDataPlane=true in your MariaDB resources before updating the operator. Then, once updated, the operator will also be updating the data-plane based on its version:

    Data Plane

    In order to effectively manage the full lifecycle of both and topologies, the operator relies on a set of components that run alonside the MariaDB instances and expose APIs for remote management. These components are collectively referred to as the "data-plane".

    hashtag
    Components

    The mariadb-enterprise-operator data-plane components are implemented as lightweight containers that run alongside the MariaDB instances within the same Pod. These components are available in the operator image. More preciselly, they are subcommands of the CLI shipped as binary inside the image.

    Migrate Community operator to Enterprise operator

    In this guide, we will be migrating from the to the without downtime. This guide assumes:

    • version of the MariaDB Community Operator is installed in the cluster.

    • MariaDB community resources will be migrated to its counterpart MariaDB enterprise resource. In this case, we will be using 11.4.4

    # Make executable
    chmod +x install-enterprise-manager.sh
    # Run installer
    ./install-enterprise-manager.sh
    # Extract and load images
    tar -xzvf enterprise-manager.tar.gz
    cd enterprise-manager
    docker image load -i images.tar
    # Start containers
    docker compose up -d
    # Login
    docker login docker.mariadb.com
    # Download installer
    wget https://dlm.mariadb.com/<Customer_Download_Token>/enterprise-release-helpers/install-enterprise-manager.sh
    # Save images and archive
    cd enterprise-manager
    docker compose images | awk 'p{print $2 ":" $3} {p=1}' | xargs docker image save -o images.tar
    cd ..
    tar -czvf enterprise-manager.tar.gz enterprise-manager
    ssh user@your-server-ip
    cd enterprise-manager
    nano .env
    docker compose up -d --force-recreate
    MEMA_HOSTNAME=your.new.hostname.or.ip
    Restore backup to all volumes
    # Clear out any existing data first
    docker run --rm --volumes-from enterprise-manager-grafana -v $(pwd)/backups/:/backups/ alpine:latest find /var/lib/grafana/ -delete -mindepth 1
    docker run --rm --volumes-from enterprise-manager-prometheus -v $(pwd)/backups/:/backups/ alpine:latest find /prometheus/ -delete -mindepth 1
    docker run --rm --volumes-from enterprise-manager-supermax -v $(pwd)/backups/:/backups/ alpine:latest find /var/lib/supermax/ -delete -mindepth 1
    
    # Restore the data from the backups
    docker run --rm --volumes-from enterprise-manager-grafana -v $(pwd)/backups/:/backups/ alpine:latest tar -C / -xzf /backups/grafana-backup.tar.gz
    docker run --rm --volumes-from enterprise-manager-prometheus -v $(pwd)/backups/:/backups/ alpine:latest tar -C / -xzf /backups/prometheus-backup.tar.gz
    docker run --rm --volumes-from enterprise-manager-supermax -v $(pwd)/backups/:/backups/ alpine:latest tar -C / -xzf /backups/supermax-backup.tar.gz
    Create the `backups` directory
    mkdir backups
    Back up all volumes
    docker run --rm --volumes-from enterprise-manager-grafana -v $(pwd)/backups/:/backups/ alpine:latest tar -czf /backups/grafana-backup.tar.gz /var/lib/grafana/
    docker run --rm --volumes-from enterprise-manager-prometheus -v $(pwd)/backups/:/backups/ alpine:latest tar -czf /backups/prometheus-backup.tar.gz /prometheus/
    docker run --rm --volumes-from enterprise-manager-supermax -v $(pwd)/backups/:/backups/ alpine:latest tar -czf /backups/supermax-backup.tar.gz /var/lib/supermax/
    sudo dnf install mema-agent
    sudo apt-get install mema-agent
    Create monitor user
    CREATE USER 'monitor'@'localhost' IDENTIFIED BY '<password>';
    GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD, REPLICA MONITOR, REPLICATION MASTER ADMIN ON *.* TO 'monitor'@'localhost';
    Restart Grafana container
    # Take down the existing Grafana container
    docker compose down grafana
    
    # Start a new Grafana container with the updated configuration
    docker compose up -d grafana
    cd enterprise-manager/
    nano .env
    # --- Grafana SMTP Email Settings ---
    # Set to true to enable email alerting
    GF_SMTP_ENABLED=true
    
    # Your SMTP server hostname and port
    GF_SMTP_HOST=smtp.example.com:587
    
    # Credentials for your SMTP user
    GF_SMTP_USER=my-email-user
    GF_SMTP_PASSWORD=my-super-secret-password
    
    # Set to true if your server uses a self-signed certificate
    GF_SMTP_SKIP_VERIFY=false
    
    # The "From" address that will appear on alert emails
    GF_SMTP_FROM_ADDRESS=alerts@my-domain.com
    
    # The display name for the sender
    GF_SMTP_FROM_NAME=MariaDB Enterprise Manager
    kubectl scale deployment mariadb-enterprise-operator --replicas=0
    kubectl scale deployment mariadb-enterprise-operator-webhook --replicas=0
    kubectl delete validatingwebhookconfiguration mariadb-enterprise-operator-webhook
    kubectl delete mutatingwebhookconfiguration mariadb-enterprise-operator-webhook
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator-crds  mariadb-enterprise-operator/mariadb-enterprise-operator-crds --version 25.8.0
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      updateStrategy:
    +   autoUpdateDataPlane: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      galera:
        agent:
    -      image: docker.mariadb.com/mariadb-enterprise-operator:1.0.0
    +      image: docker.mariadb.com/mariadb-enterprise-operator:25.8.0
        initContainer:
    -      image: docker.mariadb.com/mariadb-enterprise-operator:1.0.0
    +      image: docker.mariadb.com/mariadb-enterprise-operator:25.8.0
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --version 25.8.0 
    kubectl scale deployment mariadb-enterprise-operator --replicas=1
    kubectl scale deployment mariadb-enterprise-operator-webhook --replicas=1
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      updateStrategy:
    +   autoUpdateDataPlane: false
    -   autoUpdateDataPlane: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      suspend: true
    kubectl get mariadbs
    NAME             READY   STATUS      PRIMARY           UPDATES                   AGE
    mariadb-galera   True    Suspended   mariadb-galera-0  ReplicasFirstPrimaryLast  12m
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      updateStrategy:
    +   autoUpdateDataPlane: true
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator-crds  mariadb-enterprise-operator/mariadb-enterprise-operator-crds --version 26.3.1
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --version 26.3.1
    oc get installplan
    NAME            CSV                                     APPROVAL   APPROVED
    install-sjgcs   mariadb-enterprise-operator.v25.10.4    Manual     false
    
    oc patch installplan install-sjgcs --type merge -p '{"spec":{"approved":true}}'
    
    installplan.operators.coreos.com/install-sjgcs patched
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      updateStrategy:
    +   autoUpdateDataPlane: false
    -   autoUpdateDataPlane: true
    curl -sLO https://operator.mariadb.com/scripts/migrate_maxscale_to_resource.sh
    chmod +x migrate_maxscale_to_resource.sh
    ./migrate_maxscale_to_resource.sh <mariadb_manifest.yaml>
    curl -sLO https://operator.mariadb.com/examples/manifests.tar.gz
    mkdir -p examples
    tar -xzf manifests.tar.gz -C examples
    kubectl apply -f examples/config
    kubectl apply -f examples/mariadb.yaml
    [maxscale]
    # ... other settings ...
    admin_host=0.0.0.0
    admin_oidc_url=<Enterprise Manager Host Name>
    admin_oidc_client_id=admin
    admin_oidc_client_secret=mariadb
    { "tool": "search_vector_store", "parameters": { "database_name": "test_db", "vector_store_name": "my_vectors", "user_query": "What is the capital of France?", "k": 5 } }
    { "tool": "rag_generation", "parameters": { "database_name": "test_db", "vector_store_name": "my_vectors", "user_query": "What is the capital of France?", "k": 5, "temperature": 0.9 } }
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-fuse
    provisioner: blob.csi.azure.com
    parameters:
      protocol: fuse2
    reclaimPolicy: Retain
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      # Resolves the issue where non-root containers cannot access the mounted blob container.
      - -o allow_other
      # Ensures list operations (critical for backups/deletion) work immediately upon mount.
      - --cancel-list-on-mount-seconds=0
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
    +   enabled: true
    +   required: false
    +   galeraSSTEnabled: false
    +   galeraServerSSLMode: PROVIDER
    +   galeraClientSSLMode: DISABLED
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner
    spinner

    File Descriptors

    Current vs. maximum number of open file descriptors.

    Filesystem Type

    Table of filesystem types and mount points on the node.

    Node Uptime

    Shows the total amount of time the server node has been running since its last restart.

    Topology Info

    Displays the node's current role or state within its database topology (e.g., Primary, Replica).

    Node Allocatable Capacity

    Details the compute resources allocated to the node, such as the number of CPU cores available.

    Node Disk Capacity

    Shows the total size of the key mounted filesystems, such as /boot and /home.

    OS Info

    Provides details about the node's OS, including architecture, distribution (e.g., CentOS Stream 9), and kernel release.

    Memory Usage

    Percentage of physical memory in use.

    CPU

    Graph showing CPU usage distribution across user, system, idle, iowait, and kernel.

    Memory Stack

    Breakdown of memory allocation: applications, cache, buffers, swap, etc.

    Network Traffic

    Inbound and outbound network throughput per interface.

    CPU Utilisation

    Effective CPU usage and number of cores for the node.

    System Load

    Load averages for the last 1, 5, and 15 minutes.

    Disk Throughput

    Read and write throughput (bytes per second) per device.

    Disk IOPS

    Number of input/output operations per second for reads and writes.

    Disk Utilisation

    Percentage of time that disk devices are busy handling I/O requests.

    spinner
  • Managing constraints and relationships

  • Renaming or copying objects

  • Delete users who no longer require access.
    spinner

    collect.binlog_size

    Reports binary log files and their sizes to track binlog count and total disk usage/growth.

    collect.engine_innodb_status

    Parses SHOW ENGINE INNODB STATUS to expose InnoDB internals (waits, deadlocks, transaction and I/O snapshots).

    collect.info_schema.innodb_metrics

    Reads INFORMATION_SCHEMA.INNODB_METRICS for detailed InnoDB counters (buffer pool, I/O, log, lock, purge, recovery, etc.).

    collect.info_schema.innodb_tablespaces

    Exposes per-tablespace/file size and allocation details from Information Schema for space-usage monitoring.

    collect.info_schema.processlist

    Exposes current session/thread activity (users, hosts, commands, states, runtimes) based on the process list.

    collect.info_schema.replica_host

    Discovers replica hosts via Information Schema (MariaDB-friendly alternative to SHOW SLAVE HOSTS) for topology visibility.

    collect.slave_hosts

    Emits replica host topology using SHOW SLAVE HOSTS/SHOW REPLICA HOSTS (note: MariaDB expects the legacy SHOW SLAVE HOSTS syntax).

    collect.slave_status

    Exposes replication status from SHOW SLAVE/REPLICA STATUS (I/O/SQL thread states, positions/GTID, seconds behind, etc.).

    hashtag
    MaxScale Metrics

    MariaDB Enterprise Manager collects a wide range of time-series metrics from your MariaDB MaxScale instances to provide deep insight into their performance, health, and activity. Monitoring these metrics is crucial for diagnosing performance bottlenecks, ensuring high availability, and understanding how your database proxy is handling application traffic.

    Here is the list of available MaxScale metrics collected by Enterprise Manager.

    hashtag
    Node Metrics

    Node metrics provide crucial information about the health and performance of the underlying hardware and operating system on each monitored host. These metrics are essential for diagnosing infrastructure bottlenecks, understanding resource utilization, and planning for future capacity.

    MariaDB Enterprise Manager gathers these metrics using Prometheus Node Exporter, which includes a default set of collectors.

    Key metrics collected by default include:

    • CPU Usage: Overall and per-core utilization, load average, and context switching.

    • Memory: Total, used, free, and cached memory, including swap space.

    • Disk I/O: Read/write operations, throughput (bytes per second), and I/O time.

    • Filesystem Usage: Total, used, and available space for each mounted filesystem.

    • Network Traffic: Data sent and received, packets, and network interface errors.

    For a complete and detailed list of all metrics gathered by the default collectors, please refer to the official Prometheus Node Exporter documentationarrow-up-right.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    spinner

    hashtag
    Modify the retention time variable

    Find the line containing PROMETHEUS_RETENTION_TIME and change its value. The change will only take effect after the Prometheus service is restarted.

    Examples:

    circle-info

    Changes to PROMETHEUS_RETENTION_TIME take effect only after the Prometheus service is restarted.

    3

    hashtag
    Restart services to apply the change

    You must restart the services for the new retention period to be applied.

    h - hours

  • m - minutes

  • s - seconds

  • spinner
    this issuearrow-up-right
    this issuearrow-up-right
    spinner
    mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARIADB_HOST} --single-transaction --events --routines --all-databases --skip-add-locks --ignore-table=mysql.global_priv > backup.2024-08-26T12:24:34Z.sql
    storage types
    bootstrap from the previous backup
    root password Secret
    SQL resource documentation
    spinner
    Ubuntu Deployment Guide
    Docker Deployment Guide
    Deployment Checklist
    Technical Architecture
    spinner

    Upgrades require downtime

  • Only vertical scaling is possible

  • For achieving high availability, we recommend deploying a highly available topology as described in the high availability guide.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: password
    
      replicas: 1
    
      port: 3306
    
      storage:
        size: 1Gi
    
      myCnf: |
        [mariadb]
        bind-address=*
        default_storage_engine=InnoDB
        binlog_format=row
        innodb_autoinc_lock_mode=2
        innodb_buffer_pool_size=800M
        max_allowed_packet=256M
    
      resources:
        requests:
          cpu: 500m
          memory: 1Gi
        limits:
          memory: 1Gi
    
      metrics:
        enabled: true
    spinner
    file and modify the
    MEMA_TLS_CERTPATH
    and
    MEMA_TLS_KEYPATH
    variables to point to your new files.

    Example: if your files are my-host.crt and my-host.key, your configuration should be:

    circle-info

    The path you provide must begin with /certs/. This is because the host's certs/ directory is mounted inside the Docker containers at the /certs path.

    3

    Restart Enterprise Manager

    To apply the changes, restart the services:

    Step: Update the audit log variable

    Inside the editor, locate the line for the audit API setting.

    • Find this line:

    • Change it to:

    4

    Step: Save and exit

    Save the changes and exit the editor.

    5

    Step: Restart Enterprise Manager

    The change requires a restart to take effect.

    (Optional) Check Verify peer host to ensure the server's hostname matches the certificate.

  • If the database requires client-side certificates for authentication, provide the paths to your client certificate and key in the Certificate and Key fields, respectively. These files must also be in the enterprise-manager/certs/ directory.

  • spinner
    Integration with MariaDB vector database
    System requirements and prerequisites
  • Embedding and LLM provider configuration

  • Verify installation by accessing the API health endpoint:
    Overview
    Installation
    Configuration
    Service Management
    Installation
    Configuration
    API Reference
    Access Control
    Performance Tuning
    spinner
    • Once set, you may proceed to update the operator. If you are using Helm:

    Upgrade the mariadb-enterprise-operator-crds helm chart to 25.10.4:

    Upgrade the mariadb-enterprise-operator helm chart to 25.10.4:

    As part of the 25.10 LTS release, we have introduced support for LTS versions. Refer to the Helm docsarrow-up-right for sticking to LTS versions.

    • If you are on OpenShift:

    If you are on the stable channel using installPlanApproval=Automatic in your Subscription object, then the operator will be automatically updated. If you use installPlanApproval=Manual, you should have a new InstallPlan which needs to be approved to update the operator:

    As part of the 25.10 LTS release, we have introduced new release channelsarrow-up-right. Consider switching to the stable-v25.10 if you are willing to stay in the 25.10.x version:

    • Consider reverting updateStrategy.autoUpdateDataPlane back to false in your MariaDB object to avoid unexpected updates:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Helmarrow-up-right
    OpenShiftarrow-up-right
    spinner
    hashtag
    Init container

    The init container is responsible for dynamically generating the Pod-specifc configuration files before the MariaDB container starts. It also plays a crucial role in the MariaDB container startup, enabling replica recovery for the replication topolology and guaranteeing ordered deployment of Pods for the Galera topology.

    hashtag
    Agent sidecar

    The agent sidecar provides an HTTP API that enables the operator to remotely manage MariaDB instances. Through this API, the operator is able to remotely operate the data directory and handle the instance lifecycle, including operations such as replica recovery for replication and cluster recovery for the Galera topology. It supports multiple authentication methods to ensure that only the operator is able to call the agent API.

    Since it has access to the data directory, it is also responsible for periodically archiving binary logs to be used for point-in-time recovery.

    hashtag
    Agent auth methods

    As previously mentioned, the agent exposes an API to remotely manage the replication and Galera clusters. The following authentication methods are supported to ensure that only the operator is able to call the agent:

    hashtag
    ServiceAccount based authentication

    The operator uses its ServiceAccount token as a mean of authentication for communicating with the agent, which subsequently verifies the token by creating a TokenReview objectarrow-up-right. This is the default authentication method and will be automatically applied by setting:

    This Kubernetes-native authentication mechanism eliminates the need for the operator to manage credentials, as it relies entirely on Kubernetes for this purpose. However, the drawback is that the agent requires cluster-wide permissions to impersonate the system:auth-delegatorarrow-up-right ClusterRole and to create TokenReviewsarrow-up-right, which are cluster-scoped objects.

    hashtag
    Basic authentication

    As an alternative, the agent also supports basic authentication:

    Unlike the ServiceAccount based authentication, the operator needs to explicitly generate credentials to authenticate. The advantage of this approach is that it is entirely decoupled from Kubernetes and it does not require cluster-wide permissions on the Kubernetes API.

    hashtag
    Updates

    Please refer to the updates documentation for more information about how to update the data-plane.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    replication
    Galera
    spinner
    version, which is supported in both community and enterprise versions. Check the supported
    and migrate to a counterpart community version first if needed.
  • MaxScale resources cannot be migrated in a similar way, they need to be recreated. To avoid downtime, temporarily point your applications to MariaDB directly during the migration.

  • 1. Install the Enterprise CRDs as described in the Helm documentation.

    2. Get the migration scriptarrow-up-right and grant execute permissions:

    3. Migrate MariaDB resources using the migration script. Make sure you set <mariadb-name> with the name of the MariaDB resource to be migrated and <operator-version> with the version of the Enterprise operator you will be installing:

    4. Update the apiVersion of the rest of CRs to enterprise.mariadb.com/v1alpha1.

    5. Uninstall the Community operator:

    6. If your MariaDB Community had Galera enabled, delete the <mariadb-name> Role, as it will be specifying the Community CRDs:

    7. Install the Enterprise operator as described in the Helm documentation. This will trigger a rolling upgrade, make sure it finishes successfully before proceeding with the next step.

    8. Delete the finalizers and uninstall the Community CRDs:

    9. Run mariadb-upgrade in all Pods. Make sure you set <mariadb-name> with the name of the MariaDB resource:

    10. Restart the Enterprise operator:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    MariaDB Community Operatorarrow-up-right
    MariaDB Enterprise Kubernetes Operator
    0.37.1arrow-up-right
    MariaDB Enterprise images
    spinner
    # Check containers
    cd enterprise-manager
    docker compose ps
    # Set retention to 90 days
    PROMETHEUS_RETENTION_TIME=90d
    # Set retention to 52 weeks (one year)
    PROMETHEUS_RETENTION_TIME=52w
    # Restart services
    docker compose up -d
    # .env location
    cd enterprise-manager/
    vim .env
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      # ...
      storage:
        persistentVolumeClaim:
          # Specify your own class
          storageClassName: blob-fuse
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
      replicas: 3
      galera:
        enabled: true
      storage:
        size: 1Gi
      bootstrapFrom:
        s3:
          bucket: backups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: tls.crt
        targetRecoveryTime: 2024-08-26T12:24:34Z
    # Database Configuration (Required)
    DB_HOST=localhost
    DB_PORT=3306
    DB_USER=your_mysql_username
    DB_PASSWORD=your_mysql_password
    DB_NAME=rag_db
    
    # Authentication (Required)
    SECRET_KEY=your_secret_key_here_generate_a_secure_random_string
    
    # Embedding Configuration (Required)
    EMBEDDING_PROVIDER=openai
    EMBEDDING_MODEL=text-embedding-3-small
    
    # API Keys (Set based on your embedding/LLM provider)
    OPENAI_API_KEY=your_openai_api_key
    GEMINI_API_KEY=your_gemini_api_key
    VOYAGE_API_KEY=your_voyage_api_key
    COHERE_API_KEY=your_cohere_api_key
    mysql -u username -p database_name < init-db.sql
    SECRET_KEY=your_secure_random_string
    ACCESS_TOKEN_EXPIRE_MINUTES=60
    docker compose up -d
    MEMA_AUDIT_API=false
    MEMA_AUDIT_API=true
    docker compose up -d
    cd enterprise-manager/
    nano .env
    mema-agent setup --endpoint=https://<MEM_Address> ...
    .env (example)
    MEMA_TLS_CERTPATH=/certs/my-host.crt
    MEMA_TLS_KEYPATH=/certs/my-host.key
    curl http://localhost:8000/health
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      updateStrategy:
    +   autoUpdateDataPlane: true
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator-crds  mariadb-enterprise-operator/mariadb-enterprise-operator-crds --version 25.10.4
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --version 25.10.4
    oc get installplan
    NAME            CSV                                     APPROVAL   APPROVED
    install-sjgcs   mariadb-enterprise-operator.v25.10.4    Manual     false
    
    oc patch installplan install-sjgcs --type merge -p '{"spec":{"approved":true}}'
    
    installplan.operators.coreos.com/install-sjgcs patched
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: mariadb-enterprise-operator
      namespace: openshift-operators
    spec:
      channel: stable-v25.10
      installPlanApproval: Automatic
      name: mariadb-enterprise-operator
      source: certified-operators
      sourceNamespace: openshift-marketplace
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      updateStrategy:
    +   autoUpdateDataPlane: false
    -   autoUpdateDataPlane: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replication:
        agent:
          kubernetesAuth:
            enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replication:
        agent:
          basicAuth:
            enabled: true
    curl -sLO https://operator.mariadb.com/scripts/migrate_enterprise.sh
    chmod +x migrate_enterprise.sh
    RESOURCE="<mariadb-name>" \
    OLD_API_GROUP="k8s.mariadb.com" \
    NEW_API_GROUP="enterprise.mariadb.com" \
    NEW_MARIADB_IMAGE="docker.mariadb.com/enterprise-server:11.4.4-2" \
    NEW_MARIADB_OPERATOR_IMAGE="docker.mariadb.com/mariadb-enterprise-operator:<operator-version>" \
    ./migrate_enterprise.sh
    helm uninstall mariadb-operator
    kubectl delete role <mariadb-name>
    for crd in $(kubectl get crds -o json | jq -r '.items[] | select(.spec.group=="k8s.mariadb.com") | .metadata.name'); do
      kubectl get "$crd" -A -o json | jq -r '.items[] | "\(.metadata.namespace)/\(.metadata.name)"' | while read cr; do
        ns=$(echo "$cr" | cut -d'/' -f1)
        name=$(echo "$cr" | cut -d'/' -f2)
        echo "Removing finalizers from $crd: $name in $ns..."
        kubectl patch "$crd" "$name" -n "$ns" --type merge -p '{"metadata":{"finalizers":[]}}'
      done
    done
    helm uninstall mariadb-operator-crds
    for pod in $(kubectl get pods -l app.kubernetes.io/instance=<mariadb-name> -o jsonpath='{.items[*].metadata.name}'); do
      kubectl exec "$pod" -- sh -c 'mariadb-upgrade -u root -p${MARIADB_ROOT_PASSWORD} -f'
    done
    kubectl rollout restart deployment mariadb-enterprise-operator
    Storage: 100 GB

    Other requirements:

    • 64-bit Linux OS with installed Docker engine and Docker Compose: https://docs.docker.com/engine/install/

    • Network ports 8090 and 4318 opened for inbound traffic

    Copy the Customer Download Token — you will use it as the password when logging in to the MariaDB Enterprise Docker Registry

    Make the installation script executable

    4

    Run the installer with default options

    5

    Access Enterprise Manager UI

    Open in a browser:

    https://<Enterprise_Manager_IP>:8090

    At the login screen, use the default username admin and the generated password displayed after the installation script finishes.

    3

    Install agent on each MariaDB Server to enable metrics collection

    On each MariaDB server install the mema-agent package.

    • RedHat-based (RHEL, CentOS, Rocky Linux):

    • Debian-based (Ubuntu, Debian):

    4

    Create monitoring user for agent access (on each MariaDB Server)

    Run on each MariaDB server:

    5

    Setup agent using the command generated in Enterprise Manager UI

    1. In the UI, click the three dots beside the server you want to install the Agent on.\

    2. The UI will generate a unique setup command for that specific server with the username and password you provide.

    3. Copy and run the command on that specific server.

    4. Repeat for all servers in the database fleet.\

    6

    Wait for metrics to appear

    Wait 1–2 minutes for metrics to start populating in Enterprise Manager from the agents (default collection interval is 1 minute).

  • RedHat-based (RHEL, CentOS, Rocky Linux):

    • Debian-based (Ubuntu, Debian):

    3

    Create monitoring user for agent access (on each MariaDB Server)

    Run on each MariaDB server:

    4

    Setup agent using the command generated in Enterprise Manager UI

    1. Click the three dots beside the server or MaxScale instance you want to install the Agent on and click Install Agent.

    2. The UI will generate a unique setup command for that specific server/MaxScale instance with the username and password you provide. Copy the command.

    3. On that specific server/MaxScale instance, paste and run the command in your terminal.

    4. Repeat for all MaxScale and MariaDB servers.

    5

    Wait for metrics to appear

    Wait 1–2 minutes for metrics to start populating in Enterprise Manager from the agents (default collection interval is 1 minute).

    Machine requirements
    Customer Download Token at the MariaDB Customer Portalarrow-up-right
    MariaDB IDarrow-up-right
    MariaDB server
    spinner
    While the exact field names may vary, you must configure the following endpoints, replacing <Your_Enterprise_Manager_Address> with the actual address of your instance:
    • Root / Home URL: https://<Your_Enterprise_Manager_Address>:8090

    • Valid Redirect URI: https://<Your_Enterprise_Manager_Address>:8090/landing

    • Valid Post Logout Redirect URI: https://<Your_Enterprise_Manager_Address>:8090/

    • Web Origins: https://<Your_Enterprise_Manager_Address>:8090

    2

    hashtag
    Obtain your credentials

    Once the client application is saved in your Identity Provider, find and copy the following values:

    • Authentication URL: The provider's endpoint for authentication requests.

    • Client ID: The unique ID for the Enterprise Manager application.

    • Client Secret: The secret key for the Enterprise Manager application.

    3

    Configure role mapping in your identity provider

    Finally, you must configure your Identity Provider to pass the user's role in the JWT token. This is explained in the "Mapping IDP Roles" section further down this page.

    hashtag
    Configuration Steps in Enterprise Manager

    4

    hashtag
    Navigate to Identity Provider settings

    • From the main UI, click the Settings icon (⚙️) in the left navigation bar.

    • On the Settings page, click the Identity Provider card.

    5

    hashtag
    Enter your OIDC provider details

    On the OpenID Connect (OIDC) configuration page, fill in the details from your provider:

    • Authentication URL: The full URL for your OIDC provider's authentication endpoint.

    • Authentication Flow: Choose the OIDC flow. auto is the default and recommended for most providers.

    • Client ID: The Client ID you obtained from your provider.

    • Client Secret: The Client Secret you obtained from your provider.

    6

    hashtag
    Save the configuration

    • Click the Save button to apply the settings.

    http://<keycloak_ip>:<port>/realms/<your_realm>
  • Authentication Flow: The default auto flow is recommended for Keycloak.

  • Client ID: The Client ID you configured for the application within your Keycloak realm: enterprise-manager

  • Client Secret: This secret is generated by Keycloak and found in the 'Credentials' tab of your client configuration in the Keycloak admin console: 12345ab-c67d-89e0-f123-456789abcdef

  • "jti": "0780a545-bb7a-404d-a384-64d04557801d",
    "sub": "admin"
    }

    This token's account claim value "admin" would grant the user the admin role upon login.

    In the confirmation dialog, click Reset.\
    2

    A success message will confirm the reset.

    spinner
    Integrated into AI assistants and clients like Claude Desktop, Cursor, or Windsurf.

    You interact with the server by configuring a client application to communicate with it. For example, here is how you might configure a client like Windsurf:

  • The LLM interprets the request and determines that the list_databases tool is needed.

  • The LLM calls the list_databases tool by sending a JSON-RPC request to the MCP Server.

  • The MCP Server executes the tool against the connected MariaDB database.

  • The results are sent back to the LLM, which formats them into a natural language response for the user.

  • MCP Server (Port 8002) ---------> MariaDB Server (Port 3306)
                             (connects via MySQL protocol)
    spinner
    {
      "mcpServers": {
        "
    
    https://mariadb.com/downloads/enterprise-tooling/ai-rag/arrow-up-right
  • Install the package:

    sudo dpkg -i ai-rag-*.deb	
  • Install dependencies:

    sudo apt-get install -f
  • hashtag
    RHEL (and equivalents) Installation

    1. Download the RHEL .rpm installation package from:

    2. Install the package:

    hashtag
    Windows Installation

    1. Download the Windows .msi installation package from:

    2. Run the .msi installer.

    3. Follow the installation wizard instructions.

    spinner
    script with your Customer Download Token.
    chevron-rightWas the agent installed successfully?hashtag

    The agent installation can be done with the native package manager for your OS.

    # For Red Hat/CentOS/Rocky
    sudo dnf install -y mema-agent
    
    chevron-rightDid the agent setup complete successfully without errors?hashtag

    The mema-agent setup command should produce no errors if it is successful. You can always run the setup again by generating the installation command from the GUI and then executing it again on the target server.

    Did the setup fail on a MariaDB node?

    Make sure that MariaDB is listening on the loopback adapter address. If MariaDB cannot be accessed on port 3306 on localhost, the setup command should define the port with --mariadb-port and the host with --mariadb-host. To use a UNIX domain socket, use --mariadb-socket instead.

    Did the setup fail on a MaxScale node?

    Make sure that the --maxscale-host uses the correct protocol. If MaxScale REST-API is configured to use HTTPS use --maxscale-host=https://127.0.0.1:8989. If the TLS certificates used in the MaxScale REST-API are self-signed, you can disable TLS certificate verification by adding the --maxscale-insecure option to the setup command.

    chevron-rightDid the agent processes start up successfully?hashtag

    The agent processes run as systemd services. Use normal systemd commands to inspect the state of the agent.

    Show the agent status

    Show status
    sudo systemctl status mema-agent.slice

    If the agent didn't start, errors will be shown in the status output. Once errors are fixed, start the agent again.

    Start agent
    sudo systemctl start mema-agent.target

    For a more detailed analysis of errors, inspect the agent logs.

    Show the agent logs

    The agent uses the systemd journal for logging:

    chevron-rightCan the agent collect MariaDB metrics?hashtag

    The credentials that the agent uses to connect to MariaDB require certain grants in order to collect all metrics. Check the Quickstart Guide for the set of grants and verify that the user provided with --mariadb-user has the necessary grants.

    If the MariaDB metrics agent is working correctly, the logs should not have any errors. Check the logs with:

    MariaDB exporter logs
    sudo journalctl -u mema-agent-mariadb-exporter.service

    To verify the MariaDB metrics agent is running, inspect the raw metrics output:

    Raw metrics check
    curl -s http://127.0.0.1:18902/metrics | wc

    The output should contain about 3000 lines if everything is working.

    chevron-rightIs MaxScale able to send metrics?hashtag

    Make sure that the version of MaxScale you have installed is 25.10 or greater. Older versions do not support sending metrics.

    Any errors in metrics exporting are logged on the info level in MaxScale. To enable info logging, run:

    Info level logging is verbose and may cause large log volumes. Once issues are resolved, disable info logging:

    chevron-rightCan the agent connect to the Enterprise Manager?hashtag

    To check connectivity between the agent host and the Enterprise Manager, use curl. If your Enterprise Manager is at 192.168.122.16, the following commands show the expected responses:

    • The first command should report an HTTP-to-HTTPS error.

    • The second command should return 404 page not found.

    If there are errors, check that port 4318 is open on the Enterprise Manager server and that network connectivity between the agent host and the Enterprise Manager is working.

    If the curl commands produce the expected output and the agent status does not report errors after five minutes of startup, the agent is successfully sending metrics to the Enterprise Manager.

    chevron-rightAre the metrics available in the Enterprise Manager?hashtag

    To verify metrics are stored in the time series database, query a system OS metric. Example (assumes Enterprise Manager at 192.168.122.16 and default admin:mariadb credentials):

    The result should be a JSON object with one object per node in the data.result array.

    chevron-rightIs the time synchronized between Enterprise Manager and agents?hashtag

    When agents push metrics they include the agent’s timestamp and Enterprise Manager assumes those timestamps are accurate. If Enterprise Manager and monitored instances are not time-synchronized, you can observe:

    • Misaligned graphs

    • Missed alerts

    • Dropped/future/old samples that create “no data” gaps

    • Poor alignment with logs/traces/events

    Ensure clocks are synchronized (for example using NTP/chrony) to avoid these issues.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    repository installation instructionsarrow-up-right
    spinner
    Metric
    Description

    Flow Control Pause %

    Percent of time a node is paused due to Galera flow control backpressure.

    Flow Control Messages Sent

    "Slow-down" signals sent per second when a node is under pressure.

    Replication Queue Depth Received

    Size of the receive/apply queue; growth indicates apply lag.

    Write Conflicts

    Certification conflicts per second (failed concurrent writes on hot rows).

    Max Galera Replication Latency (s)

    Maximum observed replication/EVS latency per node.

    Transactions

    Per-node throughput: transactions received from peers and/or replicated out.

    hashtag
    Galera Nodes

    Per-node status summary with short state logic

    Attribute
    Description

    Instance / Status

    Is the server up? (Based on mariadb_up)

    Accept Queries

    Can this node take client traffic right now? (Based on wsrep_ready)

    Local State

    Where is the node in the Galera lifecycle? (Based on wsrep_local_state)

    Flow Control

    Is this node throttling or being throttled? (wsrep_flow_control_* rate > 0 → ON, otherwise OFF)

    Cluster Status

    Is the node in the Primary component? (Based on wsrep_cluster_status)

    Connected

    Is the node linked to the group? (Based on wsrep_connected)

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    MariaDB Server
    spinner
    spinner
    updates documentation
    limitations
    migrating your applications to use TLS
    migration scriptarrow-up-right
    migrate your applications to use TLS
    MaxScale Service
    spinner

    MariaDB MaxScale

    Dedicated dashboard for monitoring MaxScale proxies, detailing service status, query routing efficiency, client connections, and resource usage across the proxy layer.

    This dashboard shows MaxScale’s health and load, how backend servers are seen by each MaxScale, and the traffic/query volume flowing through it—plus cache efficiency from the Query Classifier.

    hashtag
    Topology Overview

    Provides a visual representation of the entire system's architecture and connectivity.

    Section
    Description

    hashtag
    System Metrics

    System Metrics provide comprehensive insights into the performance and health of individual system resources.

    Metric
    Description

    hashtag
    MaxScale Metrics

    Query Classifier Cache Metrics help in analyzing and optimizing query routing efficiency by tracking cache hits/misses and monitoring cache size.

    Metric
    Description

    hashtag
    Query Classifier Cache Metrics

    Evaluate query routing efficiency by tracking and optimizing cache metrics like hits, misses, and cache size.

    Metric
    Description

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Database Fleet Overview

    High-level dashboard providing an aggregated view of the entire database fleet, highlighting overall health, critical alerts, and resource consumption across multiple topologies.

    The "fleet" dashboard is the central inventory for all your monitored database topologies. It provides a hierarchical, at-a-glance overview of the health, status, and configuration of your entire database environment.

    hashtag
    Understanding the Dashboard Columns

    hashtag
    NAME Column

    This column displays the logical names of your databases and the individual server nodes within each topology. It also contains important status and quick-access icons.

    hashtag
    Status Icons

    Icon
    Applies To
    Meaning
    circle-info

    Quick-Access Icons

    This icon () is a shortcut that takes you directly to the detailed Grafana monitoring dashboard for that specific node or topology.

    hashtag
    TYPE Column

    This column shows the role of each node as automatically detected by Enterprise Manager (e.g., Primary, Replica, MaxScale, Galera Node, Standalone Server).

    circle-exclamation

    If this column shows '-', it indicates an issue. For instance, in a Primary/Replica topology, a server expected to be a Replica that shows '-' is likely not replicating correctly from the primary.

    hashtag
    LAST METRIC AGE Column

    This column shows the time elapsed since the agent on that node last reported metrics.

    triangle-exclamation

    If the age is 5 minutes or greater, it indicates a problem. Verify that the mema-agent is installed, running, and can communicate with the Enterprise Manager server on that host.

    hashtag
    Interacting with Your Databases

    You can perform actions on your databases and nodes using the three-dot menu (⋮) on the far right of each row.

    1

    hashtag
    Accessing the MaxScale GUI

    • Click the three-dot menu (⋮) next to a MaxScale node.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Metadata

    Details how to customize Kubernetes metadata, such as labels and annotations, for the resources generated and managed by the Operator.

    This documentation shows how to configure metadata in the MariaDB Enterprise Kubernetes Operator CRs.

    hashtag
    Children object metadata

    MariaDB and MaxScale resources allow you to propagate metadata to all the children objects by specifying the inheritMetadata field:

    This means that all the reconciled objects will inherit these labels and annotations. For instance, see the Services and Pods:

    hashtag
    Pod metadata

    You have the ability to provide dedicated metadata for Pods by specifying the podMetadata field in any CR that reconciles a Pod, for instance: MariaDB, MaxScale, Backup, Restore and SqlJobs:

    It is important to note that the podMetadata field supersedes the inheritMetadata field, therefore the labels and annotations provided in the former will override the ones in the latter.

    hashtag
    Service metadata

    Provision dedicated metadata for Services in the MariaDB resources can be done via the service, primaryService and secondaryService fields:

    In the case of MaxScale, you can also do this via the kubernetesService field.

    Refer to the to know more about the Service fields and MaxScale.

    hashtag
    PVC metadata

    Both MariaDB and MaxScale allow you to define a volumeClaimTemplate to be used by the underlying StatefulSet. You may also define metadata for it:

    hashtag
    Use cases

    Being able to provide metadata allows you to integrate with other CNCF landscape projects:

    hashtag
    Metallb

    If you run on bare metal and you use for managing the LoadBalancer objects, you can declare its IPs via annotations:

    hashtag
    Istio

    injects the data-plane container to all Pods, but you might want to opt-out of this feature in some cases:

    For instance, you probably don't want to inject the Istio sidecar to Backup Pods, as it will prevent the Jobs from finishing and therefore your backup process will hang.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Customer access to docker.mariadb.com

    Instructions for customers to authenticate and gain access to the private MariaDB Enterprise Docker registry to pull protected container images.

    This documentation aims to provide guidance on how to configure access to docker.mariadb.com in your MariaDB Enterprise Kubernetes Operator resources.

    hashtag
    Customer credentials

    MariaDB Corporation requires customers to authenticate when logging in to the . A Customer Download Token must be provided as the password. Customer Download Tokens are available through the MariaDB Customer Portal. To retrieve the customer download token for your account:

    • Navigate to the .

    • Log in using your .

    • Copy the Customer Download Token to use as the password when logging in to the MariaDB Enterprise Docker Registry.

    Then, configure a Kubernetes to authenticate:

    hashtag
    Openshift

    If you are running in Openshift, it is recommended to use the to configure . The global pull secret is automatically used by all Pods in the cluster, without having to specify imagePullSecrets explicitly.

    To configure the global pull secret, you can use the following commands:

    • Extract your :

    • Login in the MariaDB registry providing the customer download token as password:

    • Update the global pull secret:

    Alternatively, you can also create a dedicated Secret for authenticating:

    hashtag
    MariaDB

    In order to configure access to docker.mariadb.com in your MariaDB resources, you can use the imagePullSecrets field to specify your :

    As a result, the Pods created as part of the reconciliation process will have the imagePullSecrets.

    hashtag
    MaxScale

    Similarly to MariaDB, you are able to configure access to docker.mariadb.com in your MaxScale resources:

    hashtag
    Backup, Restore and SqlJob

    The batch Job resources will inherit the imagePullSecrets from the referred MariaDB, as they also make use of its image. However, you are also able to provide dedicated imagePullSecrets for these resources:

    When the resources from the previous examples are created, a Job with both mariadb-enterprise and backup-registry imagePullSecrets will be reconciled.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Features

    The MariaDB Enterprise MCP Server offers a comprehensive suite of tools, categorized into standard database operations, advanced vector functionalities, and workflow orchestration.

    hashtag
    Standard Database Operations

    These tools provide fundamental control and insight into your MariaDB environment. By default, operations are read-only (MCP_READ_ONLY = true) but can be configured for write access (MCP_READ_ONLY = false).

    • list_databases: Discovers all accessible databases.

    • list_tables: Enumerates all tables within a specified database.

    • get_table_schema: Retrieves the detailed schema for a specific table, including column names, data types, keys, and default values.

    • execute_sql: Executes read-only SQL queries like SELECT, SHOW, and DESCRIBE. Supports parameterized queries for enhanced security.

    • create_database: Creates a new database if it does not already exist.

    hashtag
    Harnessing the Power of Vectors: Advanced AI Functionality

    The server’s integrated vector functionality enables semantic search and other embedding-based operations directly within your database.

    hashtag
    Vector Store Management

    • create_vector_store: Creates a new table optimized as a vector store. The schema includes columns for id, document, embedding (VECTOR type), and metadata (JSON). Users can specify the embedding model and distance function (e.g., cosine, euclidean) at creation.

    • list_vector_stores

    hashtag
    Embedding and Search Operations

    • insert_docs_vector_store: Inserts documents and associated metadata into a vector store. The server manages the generation of embeddings using a configured service.

    • search_vector_store: Performs semantic similarity searches by generating an embedding for a user query and finding the 'k' most similar documents in the specified vector store.

    hashtag
    Workflow Orchestration

    The server exposes powerful orchestration endpoints that allow an AI agent to execute an entire RAG pipeline through a single, secure interface.

    • Ingestion (/orchestrate/ingestion): Triggers the ingestion of documents into a specified vector store, including the chunking and embedding processes.

    • Generation (/orchestrate/generation): Executes a query against a set of documents, performing retrieval and generating a final, context-aware response from an LLM.


    hashtag
    Tool Summary

    Tool Name
    Description
    Category

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Storage

    This operator gives you flexibility to define the storage that will back the /var/lib/mysql data directory mounted by MariaDB.

    hashtag
    Configuration

    The simplest way to configure storage for your MariaDB is:

    This will make use of the default StorageClass available in your cluster, but you can also provide a different one:

    Under the scenes, the operator is configuring the StatefulSet's volumeClaimTemplate property, which you are also able to provide yourself:

    hashtag
    Volume resize

    circle-exclamation

    The StorageClass used for volume resizing must define allowVolumeExpansion = true.

    It is possible to resize your storage after having provisioned a MariaDB. We need to distinguish between:

    • PVCs already in use.

    • StatefulSet storage size, which will be used when provisioning new replicas.

    It is important to note that, for the first case, your StorageClass must support volume expansion by declaring the allowVolumeExpansion = true. In such case, it will be safe to expand the storage by increasing the size and setting resizeInUseVolumes = true:

    Depending on your storage provider, this operation might take a while, and you can decide to wait for this operation before the MariaDB becomes ready by setting waitForVolumeResize = true. Operations such as and will not be performed if the MariaDB resource is not ready.

    hashtag
    Ephemeral storage

    Provisioning standalone MariaDB instances with ephemeral storage can be done by setting ephemeral = true:

    This may be useful for multiple use cases, like provisioning ephemeral MariaDBs for the integration tests of your CI.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Overview

    hashtag
    Introduction to MariaDB AI RAG

    MariaDB AI RAG is an enterprise-grade Retrieval-Augmented Generation (RAG) solution that integrates with MariaDB to provide AI-powered document processing, semantic search, and natural language generation capabilities.

    The system enables organizations to leverage their document repositories and databases for AI-powered search and generation. By combining the reliability of MariaDB with modern AI capabilities, AI RAG provides accurate, context-aware responses based on your organization's proprietary data.

    hashtag
    System Architecture

    MariaDB AI RAG follows a modular architecture with the following key components:

    hashtag
    Core Components

    1. Document Ingestion Module

      • Handles document uploads and text extraction

      • Supports multiple file formats (PDF, DOCX, TXT, etc.)

    hashtag
    Architecture Diagram

    hashtag
    Data Flow

    1. Document Processing Flow

      • Documents are uploaded via the API

      • Text is extracted based on document format

    hashtag
    System Requirements

    • Database: MariaDB 10.6+ or MySQL 8.0+

    • Operating System: Linux (Debian/Ubuntu, RHEL/CentOS), Windows Server

    • Hardware: Minimum 4 CPU cores, 8GB RAM, 100GB storage

    For detailed installation instructions, see the .

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    spinner

    User Management

    Explains the Role-Based Access Control (RBAC) system, including how to create custom roles, manage base permissions (admin, edit, view, sql), and add or modify users.

    MariaDB Enterprise Manager uses a Role-Based Access Control (RBAC) system to manage user permissions. This guide explains how to manage users and create custom roles to fit your organization's security needs.

    hashtag
    Accessing User Management

    1

    Adding Databases

    Guide to registering database topologies in the UI and using the integrated helper tool to generate setup commands for installing monitoring agents.

    circle-exclamation

    To install mema-agent, you need to setup

    This guide outlines the two primary methods for registering and monitoring your database topologies in MariaDB Enterprise Manager: adding a standalone server directly or adding a full topology via its MaxScale instance.

    Built-in Alert Rules

    Details the pre-configured rules for monitoring MariaDB Server, Galera Cluster, and system health, including sustained-duration triggers to prevent alert fatigue.

    MariaDB Enterprise Manager includes a comprehensive set of pre-configured alert rules to provide production-ready monitoring for your entire database stack out-of-the-box. These alerts are built on the integrated Grafana Alerting engine and are designed to detect common issues across your MariaDB Servers, Galera Clusters, MaxScale instances, and the underlying operating systems.

    A key feature of these rules is the use of a "sustained for" duration. This means a condition must remain true for a specified period (e.g., 3 minutes) before an alert will fire. This prevents alert fatigue from brief, transient spikes and ensures you are only notified of persistent, actionable problems.

    hashtag
    MariaDB Server

    Export metrics

    Explains two methods for exporting metrics: scraping the built-in Prometheus federation endpoint or configuring the agent to push data directly to OTLP-compatible external systems.

    MariaDB Enterprise Manager provides two primary methods for exporting metrics, allowing you to integrate with external observability platforms for aggregation or long-term retention.

    1

    hashtag
    Scraping the built-in Prometheus endpoint (Server-to-Server)

    Workspace

    Overview of the Workspace environment, which provides collaborative tools for DBAs and developers including a Query Editor, ERD Designer, and Database Administration tools.

    Workspace enhances MariaDB Enterprise Manager by adding query editing, visual schema management, and ERD design. It provides a collaborative environment for DBAs, developers, and analysts.

    hashtag
    Query Editor

    Feature
    Description

    External MariaDB

    Describes how the Operator can manage resources or connections for MariaDB instances that reside outside the local Kubernetes cluster.

    MariaDB Enterprise Kubernetes Operator supports managing resources in external MariaDB instances i.e running outside of the Kubernetes cluster where the operator runs. This feature allows to manage users, privileges, databases, run SQL jobs declaratively and taking backups using the same CRs that you use to manage internal MariaDB instances.

    hashtag
    ExternalMariaDB configuration

    The ExternalMariaDB

    Introduction

    General introduction to the Operator's capabilities, benefits for database operations, and its role in managing MariaDB within Kubernetes clusters.

    MariaDB Enterprise Kubernetes Operator provides a seamless way to run and operate containerized versions of MariaDB Enterprise Server and MaxScale on Kubernetes, allowing you to leverage Kubernetes orchestration and automation capabilities. This document outlines the features and advantages of using Kubernetes and the MariaDB Enterprise Kubernetes Operator to streamline the deployment and management of MariaDB and MaxScale instances.

    hashtag
    What is Kubernetes?

    Kubernetes is more than just a container orchestrator; it is a comprehensive platform that provides APIs for managing both applications and the underlying infrastructure. It automates key aspects of container management, including deployment, scaling, and monitoring, while also handling essential infrastructure needs such as networking and storage. By unifying the management of applications and infrastructure, Kubernetes simplifies operations and improves efficiency in cloud-native environments.

    Authentication

    A cornerstone of the Enterprise edition is its ability to integrate with centralized secret managers, eliminating the need for static credentials stored in local or .env files. The server dynamically fetches database credentials and API keys at startup, ensuring a secure and compliant operational posture.

    hashtag
    Key Features

    ERD Designer

    Explains the ERD Designer tool, a visual interface for creating entity-relationship diagrams, generating models from live databases, and modeling tables and indexes.

    Enterprise manager provides a visual interface for creating entity relationship diagrams (ERD) and for observing existing database schemas, so you can quickly understand table relationships, identify dependencies, and visually assess the impact of schema changes before implementation.

    This procedure outlines the steps required to access and utilize the ERD Designer within the Workspace section of Enterprise Manager UI.

    1. From the main Workspace screen, click the "Run Queries" card.\

    MariaDB AI RAG

    MariaDB AI RAG is an enterprise-grade Retrieval-Augmented Generation (RAG) solution that integrates with MariaDB to provide AI-powered document processing, semantic search, and natural language generation capabilities.

    hashtag
    Documentation Contents

    hashtag

    Deployment

    This section provides comprehensive guides for deploying the MariaDB AI RAG system in various environments.

    hashtag
    Documentation in This Section

    hashtag

    chmod +x install-enterprise-manager.sh
    ./install-enterprise-manager.sh
    sudo yum install -y mema-agent
    CREATE USER 'monitor'@'localhost' IDENTIFIED BY '<password>';
    GRANT PROCESS, BINLOG MONITOR, REPLICA MONITOR, REPLICATION MASTER ADMIN ON *.* TO 'monitor'@'localhost';
    CREATE USER 'monitor'@'localhost' IDENTIFIED BY '<password>';
    GRANT PROCESS, BINLOG MONITOR, REPLICA MONITOR, REPLICATION MASTER ADMIN ON *.* TO 'monitor'@'localhost';
    docker login docker.mariadb.com
    wget https://dlm.mariadb.com/<Customer_Download_Token>/enterprise-release-helpers/install-enterprise-manager.sh
    CREATE USER 'monitor'@'<Enterprise_Manager_IP>' IDENTIFIED BY '<password>';
    GRANT REPLICA MONITOR ON *.* TO 'monitor'@'<Enterprise_Manager_IP>';
    sudo yum install -y mema-agent
    sudo apt install -y mema-agent
    Enable MaxScale info logging
    maxctrl alter maxscale log_info=true
    Disable MaxScale info logging
    maxctrl alter maxscale log_info=false
    Expected curl checks
    $ curl http://192.168.122.16:4318
    Client sent an HTTP request to an HTTPS server.
    
    $ curl -k https://192.168.122.16:4318
    404 page not found
    Query metric
    curl -u admin:mariadb -k "https://192.168.122.16:8090/prometheus/api/v1/query?query=node_os_info"
    curl -LsSO https://dlm.mariadb.com/enterprise-release-helpers/mariadb_es_repo_setup
    # Make script executable and run
    chmod +x mariadb_es_repo_setup
    sudo ./mariadb_es_repo_setup --token="YOUR_TOKEN_HERE" --apply
    kubectl get mxs maxscale-galera -o yaml > maxscale-galera.yaml
    kubectl delete mxs maxscale-galera
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
    +   required: true
    +   galeraServerSSLMode: SERVER_X509
    curl -sLO https://operator.mariadb.com/scripts/migrate_galera_ssl.sh
    chmod +x migrate_galera_ssl.sh
    ./migrate_galera_ssl.sh <mariadb-name>
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
    +   galeraSSTEnabled: true
    +   galeraClientSSLMode: VERIFY_IDENTITY
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    + tls:
    +   enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      storage:
        size: 1Gi
    rag-mcp
    "
    :
    {
    "serverUrl": "http://localhost:8002/mcp",
    "headers": {
    "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xyz.abc"
    }
    }
    }
    }

    Project

    Displays the currently selected project label.

    Name

    Shows the selected database/topology name.

    Version

    Shows MaxScale version.

    Topology Info

    Count of nodes grouped by type (e.g., server, MaxScale).

    Backend Server States

    Timeline of each backend server’s role and health as seen by each MaxScale. Values are color-mapped to: Read, Write, Up, Down. Use this to spot failovers, read/write role flips, or outages over time.

    Maxscale Uptime by Instance

    Uptime in seconds for each MaxScale instance.

    CPU Utilisation

    Effective CPU usage (%) per instance, excluding idle/iowait/guest time.

    Memory Usage

    Working memory in use (%) per instance (total minus free/buffers/cache/slab).

    Network Traffic

    Per-interface throughput (bits/s). Transmit is plotted below the axis (negative-Y), receive above—making direction easy to read.

    MaxScale Processing Load

    Percentage of total CPU time consumed by the MaxScale process over time (a direct view of router load).

    Connections

    Active backend connections per server as observed by MaxScale.

    Operations

    Active operations per backend server (ongoing requests tracked by MaxScale).

    Packets Read/Writes

    Per-server packet read and write rates (packets/s). Useful for spotting uneven load distribution.

    QPS

    Queries per second passing through MaxScale across the selected instances (overall routing throughput).

    Cache Hits vs Misses

    Per-second hits and misses in the Query Classifier cache. Analyze the relationship to assess effectiveness.

    Cache Size

    Current size of the Query Classifier cache (bytes). Monitor growth with Hits/Misses for tuning insights.

    spinner
    https://mariadb.com/downloads/enterprise-tooling/ai-rag/arrow-up-right
    https://mariadb.com/downloads/enterprise-tooling/ai-rag/arrow-up-right
    sudo rpm -i ai-rag-*.rpm
    # For Debian/Ubuntu
    sudo apt install -y mema-agent
    -l
    Agent logs
    sudo journalctl -u mema-agent.slice --no-pager
    : Lists all tables in a database that are identified as vector stores.
  • delete_vector_store: Securely removes a vector store table.

  • create_database

    Creates a new database if it does not already exist.

    Standard Database Operations

    create_vector_store

    Creates a new table optimized as a vector store.

    Vector & AI Functionality

    list_vector_stores

    Lists all tables identified as vector stores.

    Vector & AI Functionality

    delete_vector_store

    Securely removes a vector store table.

    Vector & AI Functionality

    insert_docs_vector_store

    Inserts documents and metadata into a vector store.

    Vector & AI Functionality

    search_vector_store

    Performs a semantic similarity search on a vector store.

    Vector & AI Functionality

    rag_ingestion

    Triggers the full document ingestion pipeline.

    Workflow Orchestration

    rag_generation

    Synthesizes retrieved information with the user's query to generate a final, context-aware response.

    Workflow Orchestration

    list_databases

    Discovers all accessible databases.

    Standard Database Operations

    list_tables

    Enumerates all tables within a specified database.

    Standard Database Operations

    get_table_schema

    Retrieves the detailed schema for a specific table.

    Standard Database Operations

    execute_sql

    Executes read-only SQL queries.

    spinner

    Standard Database Operations

    SQL Editor

    Write, run, and debug SQL with parallel query execution in multi-tab sessions.

    SQL Code Completion

    Context-sensitive suggestions for keywords and objects to speed authoring and reduce errors.

    SQL Code Formatter

    Automatically formats SQL for readability and consistent style.

    SQL Syntax Highlighting

    Color syntax highlighting for quicker scanning and fewer mistakes.

    SQL Snippets

    Save and reuse your favorite SQL blocks across sessions and teams.

    SQL History

    Running history of executed SQL with quick replay into the editor.

    Multiple Connections

    Open simultaneous connections (dev/test/prod) and work in parallel, tab-isolated.

    Open/Edit/Save SQL Files

    Load scripts, edit, and save changes without leaving the workspace.

    Export Result Sets

    Export results as CSV, JSON, or SQL for hand-offs and audits.

    Display multiple Result Sets

    View multiple result sets in the same window.

    Vertical Results Mode

    Columnar display for wide rows to improve readability of tall/wide data.

    Result Set Limits

    Cap returned rows to keep queries responsive and safe in production.

    Result Visualizations

    Visualize results as line, bar, or scatter charts for quick trend checks.

    Grid Operations

    Search, filter, group, and control column visibility directly in the result sets.

    hashtag
    ERD Designer

    Feature
    Description

    ER Diagramming

    Build complete entity-relationship diagrams from your database structures.

    Auto Layout

    Automatically arrange large models for clear, navigable diagrams.

    Model Tables, Indexes

    Manage MariaDB data-related objects.

    Create from Live Databases

    Generate ERD models directly from live schemas.

    hashtag
    Database Administration

    Feature
    Description

    Schema Inspector

    Detailed metadata views for all schema objects to understand structure and dependencies.

    Object Browser

    Navigate and explore databases, tables, views, routines, and triggers.

    Object Editor

    Create, modify, and delete schema objects together with managing constraints, renaming, copying objects relationships.

    User Management

    View, edit, create, delete database users and privileges.

    Process List Viewer

    View and manage live sessions/commands.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    spinner
    spinner
    spinner
    resource is similar to the internal
    MariaDB
    resource, but we need to provide a
    host
    ,
    username
    and a reference to a
    Secret
    containing the user password. These will be the connection details that the operator will use to connect to the external MariaDB in order to manage resources, make sure that the specified user has enough privileges:

    If you need to use TLS to connect to the external MariaDB, you can provide the server CA certificate and the client certificate Secrets via the tls field:

    When using TLS, if you don't want to send the client certificate during the TLS handshake, please set tls.mutual=false:

    As a result, you will be able to specify the ExternalMariaDB as a reference in multiple objects, the same way you would do for a internal MariaDB resource.

    As part of the ExternalMariaDB reconciliation, a Connection will be created whenever the connection template is specified. This could be handy to track the external connection status and declaratively create a connection string in a Secret to be consumed by applications to connect to the external MariaDB.

    hashtag
    Supported objects

    Currently, the ExternalMariaDB resource is supported by the following objects:

    • Connection

    • User

    • Grant

    • Database

    • Backup

    • SqlJob

    You can use it as an internal MariaDB resource, just by setting kind to ExternalMariaDB in the mariaDBRef field:

    When the previous example gets reconciled, an user will be created in the referred external MariaDB instance.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: ExternalMariaDB
    metadata:
      name: external-mariadb
    spec:
      host: mariadb.example.com
      port: 3306
      username: root
      passwordSecretKeyRef:
        name: mariadb
        key: password
      connection:
        secretName: external-mariadb
        healthCheck:
          interval: 5s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: ExternalMariaDB
    metadata:
      name: external-mariadb
    spec:
      host: mariadb.example.com
      port: 3306
      username: root
      passwordSecretKeyRef:
        name: mariadb
        key: password
      tls:
        enabled: true
        clientCertSecretRef:
          name: client-cert-secret
        serverCASecretRef:
          name: ca-cert-secret
      connection:
        secretName: external-mariadb
        healthCheck:
          interval: 5s
          retryInterval: 10s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: ExternalMariaDB
    metadata:
      name: external-mariadb
    spec:
      host: mariadb.example.com
      port: 3306
      username: root
      passwordSecretKeyRef:
        name: mariadb
        key: password
      tls:
        enabled: true
        mutual: false
        clientCASecretRef:
          name: client-ca-secret
      connection:
        secretName: external-mariadb
        healthCheck:
          interval: 5s
          retryInterval: 10s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user-external
    spec:
      name: user
      mariaDbRef:
        name: external-mariadb
        kind: ExternalMariaDB
      passwordSecretKeyRef:
        name: mariadb
        key: password
      maxUserConnections: 20
      host: "%"
      cleanupPolicy: Delete
      requeueInterval: 10h
      retryInterval: 30s

    Select "Manage MaxScale".

    2

    hashtag
    Configuring SSO in maxscale.cnf

    To enable SSO, add the following parameters to your MaxScale configuration file (maxscale.cnf) on the MaxScale host:

    Parameter
    Description

    🟢 Green

    Aggregated Topology, Server, MaxScale

    The component and all its members are running correctly.

    🔴 Red

    Aggregated Topology, Server, MaxScale

    One or more members in the topology are down or not functioning properly.

    ⚫ Gray

    Server

    The server's status is unknown. This typically happens if the MaxScale node managing it is down.

    spinner
    Processes metadata extraction
  • Manages document storage and versioning

  • Chunking Module

    • Divides documents into semantically meaningful segments

    • Supports multiple chunking strategies (fixed size, recursive, semantic)

    • Optimizes chunk size and overlap for retrieval quality

    • Preserves document structure and metadata

  • Vector Database Integration

    • Creates and stores vector embeddings for document chunks

    • Integrates with MariaDB's vector search capabilities

    • Enables efficient similarity search

    • Manages vector indexes and optimizations

  • Retrieval Module

    • Converts queries into vector embeddings

    • Performs semantic similarity search

    • Ranks and filters results based on relevance

    • Supports metadata-based filtering

  • Generation Module

    • Integrates with multiple LLM providers (OpenAI, Google, Anthropic)

    • Constructs prompts with retrieved context

    • Generates natural language responses

    • Supports streaming output for real-time display

  • Orchestration Module

    • Coordinates the end-to-end RAG pipeline

    • Manages asynchronous processing

    • Handles error recovery and retries

    • Provides status monitoring and reporting

  • API Interface

    • Exposes RESTful endpoints for all functionality

    • Implements JWT-based authentication

    • Manages user permissions and access control

    • Provides comprehensive error handling and logging

  • Documents are divided into chunks
  • Chunks are converted to vector embeddings

  • Embeddings are stored in the vector database

  • Query Processing Flow

    • User submits a query via the API

    • Query is converted to a vector embedding

    • Similar document chunks are retrieved

    • Retrieved chunks are ranked by relevance

    • Top chunks are used as context for generation

    • LLM generates a response based on the context

  • Database Integration Flow

    • Database table/view is selected for ingestion

    • Rows are processed as individual documents

    • Column mapping defines content and metadata

    • Text is chunked and embedded

    • Embeddings are stored with source metadata

  • Network: Internet connectivity for external AI services
  • Dependencies: Python 3.9+, FastAPI, SQLAlchemy, PyTorch (optional for local embeddings)

  • Installation Guide
    spinner
    hashtag
    Open Settings

    Click the Settings icon (⚙️) in the left navigation bar.

    2

    hashtag
    Open User Management

    Select User management.

    hashtag
    Permissions, Roles & Users

    In MariaDB Enterprise Manager, permissions, roles, and users are organized in a clear structure:

    • Permissions define specific actions a user can perform (viewing data, editing settings, accessing the SQL editor).

    • Roles are collections of one or more permissions grouped together. They can be pre-configured (for example admin, monitoring-admin, viewer) or custom-defined.

    • Users are assigned one or more roles and inherit the associated permissions.

    This structure allows administrators to manage access by assigning roles to users rather than setting individual permissions per user.

    hashtag
    The Admin Permission

    Access to the User Management page is restricted based on a user's assigned permissions.

    • ✅ Only users with admin permissions (assigned via a role) can add, modify, or remove other users and roles.

    • ❌ Non-admin users cannot access or change these settings, but they can update their own password via their Profile page.\

    hashtag
    Default Roles

    Enterprise Manager ships with three pre-configured roles:

    • admin: Has all permissions. Can do everything, including managing other users.

    • monitoring-admin: Can manage databases and monitoring, but cannot manage users or roles.

    • viewer: Has read-only access to monitoring data and can use the Workspace.

    circle-info

    Create custom roles instead of editing pre-configured ones

    While it's possible to edit or delete the pre-configured roles (admin, viewer, etc.), the recommended best practice is to create a new custom role to fit your specific permission requirements.

    Leaving the pre-configured roles unmodified ensures you always have a known, baseline configuration to reference or fall back on.

    Roles (pre-configured or custom) are built from combinations of the following base permissions:

    hashtag
    Base Permission in MariaDB Enterprise Manager

    Permission
    Description

    admin

    Can view and manage all users and roles.

    edit

    Can manage databases and monitoring settings. Requires the view permission to be selected as well.

    view

    Can view dashboards and monitoring data.

    sql

    Can access the Query Editor and ERD tools in the Workspace. Enabling this allows you to set a query row limit for the role.

    hashtag
    Managing Roles

    Only users with the admin permission can create or modify roles.

    hashtag
    Creating a Custom Role

    1

    hashtag
    Roles tab

    From the User Management page, select the Roles tab.

    2

    hashtag
    Add role

    Click the Add button.

    3

    hashtag
    Name role

    Enter a name for your new role (e.g., "Developer" or "Auditor").

    4

    hashtag
    Select base permissions

    Select the checkboxes for the Base Permissions you want to grant.

    5

    hashtag
    Confirm

    Click Add.

    circle-info

    hashtag
    Modifying or Deleting a Role

    1

    hashtag
    Locate role

    From the Roles tab, locate the custom role you wish to change.

    2

    hashtag
    Open role menu

    Click the three-dot menu (⋮) on the right side of the role's row.

    3

    hashtag
    Choose action

    Select one of the following options:

    hashtag
    Managing Users

    hashtag
    Adding a User

    1

    hashtag
    Users tab

    From the User Management page, ensure you are on the Users tab.

    circle-info

    Users tab show the list of User associated with your Enterprise Manager instance.

    The User you're logged in with to Enterprise Manager is shown in bold.

    2

    hashtag
    Add user

    Click the Add button.

    3

    hashtag
    Enter credentials

    Enter a unique Username and a secure Password.

    4

    hashtag
    Assign role

    Select a Role for the user from the dropdown menu.

    5

    hashtag
    Confirm

    Click Add.

    hashtag
    Modifying or Deleting a User

    1

    hashtag
    Locate user

    From the Users tab, locate the user you wish to change.

    2

    hashtag
    Open user menu

    Click the three-dot menu (⋮) on the right side of the user's row.

    3

    hashtag
    Choose action

    Select one of the following options:

    hashtag
    The Default Admin User

    Upon installation of MariaDB Enterprise Manager, a default admin user is created with an automatically generated password.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    hashtag
    Option 1: Adding a Standalone Server or Topology (Without MaxScale)

    Use this method for a single MariaDB Server or to manually define a Primary/Replica or Galera cluster.

    1

    hashtag
    Prepare your server(s)

    First, perform these actions on each MariaDB Server you plan to add.

    1. Install the Agent package.

    1. Create the Enterprise Manager user (allows the Enterprise Manager server to connect remotely):

    Replace <Enterprise_Manager_IP> with the IP of your Enterprise Manager server and <password> with a secure password.

    1. Create the Local Agent user (required for the agent to collect detailed metrics from the local database instance):

    Replace <password> with a secure password.

    2

    hashtag
    Register in the UI

    1. Go to your MariaDB Enterprise Manager web interface (for example https://<Enterprise_Manager_IP>:8090).

    3

    hashtag
    Standalone server or a Topology

    To add a Standalone Server: Click Add and proceed to the next step (4).

    To create a Topology:

    4

    hashtag
    Link the Agent(s) 🔗

    For each server added, link its agent:

    1. Find the server in the inventory list, click the three-dot menu (⋮), and select

    hashtag
    Option 2: Adding a Topololgy (With MaxScale)

    Use this method to add a complete primary/replica or Galera cluster that is managed by one or more MaxScale instances.

    1

    hashtag
    Prepare all servers in the topology

    Perform these actions on every server in the topology: the MaxScale instance(s) and each backend MariaDB Server attached.

    • Install the Agent package on all servers.

    • Create a Local Agent user on each backend MariaDB Server:

    Replace <password> with a secure password.

    2

    hashtag
    Register the MaxScale instance in the UI 🖥️

    1. Begin the Add Database process:

    3

    hashtag
    Link all a 🔗

    You must link the agent on every server in the topology to Enterprise Manager. The UI will show the MaxScale instance and discovered backend servers marked as "Not Registered."

    For each server in the list (start with the MaxScale instance, then each MariaDB server):

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    Alert name
    Description

    MariadbInstanceDown

    MariaDB instance down for 3 minutes (sustained for 3m). Triggers when the exporter reports the instance as down (mariadb_up = 0) or when no sample from mariadb_up has been received for more than 120 seconds.

    ReplicaProcessDown

    MariaDB instance has a Replica process Down (sustained for 3m). Triggers when replication is unhealthy: the I/O or SQL thread is stopped, or Seconds_Behind_Master is missing (replica not reporting progress).

    ReplicaSecondsBehindPrimary

    MariaDB replica is more than 600s behind primary (sustained for 3m). Triggers when replication lag exceeds 600 seconds.

    HighUtilizationMaxConnections

    MariaDB instance has high connection utilization (sustained for 5m). Triggers when Threads_connected exceeds ~80% of max_connections.

    MariaDBInstanceRestart

    MariaDB instance restarted recently (sustained for 5m). Triggers when server uptime is below 1 hour, indicating a recent restart.

    MariaDBDeadlockFound

    MariaDB Deadlock found in the last 15m (sustained for 5m). Triggers when the count of InnoDB deadlocks increases compared to 15 minutes ago.

    hashtag
    Galera Cluster

    Alert name
    Description

    GaleraClusterDown

    Galera instance down for 5 minutes (sustained for 5m). Triggers when the cluster is not in Primary state (wsrep_cluster_status ≠ 1) or the node is not ready (wsrep_ready ≠ 1).

    GaleraNodeNotReady

    Galera node not ready (state ≠ 4) for 5m (sustained for 5m). Triggers when the node is not in Synced state and it’s not a temporary DESYNC (desync counter did not change in the last 5 minutes).

    GaleraInWrongState

    Galera instance is in an unexpected state (sustained for 5m). Triggers when the node’s state comment isn’t one of the normal values (Synced / Donor / Joining / Joined / Waiting for SST).

    GaleraClusterDonorFallingBehind

    Galera donor lagging (recv queue > 100) for 5m (sustained for 5m). Triggers when a Donor node (state=2) accumulates a large receive queue, indicating it’s falling behind replication.

    GaleraClusterSizeChanged

    Galera cluster size changed in last 15m (sustained for 5m). Triggers when the cluster size increases within 15 minutes.

    hashtag
    MaxScale

    Alert name
    Description

    MaxScaleInstanceDown

    MaxScale down for 3 minutes (sustained for 3m). Triggers when no recent MaxScale metrics have been received for more than 120 seconds (e.g., MaxScale down or exporter/scrape pipeline issue).

    MaxScaleNoPrimary

    MaxScale has no primary for 3 minutes (sustained for 3m). Triggers when MaxScale reports zero servers with role = Primary/Master.

    hashtag
    Node/OS

    Alert name
    Description

    NodeFilesystemSpaceUsage

    Filesystem disk space is above 90% (sustained for 1h). Triggers when disk space used exceeds 90% on a writable filesystem.

    NodeFilesystemSpaceFillingUp

    Filesystem predicted to run out of space within ~24h (sustained for 1h). Triggers when usage is above 80% and the trend (predictive model) indicates free space will reach zero within ~24 hours; excludes read-only filesystems.

    NodeMemoryHighUtilization

    Instance is running out of memory > 95% (sustained for 15m). Triggers when memory utilization exceeds 95%.

    NodeCPUHighUtilization

    Instance is running out of CPU > 90% (sustained for 15m). Triggers when CPU utilization exceeds 90% over a 5-minute window.

    NodeFilesystemAlmostOutOfFiles

    Filesystem has less than 3% inodes left (sustained for 1h). Triggers when available inodes drop below 3% on a writable filesystem.

    NodeNetworkReceiveErrs

    Network interface has a high receive-error rate (sustained for 1h). Triggers when receive errors exceed 1% of total received packets over a 2-minute rate window.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner

    The Prometheus server integrated within MariaDB Enterprise Manager exposes its metrics via a standard federation endpoint. You can configure your own external Prometheus server (or any Prometheus-compatible system) to "scrape" these metrics.

    Identify the Federation Endpoint

    The endpoint is located on your MariaDB Enterprise Manager server at the /prometheus/federate path. The full URL will be:

    https://<Enterprise_Manager_IP>:8090/prometheus/federate

    Configure Your External Prometheus

    In your external Prometheus server's configuration file (prometheus.yml), add a new scrape job to target the Enterprise Manager endpoint.

    After adding this configuration and restarting your external Prometheus, it will begin scraping and storing all metrics from your MariaDB Enterprise Manager instance.

    2

    hashtag
    Pushing metrics with the OpenTelemetry agent (Agent-to-External)

    The mema-agent can be configured to push metrics directly to a third-party monitoring system that supports the OpenTelemetry Protocol (OTLP). This method sends data straight from the agent to your external endpoint, bypassing the built-in Prometheus server.

    To configure this, run the mema-agent setup command on your MariaDB Server or MaxScale host with the appropriate flags.

    Command examples

    • For a MariaDB Server host:

    • For a MaxScale host:

    Flag descriptions

    Flag
    Description
    circle-check

    For a full list of all available flags and their descriptions, run mema-agent help setup on the host where the agent is installed.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner

    hashtag
    Why Kubernetes?

    Kubernetes brings several key benefits to the table when managing applications in a containerized environment:

    • Standardization: Kubernetes relies on standard APIs for managing applications and infrastructure, making it easier to ensure uniformity across various environments. It acts as a common denominator across cloud providers and on-premises.

    • Automation: Kubernetes APIs encapsulate operational best practises, minimizing the need for manual intervention and improving the efficiency of operations.

    • Cost Effectiveness: Having an standardized way to manage infrastructure across cloud providers and automation to streamline operations, Kubernetes helps reducing the infrastructure and operational costs.

    hashtag
    What is a Kubernetes Operator?

    Kubernetes has been designed with flexibility in mind, allowing developers to extend its capabilities through custom resources and operators.

    In particular, MariaDB Enterprise Kubernetes Operator, watches the desired state defined by users via MariaDB and MaxScale resources, and takes actions to ensure that the actual state of the system matches the desired state. This includes managing compute, storage and network resources, as well as the full lifecycle of the MariaDB and MaxScale instances. Whenever the desired state changes or the underlying infrastructure is modified, the Operator takes the necessary actions to reconcile the actual state with the desired state.

    Operational expertise is baked into the MariaDB and MaxScale APIs and seamlessly managed by the Operator. This includes automated backups, restores, upgrades, monitoring, and other critical lifecycle tasks, ensuring reliability in Day 2 operations.

    hashtag
    MariaDB Enterprise Kubernetes Operator Features

    • Provision and Configure MariaDB and MaxScale Declaratively: Define MariaDB Enterprise Server and MaxScale clusters in YAML manifests and deploy them with ease in Kubernetes.

    • Multiple Highly Availablearrow-up-right Topologies supported:

      • Asynchronous Replicationarrow-up-right

      • as a Database proxy to load balance requests and perform failover/switchover operations.

    • Cluster-Aware Rolling Updates: Perform rolling updates on MariaDB and MaxScale clusters, ensuring zero-downtime upgrades with no disruptions to your applications.

    • Flexible Storage Configuration and Volume Expansion: Easily configure storage for MariaDB instances, including the ability to expand volumes as needed.

    • Physical Backups based on and . By leveraging the feature, backups are taken without long read locks or service interruptions.

    • Logical Backups based on .

    • Backup Management: Take, restore, and schedule backups with multiple storage types supported: S3, Azure Blob Storage, PVCs, Kubernetes volumes and VolumeSnapshots..

    • Policy-Driven Backup Retention: Implement backup retention policies with bzip2 and gzip compression.

    • Bootstrap New Instances: Initialize new MariaDB instances from backups, S3, Azure Blob Storage, PVCs or VolumeSnapshots to quickly spin up new clusters.

    • Point-In-Time-Recovery: Archive binary logs to enable point-in-time restoration and significantly reduce RPO.

    • TLS Certificate Management: Issue, configure, and rotate TLS certificates and Certificate Authorities (CAs) for secure connections.

    • Advanced TLS Support: customize certificate lifetime, private key algorithm and TLS version.

    • Native Integration with cert-manager: Leverage , the de-facto standard for managing certificates in Kubernetes, to enable issuance with private CAs, public CAs and HashiCorp Vault.

    • Prometheus Metrics: Expose metrics using the MariaDB and MaxScale Prometheus exporters.

    • Native Integration with prometheus-operator: Leverage to scrape metrics from MariaDB and MaxScale instances.

    • Declarative User and Database Management: Manage users, grants, and logical databases in a declarative manner using Kubernetes resources.

    • Secure, immutable and lightweight images based on Red Hat UBI, available for multiple architectires (amd64, arm64 and ppc64le).

    • by Red Hat.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    Multi-layered Authentication: JWT-based authentication (HS256/RS256) with bcrypt password hashing
  • Adaptive Architecture: Intelligent tool registration based on service availability

  • Role-Based Access Control (RBAC): Fine-grained permission management

  • Multiple Deployment Modes: Standalone, 1Password, Local Vault, and HCP Vault

  • Database-Enforced User Validation: Shared database ensures only registered users can access services

  • hashtag
    Authentication Flow

    hashtag
    1. User Registration

    hashtag
    2. User Login

    hashtag
    3. Authenticated Request

    hashtag
    Deployment Modes

    hashtag
    1. Standalone

    Purpose: Simple deployment with direct environment variables

    Configuration: Direct environment variables

    Key Settings:

    When to Use: Development, testing, small deployments, No external secret management available

    Startup:

    hashtag
    2. 1Password

    Purpose: Secure secret management using 1Password CLI

    Configuration: op:// secret references

    Key Settings:

    Prerequisites:

    1. Install 1Password CLI

    2. Authenticate: op signin

    3. Create vault and items with required secrets

    Startup:

    When to Use: Team environments, shared secrets, Production

    hashtag
    3. Local Vault

    Purpose: Development with local HashiCorp Vault

    Configuration: Local Vault server

    Key Settings:

    Setup:

    Startup:

    When to Use: Development, Production with proper vault setup

    hashtag
    4. HCP Vault

    Purpose: Production deployment with HashiCorp Cloud Platform Vault

    Configuration: HCP Vault cluster

    Key Settings:

    Setup:

    1. Create HCP Vault cluster

    2. Configure AppRole authentication

    3. Create policies for application access

    4. Store secrets in Vault

    5. Generate role_id and secret_id

    Startup:

    When to Use: Production, enterprise deployments


    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    In the "Connect to..." dialog, select your target server, enter your credentials, and click Connect.\
  • Upon successful connection, the main ERD worksheet will appear.\

  • hashtag
    Creating ERD diagram

    1

    hashtag
    Initiate generation

    1. From the ERD Worksheet On ERD Designer worksheet, click Generate ERD

    1. From the Query Editor In the Query Editor, right-click on a schema name in the Schemas Sidebar and select the "Generate ERD" option.

    2

    hashtag
    Select schema, and tables

    A dialog will appear. Choose the specific schema you want to visualize. You may select which tables within that schema to include in the diagram.

    3

    hashtag
    Visualize

    Click the Visualize button to generate and display the ERD on the worksheet canvas.

    hashtag
    ERD Worksheet Features

    The core of the designer is a visual canvas where you can build and manage your database structures.

    hashtag
    Model Tables, Indexes, and Relationships

    You can graphically manage all core MariaDB schema objects.

    hashtag
    Create New Tables

    Use the toolbar or right-click on the canvas to add new table entities to your diagram.

    hashtag
    Edit Entities

    Double-click any table to open the Entity Editor at the bottom of the screen.

    Here, you can define and modify columns (including data types and NOT NULL constraints), indexes, and foreign keys through an intuitive interface.

    hashtag
    Draw Foreign Keys

    To create a new relationship, simply click the connection point on a column in one table and drag it to the column it references in another table.

    hashtag
    Auto Layout

    For large or complex schemas, the diagram can become cluttered. Use the Auto Arrange Entities feature, typically found in the top toolbar, to automatically rearrange the tables and relationships into a clean, organized, and easily navigable diagram.

    hashtag
    Working with the ERD Worksheet

    The ERD worksheet provides several tools and shortcuts to streamline your workflow.

    hashtag
    Managing Foreign Keys

    Right-click on a relationship link between two tables to open a context menu with quick actions, such as editing or removing the foreign key, toggling the relationship type (e.g., one-to-one vs. one-to-many), and changing NOT NULL constraints.

    hashtag
    Exporting Your Model

    Once your design is complete, you can export it for documentation or deployment. The export options, found in the toolbar or by right-clicking the canvas, include the following:

    • Export as SQL Script: Generates the CREATE TABLE and ALTER TABLE statements for your entire diagram.

    • Export as JPEG: Creates an image of your diagram for use in presentations or other documents.

    • Copy script to clipboard: A quick way to get the SQL for pasting elsewhere.

    hashtag
    Applying Changes to a Database

    Click the "Apply Script" button (▶) in the toolbar to execute the generated SQL against your connected database. This allows you to deploy your new or modified schema directly from the designer.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    Getting Started
    • Overview and Architecture

    • Installation Guide

    • Configuration

    hashtag
    API Reference

    • API Reference

    • Database Integration

    • Access Control

    hashtag
    Deployment

    • Deployment Overview

    • Ubuntu Deployment Guide

    • Docker Deployment Guide

    hashtag
    Performance and Troubleshooting

    • Performance Tuning

    • Troubleshooting

    hashtag
    Reference

    • Environment Variables

    • Supported File Formats

    • Integration

    hashtag
    About MariaDB AI RAG

    MariaDB AI RAG enables organizations to leverage their document repositories and databases for AI-powered search and generation. By combining the reliability of MariaDB with modern AI capabilities, AI RAG provides accurate, context-aware responses based on your organization's proprietary data.

    hashtag
    Key Features

    • Document ingestion and processing

    • Semantic chunking and embedding

    • Vector-based similarity search

    • AI-powered response generation

    • Database integration

    • Fine-grained access control

    • Comprehensive REST API

    For detailed information on each component, please refer to the specific documentation sections.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner

    High-level overview of deployment options and considerations:

    • Deployment architecture options

    • System requirements

    • Prerequisites

    • Security considerations

    • Scalability planning

    hashtag
    Ubuntu Deployment Guide

    Step-by-step guide for deploying on Ubuntu/Debian systems:

    • Installing the .deb package

    • System configuration

    • Service setup

    • Database initialization

    • Production deployment best practices

    hashtag
    Docker Deployment Guide

    Complete guide for Docker-based deployments:

    • Docker image setup

    • Docker Compose configuration

    • Container orchestration

    • Volume management

    • Network configuration

    • Multi-container deployments

    hashtag
    Technical Architecture

    Detailed technical architecture documentation:

    • System components and interactions

    • Data flow diagrams

    • Database schema

    • API architecture

    • Security architecture

    • Performance considerations

    hashtag
    Deployment Checklist

    Pre-deployment and post-deployment checklists:

    • Pre-deployment verification

    • Configuration validation

    • Security hardening steps

    • Performance optimization

    • Monitoring setup

    • Backup and recovery planning

    hashtag
    Quick Deployment Paths

    hashtag
    For Development/Testing

    1. Use Docker Deployment for quick setup

    2. Configure minimal settings (database, API keys)

    3. Start services with docker-compose

    4. Verify with health checks

    hashtag
    For Production

    1. Review Deployment Overview for architecture planning

    2. Follow platform-specific guide (Ubuntu or Docker)

    3. Complete Deployment Checklist

    4. Configure monitoring and backups

    5. Review for optimization

    hashtag
    Deployment Best Practices

    hashtag
    Security

    • Use strong JWT secrets and API keys

    • Enable HTTPS/TLS for production

    • Implement network security (firewalls, VPNs)

    • Regular security updates

    • Secure database credentials

    hashtag
    Performance

    • Allocate sufficient resources (CPU, RAM, storage)

    • Configure connection pooling appropriately

    • Use SSD storage for database

    • Enable caching where appropriate

    • Monitor resource usage

    hashtag
    Reliability

    • Set up automated backups

    • Configure health checks

    • Implement logging and monitoring

    • Plan for disaster recovery

    • Test failover procedures

    hashtag
    Scalability

    • Design for horizontal scaling

    • Use load balancers for high availability

    • Separate database and API servers

    • Consider read replicas for database

    • Monitor and plan capacity

    hashtag
    Related Documentation

    • Configuration Guide - Detailed configuration options

    • Service Management - Managing services

    • Performance Tuning - Optimization

    • - Common issues

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Deployment Overview
    spinner

    Writeset Traffic

    Bytes/s of Galera writesets per node (inbound vs outbound).

    Metallbarrow-up-right
    Istioarrow-up-right
    spinner
    Customer Download Token at the MariaDB Customer Portalarrow-up-right
    MariaDB IDarrow-up-right
    kubernetes.io/dockerconfigjson Secretarrow-up-right
    global pull secretarrow-up-right
    customer credentials
    Openshift global pull secretarrow-up-right
    customer credentials
    spinner
    Galera cluster recovery
    spinner

    Query Editor

    Details the Query Editor feature, providing a comprehensive multi-tabbed environment for writing and debugging SQL, formatting code, and analyzing data results.

    The Query Editor is a powerful, integrated environment for database developers and administrators. It provides a comprehensive set of tools for writing and debugging SQL and analyzing query results, all from a single interface.

    This procedure outlines the steps required to access and utilize the Query Editor within the Workspace section of Enterprise Manager UI.

    1. From the main Workspace screen, click the "Run Queries" card.\

    2. In the "Connect to..." dialog, select your target server, enter your credentials, and click Connect.\

    3. Upon successful connection, the main will appear, ready for you to begin.\

    hashtag
    Query Editor Worksheet

    The Query Editor Workspace is organized around a flexible, multi-tabbed interface designed for parallel work. At the top level, Worksheet tabs represent your connections to different database servers. Within each worksheet, you can open multiple Query Tabs, allowing you to write and execute several independent SQL statements without losing your context.

    hashtag
    SQL Code Management Features

    These features are designed to make writing and managing SQL code efficient and intuitive.

    hashtag
    SQL Editor

    Write, run, and debug SQL statements. The editor supports executing queries in parallel across multiple Query Tabs, allowing you to work on different tasks or connect to different servers simultaneously within isolated sessions.

    hashtag
    SQL Code Completion

    Speed up query authoring and minimize syntax errors with context-sensitive suggestions. As you type, the editor offers relevant SQL keywords, functions, and objects (like tables and columns) from the currently selected database schema.

    hashtag
    SQL Code Formatter

    Improve readability and maintain consistent coding standards by automatically formatting your SQL code. Access this feature via the editor's context menu or command palette (F1).

    hashtag
    SQL Syntax Highlighting

    Enhance code clarity with color syntax highlighting. Different parts of your SQL statements (keywords, strings, comments) are displayed in distinct colors, making queries easier to scan and debug.

    hashtag
    SQL Snippets

    Save frequently used SQL code blocks for quick reuse across sessions. Press CTRL+D (or CMD+D on Mac) to save the current content of the editor as a snippet.

    hashtag
    SQL History

    Keep track of every query executed within the Workspace. The History tab provides a running log, allowing you to quickly find, review, and re-execute previous commands.

    hashtag
    Multiple Connections

    Define and manage connections to various database servers (e.g., development, testing, production). Each connection opens in its own top-level Worksheet tab, within which you can open multiple Query Tabs.

    hashtag
    Open/Edit/Save SQL Files

    Load existing SQL scripts from your local machine into the editor, make changes, and save them back without leaving the workspace.

    hashtag
    Data Management and Analysis Features

    These features help you interact with and understand the results of your queries.

    hashtag
    Export Result Sets

    Easily share or archive query results. You can export data grids directly into common formats like CSV, JSON, or as SQL INSERT statements.

    1

    hashtag
    From results tab, click Export Results

    2

    hashtag
    Display multiple Result Sets

    When executing a script with multiple SELECT statements, view each result set in its own dedicated grid within the Results panel for easy comparison.

    hashtag
    Vertical Results Mode

    Improve readability for tables with many columns by displaying results in a vertical, record-by-record format.

    hashtag
    Result Set Limits

    Control the number of rows returned by SELECT statements (default: 10,000). This safety feature keeps queries responsive and can be adjusted per role.

    hashtag
    Result Visualizations

    Gain quick insights from your data by visualizing query results directly within the Workspace as simple line, bar, or scatter charts.

    hashtag
    Grid Operations

    Interact directly with the data displayed in the Results grid. Perform actions like searching for specific values, filtering rows, grouping data, and customizing column visibility without writing additional SQL.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Quickstart

    A fast-track guide to deploying your first MariaDB Enterprise instance using the Operator, from initial configuration to a running database.

    This guide aims to provide a quick way to get started with the MariaDB Enterprise Kubernetes Operator for Kubernetes. It will walk you through the process of deploying a MariaDB Enterprise Cluster and MaxScale via the MariaDB and MaxScale CRs (Custom Resourcesarrow-up-right) respectively.

    Before you begin, ensure you meet the following prerequisites:

    • Configure your customer access for docker.mariadb.com

    The first step will be configuring a Secret with the credentials used by the MariaDB CR:

    Next, we will deploy a MariaDB Enterprise Cluster (Galera) using the following CR:

    Let's break it down:

    • rootPasswordSecretKeyRef: A reference to a Secret containing the root password.

    • imagePullSecrets: The name of the Secret containing the customer credentials to pull the MariaDB Enterprise Server image.

    After applying the CR, we can observe the MariaDB Pods being created:

    Now, let's deploy a MaxScale CR:

    Again, let's break it down:

    • imagePullSecrets: The name of the Secret containing the customer credentials to pull the MaxScale image.

    • mariaDbRef: A reference to the MariaDB CR that we want to connect to.

    After applying the CR, we can observe the MaxScale Pods being created, and that both the MariaDB and MaxScale CRs will become ready eventually:

    To conclude, let's connect to the MariaDB Enterprise Cluster through MaxScale using the initial user and database we initially defined in the MariaDB CR:

    circle-check

    You have successfully deployed a MariaDB Enterprise Cluster with MaxScale in Kubernetes using the MariaDB Enterprise Kubernetes Operator!

    Refer to the , the and the for further detail.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Architecture

    The MariaDB MCP (Model Context Protocol) Server is a modular, multi-layered system designed to provide secure, scalable, and extensible AI-powered tools and services. Its architecture is centered around a primary gateway (MCP Server), an optional specialized microservice for Retrieval-Augmented Generation (RAG API), and a Shared MariaDB Database that serves as the single source of truth for all components.

    This design prioritizes security through multi-layered token validation and promotes flexibility with an adaptive tool registration system, allowing services to be enabled or disabled dynamically.

    hashtag
    Architectural Diagram

    The following diagram illustrates the flow of a request from a client application through the various components of the MCP ecosystem.

    hashtag
    Component Breakdown

    hashtag
    Client Applications

    These are the consumers of the MCP Server's services. They are responsible for acquiring a JWT Bearer Token and including it in the Authorization header of every request.

    • Examples: AI assistants, custom applications using the REST API, and dedicated MCP clients.

    hashtag
    MCP Server (Port 8002)

    The MCP Server acts as the primary gateway and orchestrator. All client requests must pass through it. It performs two critical functions:

    hashtag
    Token Extraction & Validation

    This is the first layer of security. The MCP Server validates the identity and legitimacy of every incoming request through a three-step process:

    1. Extract Token: It retrieves the JWT from the Authorization header.

    2. Verify Signature: It cryptographically verifies the token's signature to ensure it hasn't been tampered with.

    3. Validate User: It queries the Users table in the shared database to confirm the user exists and is active.

    hashtag
    Adaptive Tool Registration

    A key feature of the MCP Server is its ability to dynamically adjust the tools it offers based on the availability of dependent services.

    • Core, Database, & Vector Tools: These are foundational toolsets and are always registered and available.

    • RAG Tools: These tools, which rely on the RAG API, are only registered if the MCP Server can successfully connect to the RAG API. This makes the RAG component an optional, plug-in extension.

    hashtag
    RAG API (Port 8000)

    This is a specialized microservice designed for complex, knowledge-based tasks using the Retrieval-Augmented Generation pattern. It operates as a distinct service that the MCP Server communicates with.

    hashtag
    Authentication & Authorization

    The RAG API implements a second, more granular layer of security. After receiving a forwarded request from the MCP Server, it re-verifies the JWT and performs deeper authorization checks:

    • Verify JWT Token: Ensures the token is still valid.

    • Check User Roles: Examines the user's roles and permissions to determine if they are authorized to perform the requested RAG operation.

    • Enforce Permissions: Applies access control rules, for example, restricting document access based on ownership or group membership.

    hashtag
    RAG Pipeline

    This is the core logic of the RAG API. It transforms a user's query into a knowledge-rich response.

    1. Document Ingestion: The process of adding new documents to the knowledge base.

    2. Vector Embedding: Documents are converted into numerical representations (vectors) and stored in the Vector Store within the MariaDB database.

    3. Retrieval: When a query is received, the API searches the Vector Store

    hashtag
    Shared MariaDB Database

    The database is the foundation of the entire architecture, providing a single, consistent source of data for all services.

    • Users: Stores user credentials, roles, and metadata required for authentication and authorization across both the MCP Server and RAG API.

    • Documents: Contains the raw content (e.g., text, metadata) that the RAG pipeline uses for retrieval.

    • Vector Store: A dedicated table or set of tables within MariaDB that stores the vector embeddings of the documents, enabling efficient similarity searches.

    hashtag
    Request and Data Flow

    1. Request Initiation: A client application sends a request to the MCP Server (:8002) with a JWT in the Authorization header.

    2. MCP Server Authentication: The MCP Server validates the JWT against the shared database. If invalid, the request is rejected with a 401 Unauthorized error.

    This architecture ensures a clear separation of concerns, enhances security with multiple checkpoints, and provides a highly extensible platform for building advanced AI tools.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Updates

    Best practices and procedures for performing rolling updates and version upgrades for MariaDB Enterprise Server and MaxScale without downtime.

    By leveraging the automation provided by MariaDB Enterprise Kubernetes Operator, you can declaratively manage large fleets of databases using CRs. This also covers day two operations, such as upgrades, which can be risky when rolling out updates to thousands of instances simultaneously.

    To mitigate this, and to give you full control on the upgrade process, you are able to choose between multiple update strategies described in the following sections.

    hashtag
    Update strategies

    In order to provide you with flexibility for updating MariaDB reliably, this operator supports multiple update strategies:

    • : Roll out replica Pods one by one, wait for each of them to become ready, and then proceed with the primary Pod.

    • : Utilize the rolling update strategy from Kubernetes.

    • : Updates are performed manually by deleting Pods

    hashtag
    Configuration

    The update strategy can be configured in the updateStrategy field of the MariaDB resource:

    It defaults to ReplicasFirstPrimaryLast if not provided.

    hashtag
    Trigger updates

    Updates are not limited to updating the image field in the MariaDB resource, an update will be triggered whenever any field of the Pod template is changed. This translates into making changes to MariaDB fields that map directly or indirectly to the Pod template, for instance, the CPU and memory resources:

    Once the update is triggered, the operator manages it differently based on the selected update strategy.

    hashtag
    ReplicasFirstPrimaryLast

    This role-aware update strategy consists in rolling out the replica Pods one by one first, waiting for each of them become ready (i.e. readiness probe passed), and then proceed with the primary Pod. This is the default update strategy, as it can potentially meet various reliability requirements and minimize the risks associated with updates:

    • Write operations won't be affected until all the replica Pods have been rolled out. If something goes wrong in the update, such as an update to an incompatible MariaDB version, this is detected early when the replicas are being rolled out and the update operation will be paused at that point.

    • Read operations impact is minimized by only rolling one replica Pod at a time.

    • Waiting for every

    hashtag
    RollingUpdate

    This strategy leverages the rolling update strategy from the , which, unlike , does not take into account the role of the Pods(primary or replica). Instead, it rolls out the Pods one by one, from the highest to the lowest StatefulSet index.

    You are able to pass extra parameters to this strategy via the rollingUpdate object:

    hashtag
    OnDelete

    This strategy aims to provide a method to update MariaDB resources manually by allowing the user to restart the Pods individually. This way, the user has full control over the update process and can decide which Pods are rolled out at any given time.

    Whenever an , the MariaDB will be marked as pending to update:

    From this point, you are able to delete the Pods to trigger the update, which will result the MariaDB marked as updating:

    Once all the Pods have been rolled out, the MariaDB resource will be back to a ready state:

    hashtag
    Never

    The operator will not perform updates on the StatefulSet whenever this update strategy is configured. This could be useful in multiple scenarios:

    • Progressive fleet upgrades: If you're managing large fleets of databases, you likely prefer to roll out updates progressively rather than simultaneously across all instances.

    • Operator upgrades: When upgrading the operator, changes to the StatefulSet or the Pod template may occur from one version to another, which could trigger a rolling update of your MariaDB instances.

    hashtag
    Data-plane updates

    Highly available topologies rely on that run alongside MariaDB to enable the remote management of the database instances. These containers use the mariadb-enterprise-operator image, which can be automatically updated by the operator based on its image version:

    By default, updateStrategy.autoUpdateDataPlane is false, which means that no automatic upgrades will be performed, but you can opt-in/opt-out from this feature at any point in time by updating this field. For instance, you may want to selectively enable updateStrategy.autoUpdateDataPlane in a subset of your MariaDB instances after the operator has been upgraded to a newer version, and then disable it once the upgrades are completed.

    It is important to note that this feature is fully compatible with the strategy: no upgrades will happen when updateStrategy.autoUpdateDataPlane=true and updateStrategy.type=Never.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    OpenShift

    This guide details installing the MariaDB Enterprise Kubernetes Operator on OpenShift, leveraging the Operator Lifecycle Manager, and configuring image pull credentials.

    This documentation provides guidance on installing the MariaDB Enterprise Kubernetes Operator operator in OpenShift. This operator has been and it is available in the OpenShift console.

    Operators are deployed into OpenShift with the , which facilitates the installation, updates, and overall management of their lifecycle.

    hashtag
    Prerequisites

    Configure your to be able to pull images.

    SQL Resources

    Explains how to manage database objects like users, databases, and privileges natively through Kubernetes Custom Resources (CRDs).

    MariaDB Operator Enterprise enables you to manage SQL resources declaratively through CRs. By SQL resources, we refer to users, grants, and databases that are typically created using SQL statements.

    The key advantage of this approach is that, unlike executing SQL statements manually, which is a one-time operation, declaring a SQL resource via a CR ensures that the resource is periodically reconciled by the operator. This provides a guarantee that the resource will be recreated if it gets manually deleted. Additionally, it prevents state drifts, as the operator will regularly update the resource according to the CR specification.

    hashtag
    User CR

    Configuration

    This documentation aims to provide guidance on various configuration aspects shared across many MariaDB Enterprise Kubernetes Operator CRs.

    hashtag
    my.cnf

    An inline can be provisioned in the MariaDB resource via the myCnf field:

    In this field, you may provide any

    [maxscale]
    # ... other settings ...
    admin_host=0.0.0.0
    admin_oidc_url=https://<Enterprise Manager Host Name>:8090
    admin_oidc_client_id=admin
    admin_oidc_client_secret=mariadb
    admin_oidc_ssl_insecure=true
    # prometheus.yml
    scrape_configs:
      - job_name: 'mem-federation'
        scrape_interval: 60s
        honor_labels: true
        metrics_path: '/prometheus/federate'
        params:
          'match[]':
            - '{job=~".+"}' # This parameter tells the endpoint to return all series.
        static_configs:
          - targets: ['<Enterprise_Manager_IP>:8090']
        scheme: https
        basic_auth:
          username: admin # default username for Enterprise Manager
          password: mariadb # default password for admin user
        # You may need to add TLS and authentication configurations
        # depending on your network setup and security requirements.
        # tls_config:
        #   insecure_skip_verify: true
    # Direct values in config file
    DB_HOST=localhost
    DB_PASSWORD=your_password
    SECRET_KEY=your_secret_key
    JWT_SECRET_KEY=your_jwt_secret
    GEMINI_API_KEY=your_api_key
    # RAG API
    rag-api.exe --config=config.env.secure.local
    
    # MCP Server
    $env:MCP_CONFIG="config.env.secure.local"
    mcp-server.exe
    # 1Password references
    DB_USER=op://Employee/RAG-Database/username
    DB_PASSWORD=op://Employee/RAG-Database/password
    SECRET_KEY=op://Employee/RAG-Security/secret-key
    JWT_SECRET_KEY=op://Employee/RAG-Security/jwt-secret
    GEMINI_API_KEY=op://Employee/RAG-API-Keys/gemini
    # RAG API
    op run --env-file=config.env.1password.employee -- rag-api.exe
    
    # MCP Server
    op run --env-file=config.env.1password.employee -- mcp-server.exe
    # Vault Configuration
    VAULT_ADDR=http://127.0.0.1:8200
    VAULT_TOKEN=rag-root-token
    VAULT_SKIP_VERIFY=true
    VAULT_SECRET_PATH=rag-in-a-box
    VAULT_MOUNT_POINT=secret
    # Start Vault in dev mode
    vault server -dev -dev-root-token-id="rag-root-token"
    
    # Store secrets
    vault kv put secret/rag-in-a-box/database \
        DB_USER=root \
        DB_PASSWORD=Password123! \
        DB_NAME=kb_chunks
    
    vault kv put secret/rag-in-a-box/security \
        SECRET_KEY=your_secret_key \
        JWT_SECRET_KEY=your_jwt_secret
    
    vault kv put secret/rag-in-a-box/api-keys \
        GEMINI_API_KEY=your_api_key
    # RAG API
    rag-api.exe --config=config.env.vault.local
    
    # MCP Server
    $env:MCP_CONFIG="config.env.vault.local"
    mcp-server.exe
    # HCP Vault Configuration
    VAULT_ADDR=https://your-vault-cluster.hashicorp.cloud:8200
    VAULT_NAMESPACE=admin
    VAULT_SKIP_VERIFY=false
    VAULT_SECRET_PATH=rag-in-a-box
    VAULT_MOUNT_POINT=secret
    
    # AppRole Authentication
    VAULT_ROLE_ID=your-vault-role-id
    VAULT_SECRET_ID=your-vault-secret-id
    # RAG API
    rag-api.exe --config=config.env.hcp.live
    
    # MCP Server
    $env:MCP_CONFIG="config.env.hcp.live"
    mcp-server.exe
    sudo apt install -y mema-agent
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      inheritMetadata:
        labels:
          database.myorg.io: mariadb
        annotations:
          database.myorg.io: mariadb
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        database.myorg.io: mariadb
      labels:
        database.myorg.io: mariadb
      name: mariadb-galera-primary
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        database.myorg.io: mariadb
      labels:
        database.myorg.io: mariadb
      name: mariadb-galera-0
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      inheritMetadata:
        labels:
          sidecar.istio.io/inject: "true"
        annotations:
          database.myorg.io: mariadb
      podMetadata:
        labels:
          sidecar.istio.io/inject: "false"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      service:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.150
    
      primaryService:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.160
    
      secondaryService:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.161
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      storage:
        size: 1Gi
        volumeClaimTemplate:
          metadata:
            annotations:
              database.myorg.io: mariadb
            labels:
              database.myorg.io: mariadb
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      service:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.150
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      podMetadata:
        labels:
          sidecar.istio.io/inject: "false"
    kubectl create secret docker-registry mariadb-enterprise \
       --docker-server=docker.mariadb.com \
       --docker-username=<email> \
       --docker-password=<customer-download-token>
    oc extract secret/pull-secret -n openshift-config --confirm
    oc registry login \
      --registry="docker.mariadb.com" \
      --auth-basic="<email>:<customer-download-token>" \
      --to=.dockerconfigjson
    oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson
    oc create secret docker-registry mariadb-enterprise \
       --docker-server=docker.mariadb.com \
       --docker-username=<email> \
       --docker-password=<customer-download-token>
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      image: docker.mariadb.com/enterprise-server:11.4.4-2
      imagePullPolicy: IfNotPresent
      imagePullSecrets:
        - name: mariadb-enterprise
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale
    spec:
      ...
      image: docker.mariadb.com/maxscale-enterprise:25.01.1
      imagePullPolicy: IfNotPresent
      imagePullSecrets:
        - name: mariadb-enterprise
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      image: docker.mariadb.com/enterprise-server:11.4.4-2
      imagePullPolicy: IfNotPresent
      imagePullSecrets:
        - name: mariadb-enterprise
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      ...
      mariaDbRef:
        name: mariadb
      imagePullSecrets:
        - name: backup-registry
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      storage:
        size: 1Gi
        storageClassName: gp3
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      storage:
        size: 1Gi
        storageClassName: gp3
        volumeClaimTemplate:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 1Gi
          storageClassName: gp3
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      storage:
        size: 2Gi
        resizeInUseVolumes: true
        waitForVolumeResize: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      storage:
        ephemeral: true

    admin_oidc_url

    URL for Enterprise Manager server that includes hostname or IP address and port.

    admin_host

    Must be set to 0.0.0.0 to allow external connections from Enterprise Manager.

    admin_oidc_client_id

    Default credentials used by Enterprise Manager to request the access token.

    admin_oidc_client_secret

    Default credentials used by Enterprise Manager to request the access token.

    admin_oidc_ssl_insecure

    Skip TLS certificate verification in case certificates aren't configured

    NodeFileDescriptorLimit

    Kernel is predicted to exhaust file descriptors soon (sustained for 15m). Triggers when allocated file descriptors exceed 70% of the kernel limit.

    NodeFileDescriptorLimit

    Kernel is close to exhausting file descriptors (sustained for 15m). Triggers when allocated file descriptors exceed 90% of the kernel limit.

    Service Management
    Orchestration
    Technical Architecture
    Deployment Checklist
    Technical Architecture
    Troubleshooting
    Synchronous Multi-Master with Galeraarrow-up-right
    MaxScalearrow-up-right
    mariadb-backuparrow-up-right
    Kubernetes VolumeSnapshotsarrow-up-right
    BACKUP STAGEarrow-up-right
    mariadb-dumparrow-up-right
    cert-managerarrow-up-right
    prometheus-operatorarrow-up-right
    Operator certified arrow-up-right
    spinner

    The MaxScale API user for scraping MaxScale metrics.

    --maxscale-password

    The password for the MaxScale user.

    --otlp-insecure

    Disables TLS certificate validation (use for testing or with self-signed certs).

    --otlp-interval

    The interval at which the agent should push metrics (e.g., 60s).

    --endpoint

    The address of your external OTLP-compatible monitoring system.

    --otlp-port

    The port on the external system that accepts OTLP data.

    --cluster-name

    An informational name for the cluster this host belongs to.

    --host-name

    An informational name for this specific host.

    --mariadb-user

    The database user for scraping MariaDB Server metrics.

    --mariadb-password

    The password for the MariaDB user.

    --maxscale-user

    maxScaleRef: The name of the MaxScale CR that we will be creating right after.
  • username, passwordSecretKeyRef and database: The initial user and database to create.

  • storage: The size of the volume that will back the data directory.

  • replicas: The number of MariaDB Enterprise Server instances to deploy.

  • galera: Configuration for the Galera clustering.

  • replicas: The number of MaxScale instances to deploy.
    Install the MariaDB Enterprise Kubernetes Operatorarrow-up-right
    documentation
    API reference
    examples catalog
    spinner
    .
  • Never: Pause updates.

  • Pod
    to be synced minimizes the impact in the clustering protocols and the network.
    ReplicasFirstPrimaryLast
    RollingUpdate
    OnDelete
    StatefulSet resourcearrow-up-right
    ReplicasFirstPrimaryLast
    update is triggered
    data-plane containers
    Never
    spinner
    MariaDB Server host
    sudo mema-agent setup --cluster-name=MyCluster \
      --endpoint=https://<external_ip> --otlp-port=<external_port> \
      --mariadb --host-name=<hostname> \
      --mariadb-user=<user> --mariadb-password=<password> \
      --otlp-insecure --otlp-interval=60s
    MaxScale host
    sudo mema-agent setup --cluster-name=MyCluster \
      --endpoint=https://<external_ip> --otlp-port=<external_port> \
      --maxscale --host-name=<hostname> \
      --maxscale-user=admin --maxscale-password=mariadb \
      --otlp-insecure --otlp-interval=60s
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb
    stringData:
      password: MariaDB11!
    kubectl apply -f secret.yaml
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: password
      imagePullSecrets:
      -  name: mariadb-enterprise
      maxScaleRef:
        name: maxscale-galera
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      database: mariadb
      storage:
        size: 1Gi
      replicas: 3
      galera:
        enabled: true
    kubectl apply -f mariadb-galera.yaml
    ❯ kubectl get pods
    NAME                                                           READY   STATUS    RESTARTS      AGE
    mariadb-galera-0                                               2/2     Running   0             101s
    mariadb-galera-1                                               2/2     Running   0             101s
    mariadb-galera-2                                               2/2     Running   0             101s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      imagePullSecrets:
       -  name: mariadb-enterprise
      mariaDbRef:
        name: mariadb-galera
      replicas: 2
    kubectl apply -f maxscale-galera.yaml
    ❯ kubectl get pods
    mariadb-galera-0                                               2/2     Running   0             10m
    mariadb-galera-1                                               2/2     Running   0             10m
    mariadb-galera-2                                               2/2     Running   0             10m
    maxscale-galera-0                                              1/1     Running   0             81s
    maxscale-galera-1                                              1/1     Running   0             81s
    
    ❯ kubectl get maxscale
    NAME              READY   STATUS    PRIMARY            AGE
    maxscale-galera   True    Running   mariadb-galera-0   65s
    
    ❯ kubectl get mariadb
    NAME             READY   STATUS    PRIMARY            UPDATES                    AGE
    mariadb-galera   True    Running   mariadb-galera-0   ReplicasFirstPrimaryLast   10m
    ❯ kubectl run mariadb-connect --rm -it --image=docker.mariadb.com/enterprise-server:11.4 -- bash -c "mariadb -u mariadb -p'MariaDB11!' --ssl=false -h maxscale-galera"
    If you don't see a command prompt, try pressing enter.
    MariaDB [(none)]> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mariadb            |
    +--------------------+
    2 rows in set (0.001 sec)
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      updateStrategy:
        type: ReplicasFirstPrimaryLast
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
    - image: docker.mariadb.com/enterprise-server:10.6.18-14.2
    + image: docker.mariadb.com/enterprise-server:10.6.19-15.1
      resources:
        requests:
          cpu: 200m
          memory: 128Mi
        limits:
    -     memory: 1Gi
    +     memory: 2Gi
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      updateStrategy:
        type: RollingUpdate
        rollingUpdate:
          maxUnavailable: 1
    kubectl get mariadbs
    NAME             READY   STATUS           PRIMARY            UPDATES    AGE
    mariadb-galera   True    Pending update   mariadb-galera-0   OnDelete   5m17s
    kubectl get mariadbs
    NAME             READY   STATUS         PRIMARY            UPDATES    AGE
    mariadb-galera   True    Updating       mariadb-galera-0   OnDelete   9m50s
    NAME             READY   STATUS         PRIMARY            UPDATES    AGE
    mariadb-galera   True    Running        mariadb-galera-0   OnDelete   12m
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      updateStrategy:
        autoUpdateDataPlane: true

    If you select the sql permission, a "Query editor row limit" dropdown will appear. You can adjust this value as needed.

    circle-exclamation

    When creating a role, selecting the edit permission requires you to also select the view permission.

    Update: Opens the "Edit Role" dialog where you can change the role's name or its assigned permissions.
  • Delete: Permanently removes the custom role. A confirmation dialog will appear.

  • circle-info

    Roles that are currently assigned to any user cannot be deleted.

    Update: Opens the "Edit User" dialog where you can change the user's assigned role or update their password.
  • Delete: Permanently removes the user from MariaDB Enterprise Manager.

  • circle-info

    You cannot delete the user account that you are currently logged in with. To delete an administrator account, you must first log in with a different administrator account.

    Log in with user who has edit permission.

  • Begin the Add Database process:

    • If this is your first time and no databases are present, you'll be on the "Add Database" screen automatically.

    • If you already have other databases, click the + Add Database button.

  • Ensure the Database without MaxScale option is selected.\

  • Fill in the connection details for your first server using the Enterprise Manager User ('monitor'@'<Enterprise_Manager_IP>').

  • Click the Plus icon (+) to add another server.\

  • Fill in the connection details for the second server in your topology and click Confirm. Repeat for all nodes in your topology.

  • Once all nodes are added, select the Topology Type (e.g., Primary/Replica — default — or Galera Cluster) and click Confirm.\

  • circle-info

    To convert an existing standalone server into a topology of multiple servers: click the three-dot menu (⋮) next to the server, choose Edit, and click the Plus icon (+). Then follow the same steps to add nodes.

    Install Agent
    .\
  • Enter the credentials for the Local Agent User ('monitor'@'localhost') to generate a setup command.\

  • Copy the command and run it on that server's terminal to link the agent.

  • If this is your first time and no databases are present, you'll be on the "Add Database" screen to begin with.

  • If you already have other databases, click the + Add Database button.

  • Select the Database with MaxScale option.

  • Provide the connection details for your MaxScale instance (IP address, API port 8989, and its admin credentials).

  • Click Add. Enterprise Manager will connect to MaxScale and automatically discover all backend MariaDB servers it manages.

  • Click the three-dot menu (⋮) and select Install Agent.\

  • The UI will generate a unique setup command for that specific server with the username and password you provide. Copy the command.\

  • On that specific server, paste and run the command in the terminal.

  • Repeat this process for every server in the topology. Once all agents are linked, the dashboard will begin showing the health of the entire topology.

    hashtag
    From Export results window, make the selection.
    Setting
    Description

    File name

    The name for the downloaded export file. A default name with the current date is usually suggested.

    Fields to export

    Allows you to select which columns from the query result set to include in the export.

    File format

    Choose the output format: CSV, SQL, or JSON.

    CSV Options

    Fields terminated by

    The character used to separate values (e.g., , or \t).

    Lines terminated by

    The character indicating the end of a row (e.g., \n).

    3

    hashtag
    Click Import

    Query Editor worksheetarrow-up-right
    spinner
    to find the most semantically relevant document chunks.
  • Generation: The retrieved chunks are combined with the original query and fed to a language model to generate a comprehensive, context-aware answer.

  • Tool Dispatching: The server identifies that the request requires a RAG tool. It's checks if the RAG API is available.
  • Request Forwarding: The MCP Server forwards the original request, including the JWT, to the RAG API (:8000).

  • RAG API Authorization: The RAG API performs its own validation of the JWT and checks the user's permissions for the requested action. If unauthorized, it returns an error.

  • RAG Pipeline Execution: The RAG API executes its pipeline, querying the Documents and Vector Store tables in the MariaDB database to retrieve relevant context.

  • Response Generation: The RAG API generates a final response.

  • Response Relay: The response is sent back to the MCP Server, which in turn relays it to the client application.

  • spinner
    The recommended way to configure credentials is to use the global pull secretarrow-up-right provided by OpenShift, as described in this section. Alternatively, the operator bundle has a mariadb-enterprise imagePullSecret configured by default. This means that you can configure a Secret named mariadb-enterprise in same namespace where the operator will be installed in order to pull images from the MariaDB Enterprise registry.

    hashtag
    PackageManifest

    You can install the certified operator in OpenShift clusters that have the mariadb-enterprise-operator packagemanifest available. In order to check this, run the following command:

    hashtag
    SecurityContextConstraints

    Both the operator and the operand Pods run with the restricted-v2 SecurityContextConstraint, the most restrictive SCC in OpenShift in terms of container permissions. This implies that OpenShift automatically assigns a SecurityContext for the Pods with minimum permissions, for example:

    circle-exclamation

    OpenShift does not assign SecurityContexts in the default and kube-system namespaces. Please refrain from deploying operands on them, as it will result in permission errors when trying to write to the filesystem.

    You can read more about SecurityContextConstraints in the OpenShift documentationarrow-up-right.

    hashtag
    Installation in all namespaces

    To install the operator watching resources on all namespaces, you need to create a Subscription object for mariadb-enterprise-operator using the stable channel in the openshift-operators namespace:

    This will use the global-operators OperatorGroup that is created by default in the openshift-operators namespace. This OperatorGroup will watch all namespaces in the cluster, and the operator will be able to manage resources across all namespaces.

    You can read more about OperatorGroups in the OpenShift documentationarrow-up-right.

    hashtag
    Installation in specific namespaces

    In order to define which namespaces the operator will be watching, you need to create an OperatorGroup in the namespace where the operator will be installed:

    This OperatorGroup will watch the namespaces defined in the targetNamespaces field. The operator will be able to manage resources only in these namespaces.

    Then, the operator can be installed by creating a Subscription object in the same namespace as the OperatorGroup:

    hashtag
    Release channels

    We maintain support across a variety of OpenShift channels to ensure compatibility with different release schedules and stability requirements. Below, you will find an overview of the specific OpenShift channels we support.

    Channel
    Supported OpenShift Versions
    Description

    stable

    4.18, 4.16

    Points to the latest stable version of the operator. This channel may span multiple major versions.

    stable-v25.10

    4.18, 4.16

    v25.10.x is an LTS release. This channel points to the latest patch release of 25.10. Use this if you require version pinning to a stable version of the operator without necessarily looking for newer features.

    An example Subscription would look like this:

    hashtag
    Updates

    Updates are fully managed by OLM and controlled by the installPlanApproval field in the Subscription object. The default value is Automatic, which means that OLM will automatically update the operator to the latest version available in the channel. If you want to control the updates, you can set this field to Manual, and OLM will only update the operator when you approve the update.

    hashtag
    Uninstalling

    The first step for uninstalling the operator is to delete the Subscription object. This will not remove the operator, but it will stop OLM from managing the operator:

    After that, you can uninstall the ClusterServiceVersion (CSV) object that was created by OLM. This will remove the operator from the cluster:

    hashtag
    OpenShift console

    As an alternative to create Subscription objects via the command line, you can install operators by using the OpenShift console. Go to the Operators > OperatorHub section and search by mariadb enterprise:

    Select MariaDB Enterprise Kubernetes Operator, click on install, and you will be able to create a Subscription object via the UI.

    Once deployed, the operator comes with example resources that can be deployed from the console directly. For instance, to create a MariaDB:

    As you can see in the previous screenshot, the form view that the OpenShift console offers is limited, we recommend using the YAML view:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    certified by Red Hatarrow-up-right
    Operator Lifecycle Manager (OLM)arrow-up-right
    customer credentials as described in the documentation
    spinner
    By creating this resource, you are declaring an intent to create an user in the referred MariaDB instance, just like a statement would do:

    In the example above, a user named bob identified by the password available in the bob-password Secret will be created in the mariadb instance.

    Refer to the API reference for more detailed information about every field.

    hashtag
    Custom name

    By default, the CR name is used to create the user in the database, but you can specify a different one providing the name field under spec:

    hashtag
    Grant CR

    By creating this resource, you are declaring an intent to grant permissions to a given user in the referred MariaDB instance, just like a statement would do.

    You may provide any set of .

    Refer to the API reference for more detailed information about every field.

    hashtag
    Database CR

    By creating this resource, you are declaring an intent to create a logical database in the referred MariaDB instance, just like a statement would do:

    Refer to the API reference for more detailed information about every field.

    hashtag
    Custom name

    By default, the CR name is used to create the user in the database, but you can specify a different one providing the name field under spec:

    hashtag
    Initial User, Grant and Database

    If you only need one user to interact with a single logical database, you can use of the MariaDB resource to configure it, instead of creating the User, Grant and Database resources separately:

    Behind the scenes, the operator will be creating an User resource with ALL PRIVILEGES in the initial Database.

    hashtag
    Authentication plugins

    circle-exclamation

    This feature requires the skip-strict-password-validation option to be set. See: .

    Passwords can be supplied using the passwordSecretKeyRef field in the User CR. This is a reference to a Secret that contains a password in plain text.

    Alternatively, you can use to avoid passing passwords in plain text and provide the password in a hashed format instead. This doesn't affect the end user experience, as they will still need to provide the password in plain text to authenticate.

    hashtag
    Password hash

    Provide the password hashed using the function:

    The password hash can be obtained by executing SELECT PASSWORD('<password>'); in an existing MariaDB installation.

    hashtag
    Password plugin

    Provide the password hashed using any of the available , for example mysql_native_password:

    The plugin name should be available in a Secret referenced by pluginNameSecretKeyRef and the argument passed to it in pluginArgSecretKeyRef. The argument is the hashed password in most cases, refer to the for further detail.

    hashtag
    Configure reconciliation

    As we previously mentioned, SQL resources are periodically reconciled by the operator into SQL statements. You are able to configure the reconciliation interval using the following fields:

    If the SQL statement executed by the operator is successful, it will schedule the next reconciliation cycle using the requeueInterval. If the statement encounters an error, the operator will use the retryInterval instead.

    hashtag
    Cleanup policy

    Whenever you delete a SQL resource, the operator will also delete the associated resource in the database. This is the default behaviour, that can also be achieved by setting cleanupPolicy=Delete:

    You can opt-out from this cleanup process using cleanupPolicy=Skip. Note that this resources will remain in the database.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner
    or
    supported by MariaDB.

    Under the hood, the operator automatically creates a ConfigMap with the contents of the myCnf field, which will be mounted in the MariaDB instance. Alternatively, you can manage your own configuration using a pre-existing ConfigMap by linking it via myCnfConfigMapKeyRef. It is important to note that the key in this ConfigMap i.e. the config file name, must have a .cnf extension in order to be detected by MariaDB:

    To ensure your configuration changes take effect, the operator triggers a MariaDB update whenever the myCnf field or the ConfigMap is updated. For the operator to detect changes in a ConfigMap, it must be labeled with enterprise.mariadb.com/watch. Refer to the external resources section for further detail.

    hashtag
    Compute resources

    CPU and memory resouces can be configured via the resources field in both the MariaDB and MaxScale CRs:

    In the case of MariaDB, it is recommended to set the innodb_buffer_pool_size system variable to a value that is 70-80% of the available memory. This can be done via the myCnf field:

    hashtag
    Timezones

    By default, MariaDB does not load timezone data on startup for performance reasons and defaults the timezone to SYSTEM, obtaining the timezone information from the environment where it runs. See the for further information.

    You can explicitly configure a timezone in your MariaDB instance by setting the timeZone field:

    This setting is immutable and implies loading the timezone data on startup.

    In regards to Backup and SqlJob resources, which get reconciled into CronJobs, you can also define a timeZone associated with their cron expression:

    If timeZone is not provided, the local timezone will be used, as described in the Kubernetes docsarrow-up-right.

    hashtag
    Passwords

    Some CRs require passwords provided as Secret references to function properly. For instance, the root password for a MariaDB resource:

    By default, fields like rootPasswordSecretKeyRef are optional and defaulted by the operator, resulting in random password generation if not provided:

    You may choose to explicitly provide a Secret reference via rootPasswordSecretKeyRef and opt-out from random password generation by either not providing the generate field or setting it to false:

    This way, we are telling the operator that we are expecting a Secret to be available eventually, enabling the use of GitOps tools to seed the password:

    • sealed-secretsarrow-up-right: The Secret is reconciled from a SealedSecret, which is decrypted by the sealed-secrets controller.

    • external-secretsarrow-up-right: The Secret is reconciled fom an ExternalSecret, which is read by the external-secrets controller from an external secrets source (Vault, AWS Secrets Manager ...).

    hashtag
    External resources

    Many CRs have a references to external resources (i.e. ConfigMap, Secret) not managed by the operator.

    These external resources should be labeled with enterprise.mariadb.com/watch so the operator can watch them and perform reconciliations based on their changes. For example, see the my.cnf ConfigMap:

    hashtag
    Probes

    Kubernetes probes serve as an inversion of control mechanism, enabling the application to communicate its health status to Kubernetes. This enables Kubernetes to take appropriate actions when the application is unhealthy, such as restarting or stop sending traffic to Pods.

    circle-info

    Make sure you check the Kubernetes documentationarrow-up-right if you are unfamiliar with Kubernetes probes.

    Fine tunning of probes for databases running in Kubernetes is critical, you may do so by tweaking the following fields:

    There isn't an universally correct default value for these thresholds, so we recommend determining your own based on factors like the compute resources, network, storage, and other aspects of the environment where your MariaDB and MaxScale instances are running.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    spinner

    MariaDB Server

    Comprehensive dashboard for monitoring MariaDB Server instances, covering topology overviews, replication health, InnoDB metrics, query performance, and active connections.

    This dashboard provides a unified view of a database topology. It combines topology information, system health, replication or cluster metrics, and query performance in one place. Administrators can use it to monitor availability, troubleshoot issues, and optimize performance.

    hashtag
    Topology Overview

    Summarizes the overall topology, showing which servers are active, their versions, and how they are organized.

    • Name — Displays the name of the MariaDB topology currently being monitored.

    • Project — Shows the associated project or environment label.

    • Primary/Replica — A table with:

      • Instance: Server hostname.

      • Type: Instance role.

    • Topology Info — Count of nodes grouped by type (e.g., server, MaxScale).

    • MariaDB Server Uptime by Instance — Uptime in seconds for each server instance.

    hashtag
    System Metrics

    Monitors server resource usage to detect bottlenecks in CPU, memory, network, and storage.

    Feature
    Description

    hashtag
    Replication / Cluster Metrics

    Provides insight into replication and cluster-related activity, including binary log usage, commit rates, and delay measurements.

    Metric
    Description

    Replication Status Table

    This table provides a consolidated view of the health status of replication across instances.

    Field Name
    Description

    hashtag
    Query Metrics

    Focuses on query execution and workload behavior, highlighting concurrency, throughput, and inefficiencies.

    Metric
    Description

    hashtag
    Connections

    This section provides visibility into how clients connect to the server and whether connection limits or failures are occurring.

    Metric
    Description

    hashtag
    Range Metrics

    Highlights query access patterns where range operations or scans are used.

    Metric
    Description

    hashtag
    InnoDB Metrics

    Shows activity within the InnoDB storage engine.

    Metric
    Description

    hashtag
    Processlist

    Shows information about active sessions and thread states collected from information_schema.processlist.

    • Processlist Count — Table view showing:

      • Instance: Database node.

      • Client: Client host connected.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Hardware and System Requirements

    Details the hardware sizing, system prerequisites (x86-64 Linux, Docker), and supported OS versions for deploying the central server and monitoring agents.

    This guide outlines the system and hardware requirements for deploying the Enterprise Manager Server and the Enterprise Manager Agent.

    hashtag
    Enterprise Manager Server 🖥️

    The Enterprise Manager Server is the central component that hosts the UI and stores monitoring data.

    hashtag
    Hardware Sizing Guide

    Monitored Servers
    CPU
    Memory (RAM)
    Storage (SSD)
    circle-info

    Tip: Adjust storage size depending on your requirements for metrics retention.

    hashtag
    System Requirements

    • CPU Architecture: x86-64

    • Operating System: 64-bit Linux with Docker support.

    • Software: Docker Engine and Docker Compose must be installed.

    hashtag
    Enterprise Manager Agent🕵

    The agent must be installed on each and instance you wish to monitor. Below are the supported operating systems.

    hashtag
    Supported Platforms for MariaDB Server

    MariaDB Server Version
    Supported OS (x86_64, ARM64)

    hashtag
    Supported Platforms for MariaDB MaxScale

    MaxScale Version
    Supported OS (x86_64, ARM64)

    * Monitoring and Single Sign-On(SSO) are only supported for MaxScale versions 25.10 and Above

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    # For Red Hat/CentOS/Rocky
    sudo dnf install -y mema-agent
    # For Debian/Ubuntu
    sudo apt install -y mema-agent
    CREATE USER 'monitor'@'<Enterprise_Manager_IP>' IDENTIFIED BY '<password>';
    GRANT REPLICA MONITOR ON *.* TO 'monitor'@'<Enterprise_Manager_IP>';
    CREATE USER 'monitor'@'localhost' IDENTIFIED BY '<password>';
    GRANT PROCESS, BINLOG MONITOR, REPLICA MONITOR, REPLICATION MASTER ADMIN ON *.* TO 'monitor'@'localhost';
    # For Red Hat/CentOS/Rocky
    sudo dnf install -y mema-agent
    # For Debian/Ubuntu
    sudo apt install -y mema-agent
    CREATE USER 'monitor'@'localhost' IDENTIFIED BY '<password>';
    GRANT PROCESS, BINLOG MONITOR, REPLICA MONITOR, REPLICATION MASTER ADMIN ON *.* TO 'monitor'@'localhost';
    oc get packagemanifests -n openshift-marketplace mariadb-enterprise-operator
    
    NAME                          CATALOG                 AGE
    mariadb-enterprise-operator   Certified Operators     21h
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
        - ALL
      runAsNonRoot: true
      runAsUser: 1000650000
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: mariadb-enterprise-operator
      namespace: openshift-operators
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: mariadb-enterprise-operator
      source: certified-operators
      sourceNamespace: openshift-marketplace
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: mariadb-enterprise-operator
      namespace: my-namespace
    spec:
      targetNamespaces:
      - my-namespace
      - my-other-namespace
      - my-other-other-namespace
      upgradeStrategy: Default
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: mariadb-enterprise-operator
      namespace: my-namespace
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: mariadb-enterprise-operator
      source: certified-operators
      sourceNamespace: openshift-marketplace
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: mariadb-enterprise-operator
      namespace: openshift-operators
    spec:
      channel: stable # Change this to the actual channel you want
      installPlanApproval: Automatic
      name: mariadb-enterprise-operator
      source: certified-operators
      sourceNamespace: openshift-marketplace
    oc delete subscription mariadb-enterprise-operator
    oc delete clusterserviceversion mariadb-enterprise-operator.v1.0.0
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: bob
    spec:
      mariaDbRef:
        name: mariadb
      passwordSecretKeyRef:
        name: bob-password
        key: password
      maxUserConnections: 20
      host: "%"
      cleanupPolicy: Delete
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user
    spec:
      name: user-custom
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Grant
    metadata:
      name: grant-bob
    spec:
      mariaDbRef:
        name: mariadb
      privileges:
        - "SELECT"
        - "INSERT"
        - "UPDATE"
      database: "*"
      table: "*"
      username: bob
      grantOption: true
      host: "%"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Database
    metadata:
      name: wordpress
    spec:
      mariaDbRef:
        name: mariadb
      characterSet: utf8
      collate: utf8_general_ci
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Database
    metadata:
      name: database
    spec:
      name: database-custom
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      username: bob
      passwordSecretKeyRef:
        name: bob-password
        key: password
      database: wordpress
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb-auth
    stringData:
      passwordHash: "*57685B4F0FF9D049082E296E2C39354B7A98774E"
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user-password-hash
    spec:
      mariaDbRef:
        name: mariadb
      passwordHashSecretKeyRef:
        name: mariadb-auth
        key: passwordHash
      host: "%"
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb-auth
    stringData:
      passwordHash: "*57685B4F0FF9D049082E296E2C39354B7A98774E"
      nativePasswordPlugin: mysql_native_password
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user-password-plugin
    spec:
      mariaDbRef:
        name: mariadb
      passwordPlugin:
        pluginNameSecretKeyRef:
            name: mariadb-auth
            key: nativePasswordPlugin
        pluginArgSecretKeyRef:
            name: mariadb-auth
            key: passwordHash
      host: "%"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user
    spec:
      requeueInterval: 30s
      retryInterval: 5s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user
    spec:
      cleanupPolicy: Delete
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      myCnf: |
        [mariadb]
        bind-address=*
        default_storage_engine=InnoDB
        binlog_format=row
        innodb_autoinc_lock_mode=2
        innodb_buffer_pool_size=1024M
        max_allowed_packet=256M
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      myCnfConfigMapKeyRef:
        name: mariadb
        key: mycnf
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      resources:
        requests:
          cpu: 1
          memory: 4Gi
        limits:
          memory: 4Gi
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      myCnf: |
        [mariadb]
        innodb_buffer_pool_size=3200M
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      timeZone: "UTC"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup-scheduled
    spec:
      mariaDbRef:
        name: mariadb
      schedule:
        cron: "*/1 * * * *"
        suspend: false
      timeZone: "UTC"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
        generate: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
        generate: false
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      myCnfConfigMapKeyRef:
        name: mariadb
        key: mycnf
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mariadb
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      mycnf: |
        [mariadb]
        bind-address=*
        default_storage_engine=InnoDB
        binlog_format=row
        innodb_autoinc_lock_mode=2
        innodb_buffer_pool_size=1024M
        max_allowed_packet=256M
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      # Tune your liveness probe accordingly to avoid Pod restarts.
      livenessProbe:
        periodSeconds: 10
        timeoutSeconds: 5
    
      # Tune your readiness probe accordingly to prevent disruptions in network traffic.
      readinessProbe:
        periodSeconds: 10
        timeoutSeconds: 5
    
      # Tune your startup probe accordingly to ensure that the SST completes with a large amount of data.
      # failureThreshold × periodSeconds = 30 × 10 = 300s = 5m until the container gets restarted if unhealthy
      startupProbe:
        failureThreshold: 30
        periodSeconds: 10
        timeoutSeconds: 5

    NULL replaced by

    How NULL values should be represented (e.g., \N).

    With Headers

    Checkbox to include column names as the first row.

    SQL Options

    Export option

    Choose whether to export Both structure and data, Data only (INSERT statements), or Structure only (CREATE TABLE).

    JSON Options

    None

    Seconds behind primary: Replication delay value.
  • Status: Availability of the node.

  • Last_SQL_Errno

    Most recent numeric error code reported by the SQL thread.

    Read_Master_Log_Pos

    Current read position in the source’s binary log.

    Relay_Log_Pos

    Last executed position in the local relay log.

    Deadlocks

    Number of detected deadlocks, where transactions block each other and require one to be rolled back.

    Value: Number of processes/threads from that client.

    CPU Utilisation

    Line graph of CPU usage percentage per instance.

    Memory Usage

    Percentage of used memory per instance (excluding cache/buffers).

    Network Traffic

    Time-series of receive and transmit throughput per instance (bits per second).

    Filesystems Info

    Table with filesystem type, mount point, capacity, and instance.

    Disk Used Space Utilisation

    Graph of percentage disk space used per mount point.

    Disk IOPS

    Reads and writes per second per storage device.

    Binlog Size

    Current binary log size per instance.

    Binlog Throughput

    Bytes written to binary logs per second.

    Binlog Commits

    Rate of commit operations recorded in binary logs.

    Replication Lag

    Replication delay value reported in seconds.

    Slave_connections

    Number of replication I/O connections to the upstream source.

    Retried_transactions

    Total replicated transactions retried due to transient errors.

    Slave_IO_Running

    Status flag indicating if the I/O thread is fetching events.

    Slave_SQL_Running

    Status flag indicating if the SQL thread is applying events.

    Last_Errno

    Most recent numeric error code for replication issues overall.

    Last_IO_Errno

    Most recent numeric error code reported by the I/O thread.

    Current Threads Running

    Number of threads actively executing queries.

    Questions (QPS)

    Queries per second executed on each instance.

    Slow Queries

    Rate of queries exceeding long_query_time.

    Created Tmp Disk Tables

    On-disk temporary tables created per second.

    Number of Connections

    Current number of active client connections (Threads_connected).

    Connection Utilization

    Share of connections in use compared to the configured maximum (Threads_connected / max_connections).

    % of Aborted Connections

    Percentage of connection attempts that failed or were aborted (aborted_connects / connections).

    Select Range Scan

    Number of SELECT operations performing range scans.

    Select Full Range Join

    Number of queries that performed a full range join. Indicates potential suboptimal indexing or join conditions.

    Select Range Check

    Number of SELECT operations requiring range checks.

    InnoDB Read/Writes

    Rate of physical read and write operations by InnoDB per second. Reads are disk fetches, writes are disk flushes.

    InnoDB Buffer Pool Reads

    Logical reads from the buffer pool vs. evicted or read-ahead pages, indicating buffer pool efficiency.

    InnoDB Row Lock

    Number of row lock waits in InnoDB, with high values indicating contention or poor indexing.

    InnoDB Checkpoint Age

    Size of uncheckpointed redo log data in bytes, with large sizes signaling risk of long crash recovery times.

    InnoDB Log Writes

    Number of write operations to the InnoDB redo log per second, reflecting redo logging activity.

    InnoDB History List Length

    Length of the undo log history list, with growth indicating long-running transactions preventing purge.

    spinner
    spinner
    spinner
    spinner

    50

    4 cores

    8 GB

    200 GB

    200

    16 cores

    32 GB

    800 GB

    500+

    48 cores

    96 GB

    10.6, 11.4, 11.8

    RHEL/Rocky/AlmaLinux/Oracle Linux 8, 9, 10

    Ubuntu LTS 22.04, 24.04

    Debian 11, 12, 13

    23.02*, 23.08*, 24.02*, 25.01*, 25.10

    RHEL/Rocky/AlmaLinux 8, 9, 10

    Ubuntu LTS 22.04, 24.04

    Debian 11, 12, 13

    MaxScale
    spinner

    2000 GB

    High Availability

    This section provides guidance on how to configure high availability in MariaDB and MaxScale instances. If you are looking for an HA setup for the operator, please refer to the Helm documentation.

    Our recommended setup for production is:

    • Use a highly available topology for MariaDB:

      • with a primary node and at least 2 replicas.

      • Synchronous multi-master with at least 3 nodes. Always an odd number of nodes, as it is quorum-based.

    • Leverage as database proxy to load balance requests and perform failover/switchover operations. Configure 2 replicas to enable MaxScale upgrades without downtime.

    • Use to avoid noisy neighbours.

    • Define .

    hashtag
    Highly Available Topologies

    • : The primary node allows both reads and writes, while secondary nodes only serve reads. The primary has a binary log and the replicas asynchronously replicate the binary log events.

    • : All nodes support reads and writes, but writes are only sent to one node to avoid contention. The fact that is synchronous and that all nodes are equally configured makes the primary failover/switchover operation seamless and usually instantaneous.

    hashtag
    Kubernetes Services

    In order to address nodes, MariaDB Enterprise Kubernetes Operator provides you with the following Kubernetes Services:

    • <mariadb-name>: This is the default Service, only intended for the .

    • <mariadb-name>-primary: To be used for write requests. It will point to the primary node.

    Whenever the primary changes, either by the user or by the operator, both the <mariadb-name>-primary and <mariadb-name>-secondary Services will be automatically updated by the operator to address the right nodes.

    The primary may be manually changed by the user at any point by updating the spec.[replication|galera].primary.podIndex field. Alternatively, automatic primary failover can be enabled by setting spec.[replication|galera].primary.autoFailover, which will make the operator to switch primary whenever the primary Pod goes down.

    hashtag
    MaxScale

    While Kubernetes Services can be used for addressing primary and secondary instances, we recommend utilizing as database proxy for doing so, as it comes with additional advantages:

    • Enhanced failover/switchover operations for both replication and Galera

    • Single entrypoint for both reads and writes

    • Multiple router modules available to define how to route requests

    The full lifecyle of the MaxScale proxy is covered by this operator. Please refer to for further detail.

    hashtag
    Pod Anti-Affinity

    circle-exclamation

    Bear in mind that, when enabling this, you need to have at least as many Nodes available as the replicas specified. Otherwise your Pods will be unscheduled and the cluster won't bootstrap.

    To achieve real high availability, we need to run each MariaDB Pod in different Kubernetes Nodes. This practice, known as anti-affinity, helps reducing the blast radius of Nodes being unavailable.

    By default, anti-affinity is disabled, which means that multiple Pods may be scheduled in the same Node, something not desired in HA scenarios.

    You can selectively enable anti-affinity in all the different Pods managed by the MariaDB resource:

    Anti-affinity may also be enabled in the resources that have a reference to MariaDB, resulting in their Pods being scheduled in Nodes where MariaDB is not running. For instance, the Backup and Restore processes can run in different Nodes:

    In the case of MaxScale, the Pods will also be placed in Nodes isolated in terms of compute, ensuring isolation not only among themselves but also from the MariaDB Pods. For example, if you run a MariaDB and MaxScale with 3 replicas each, you will need 6 Nodes in total:

    Default anti-affinity rules generated by the operator might not satisfy your needs, but you can always define your own rules. For example, if you want the MaxScale Pods to be in different Nodes, but you want them to share Nodes with MariaDB:

    hashtag
    Dedicated Nodes

    If you want to avoid noisy neighbours running in the same Kubernetes Nodes as your MariaDB, you may consider using dedicated Nodes. For achieving this, you will need:

    • Taint your Nodes and add the counterpart toleration in your Pods.

    circle-info

    Tainting your Nodes is not covered by this operator, it is something you need to do by yourself beforehand. You may take a look at the to understand how to achieve this.

    • Select the Nodes where Pods will be scheduled in via a nodeSelector.

    circle-info

    Although you can use the default Node labels, you may consider adding more significative labels to your Nodes, as you will have to set to them in your Pod nodeSelector. Refer to the .

    • Add podAntiAffinity to your Pods as described in the section.

    The previous steps can be achieved by setting these fields in the MariaDB resource:

    hashtag
    Pod Disruption Budgets

    circle-info

    Take a look at the if you are unfamiliar to PodDisruptionBudgets

    By defining a PodDisruptionBudget, you are telling Kubernetes how many Pods your database tolerates to be down. This quite important for planned maintenance operations such as Node upgrades.

    MariaDB Enterprise Kubernetes Operator creates a default PodDisruptionBudget if you are running in HA, but you are able to define your own by setting:

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Hashicorp Key Management

    The Hashicorp Key Management Pluginarrow-up-right is used to implement encryption using keys stored in the Hashicorp Vault KMS.

    circle-info

    For more information about configuring the plugin as well as different capabilities, please check the documentationarrow-up-right. This guide will cover a minimal example for configuring the plugin with the operator.

    hashtag
    Configuring TDE in MariaDB Using Hashicorp Key Management Plugin

    Transparent Data Encryption (TDE) can be configured in MariaDB leveraging the Hashicorp Key Management Plugin.

    hashtag
    Requirements

    • Running and accessible Vault KMS setup with a valid SSL certificate.

    • Vault is unsealed and you've logged in to it with vault login $AUTH_TOKEN, where $AUTH_TOKEN is an authentication token given to you by an administrator

    • openssl for generating secrets

    hashtag
    Steps

    1. Creating A New Key-Value Store In Vault. Create a new key-value store and take note of the path. In our example we will use mariadb.

    2. Adding necessary secrets. We will put 2 secrets with ids 1 and 2. 2 will be used for temporary files, while 1

    hashtag
    Day-2 Operations

    hashtag
    Rotating Secrets

    1. Put A New Secret In Vault. After logging in to vault, you can run again:

      This will start re-encrypting data.

    2. Monitor Re-Encryption.

      If you check the encrpytion status again:

      You should see CURRENT_KEY_VERSION column start getting updated to point to the new key version.

    hashtag
    Rotating Token

    Make sure when rotating the token, to do so in advance of the token expiring.

    1. Acquire a new token and update the secret.

    2. Restart MariaDB Pods. MariaDB will continue using the old token until the Pods are restarted. You can add the following annotation to the Pods in order to trigger an update, see the for further detail:

    hashtag
    Known Issues/Limitations

    hashtag
    Vault Not Being Accessible Will Result In MariaDB Not Working

    As MariaDB uses Vault to fetch it's decryption key, in case that Vault becomes unavailable, it will result in MariaDB not being able to fetch the decryption key and hence stop working. While the Hashicorp plugin has a configurable cache, that should be set and will result in MariaDB still working for a few seconds to minutes, depending on configuration, the cache is not reliable as it's ephemeral and short lived.

    hashtag
    Deleting The Decryption Key Will Make Your Data Inaccessible.

    It is recommended to back up the decryption key so accidental deletions will not result in issues.

    hashtag
    Decryption Key Must Be Hexadecimal

    Use the following to generate correct decryption keys.

    hashtag
    Rotating The Decryption Key Before A Previous Re-Encryption Has Finished, Will Result In Data Corruption.

    To check the re-encryption progress, you can run:

    Look for the CURRENT_KEY_VERSION and make sure they are in sync with the latest version you have in Vault.

    Docker Images

    Lists and describes the specific Docker images used by the Operator, including MariaDB Enterprise Server, MaxScale, and supporting sidecars.

    hashtag
    Certified images

    All the Docker images used by this operator are based on and have been . The advantages of using UBI based images are:

    spinner
    <mariadb-name>-secondary
    : To be used for read requests. It will load balance requests to all nodes except the primary.
    Replay pending transaction when primary goes down
  • Ability to choose whether the old primary rejoins as a replica

  • Connection pooling

  • WHITE PAPER

    The Ultimate Guide to High Availability with MariaDB

    Download Nowarrow-up-right

    Asynchronous replication
    Galera
    MaxScale
    dedicated nodes
    pod disruption budgets
    Asynchronous replication
    Synchronous multi-master Galera
    standalone topology
    MaxScale
    MaxScale docs
    Kubernetes documentationarrow-up-right
    Kubernetes documentationarrow-up-right
    Pod Anti-Affinity
    Kubernetes documentationarrow-up-right
    spinner
    will be used for everything else. It is not neccessary to create 2 of them and in that case, temporary files will use
    1
    .

    Note: Here you should use the path we chose in the previous step.

  • (Optional) Create An Authentication Token With Policy. This step can be skipped if you want to use your own token. Consult with a Vault administrator regarding this. Policies are Vault's way to restrict access to what you are allowed to do. The following is a policy that should be used by the token following the least permission principle.

    After which, we can create a new token with the given policy.

    You will see output similar to:

    Your new token is: EXAMPLE_TOKEN.

  • Create A Secret For the vault token. Now that you've either created a new token, or are using an existing one, we need to create a secret with it.

  • Create a Secret for the Certificate Authority (CA) used to issue the Vault certificate. For further information, consult the docsarrow-up-right If you have the certificate locally in a file called ca.crt you can run:

  • Create A MariaDB Custom Resource. The final step is creating a new MariaDB instance.

    mariadb-vault.yaml

    kubectl apply -f mariadb-vault.yaml

  • Verify Encryption Works.

    You should see something along the lines of:

    At this point, you can check the encryption status:

    If you create a new database and then table, the above query should return additional information about them. Something like:

    Note: The above query is truncated. In reality, you will see a few more columns.

  • updates documentationarrow-up-right
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      bootstrapFrom:
        restoreJob:
          affinity:
            antiAffinityEnabled: true
      ...
      metrics:
        exporter:
          affinity:
            antiAffinityEnabled: true
      ...
      affinity:
        antiAffinityEnabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb-galera
      ...
      affinity:
        antiAffinityEnabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      mariaDbRef:
        name: mariadb-galera
      ...
      affinity:
        antiAffinityEnabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      mariaDbRef:
        name: mariadb-galera
      ...
      metrics:
        exporter:
          affinity:
            antiAffinityEnabled: true
      ...
      affinity:
        antiAffinityEnabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      mariaDbRef:
        name: mariadb-galera
      ...
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app.kubernetes.io/instance
                operator: In
                values:
                - maxscale-galera
                # 'mariadb-galera' instance omitted (default anti-affinity rule)
            topologyKey: kubernetes.io/hostname
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tolerations:
        - key: "enterprise.mariadb.com/ha"
          operator: "Exists"
          effect: "NoSchedule"
      nodeSelector:
        "enterprise.mariadb.com/node": "ha" 
      affinity:
        antiAffinityEnabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
        podDisruptionBudget:
          maxUnavailable: 33%
    cat <<'EOF' | vault policy write -non-interactive mariadb -
    # Allow access to MariaDB secrets
    path "mariadb/*" {
      capabilities = ["create", "read", "update", "delete", "list"]
    }
    
    # Allow reading the mount configuration
    path "sys/mounts/mariadb/tune" {
      capabilities = ["read"]
    }
    EOF
    vault token create -policy mariadb
    Key                  Value
    ---                  -----
    token                EXAMPLE_TOKEN
    token_accessor       utFtmh98YAAJyYdxEVN3SFQA
    token_duration       768h
    token_renewable      true
    token_policies       ["default" "mariadb"]
    identity_policies    []
    policies             ["default" "mariadb"]
    export TOKEN="EXAMPLE_TOKEN"
    kubeclt create secret generic mariadb-vault-token --from-literal=token="$TOKEN"
    kubectl create secret generic vault-tls --from-file=./ca.crt
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb # Used to hold the mariadb and root user passwords
      labels:
        enterprise.mariadb.com/watch: ""
    stringData:
      password: MariaDB11!
      root-password: MariaDB11!
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      image: docker.mariadb.com/enterprise-server:11.4.7-4.3
      rootPasswordSecretKeyRef:
        name: mariadb
        key: password
    
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb-password
        key: password
        generate: true
      database: mariadb
    
      port: 3306
    
      storage:
        size: 1Gi
        # storageClassName: csi-hostpath-sc
    
      myCnf: |
        [mariadb]
        bind-address=*
        default_storage_engine=InnoDB
        binlog_format=row
        innodb_autoinc_lock_mode=2
        innodb_buffer_pool_size=800M
        max_allowed_packet=256M
    
        plugin_load_add = hashicorp_key_management
        hashicorp-key-management-vault-url=https://vault-0.vault-internal.default.svc.cluster.local:8200/v1/mariadb
        hashicorp-key-management-caching-enabled=ON
        hashicorp-key-management-vault-ca=/etc/vault/certs/ca.crt
    
        innodb_encrypt_tables = FORCE
        innodb_encrypt_log = ON
        innodb_encrypt_temporary_tables = ON
        encrypt_tmp_disk_tables = ON
        encrypt_tmp_files = ON
        encrypt_binlog = ON
        aria_encrypt_tables = ON
    
        innodb_encryption_threads = 4
        innodb_encryption_rotation_iops = 2000
    
      env:
        - name: VAULT_TOKEN # This is where our token is defined!
          valueFrom:
            secretKeyRef:
              name: mariadb-vault-token
              key: token
    
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          memory: 1Gi
    
      metrics:
        enabled: true
    
      volumes:
        - name: vault-certificates
          secret:
            secretName: vault-tls
            defaultMode: 0600
      volumeMounts:
        - name: vault-certificates
          mountPath: /etc/vault/certs/
    kubectl run mariadb-connect --rm -it --image=mariadb:11.4 -- bash -c "mariadb -u root -p'MariaDB11!' --ssl=false -h mariadb"
    If you don't see a command prompt, try pressing enter.
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 95
    Server version: 11.4.7-4-MariaDB-enterprise MariaDB Enterprise Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]>
    SELECT * from information_schema.INNODB_TABLESPACES_ENCRYPTION;
    MariaDB [my_db]> SELECT * from information_schema.INNODB_TABLESPACES_ENCRYPTION;
    +-----------------+-------------------+-----------------+---------------------+----------------+----------------------+
    | NAME            | ENCRYPTION_SCHEME | MIN_KEY_VERSION | CURRENT_KEY_VERSION | CURRENT_KEY_ID | ROTATING_OR_FLUSHING |
    +-----------------+-------------------+-----------------+---------------------+----------------+----------------------+
    | innodb_system   |                 1 |               1 |                   1 |              1 |                    0 |
    | innodb_undo001  |                 1 |               1 |                   1 |              1 |                    0 |
    | innodb_undo002  |                 1 |               1 |                   1 |              1 |                    0 |
    | innodb_undo003  |                 1 |               1 |                   1 |              1 |                    0 |
    | mysql/innodb_ta |                 1 |               1 |                   1 |              1 |                    0 |
    | mysql/innodb_in |                 1 |               1 |                   1 |              1 |                    0 |
    | mysql/gtid_slav |                 1 |               1 |                   1 |              1 |                    0 |
    | mysql/transacti |                 1 |               1 |                   1 |              1 |                    0 |
    | my_db/people    |                 1 |               1 |                   1 |              1 |                    0 |
    +-----------------+-------------------+-----------------+---------------------+----------------+----------------------+
    vault secrets enable -path /mariadb -version=2 kv
    vault kv put /mariadb/1 data="$(openssl rand -hex 32)"
    vault kv put /mariadb/2 data="$(openssl rand -hex 32)"
    kubectl run mariadb-connect --rm -it --image=mariadb:11.4 -- bash -c "mariadb -u root -p'MariaDB11!' --ssl=false -h mariadb"
    SELECT * from information_schema.INNODB_TABLESPACES_ENCRYPTION;
    export TOKEN="EXAMPLE_TOKEN"
    kubeclt create secret generic mariadb-vault-token --from-literal=token="$TOKEN"
    apiVersion: k8s.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      podMetadata:
        annotations:
          enterprise.mariadb.com/restarted-at: "2025-09-19T12:54:10Z"
    openssl rand -hex 32
    SELECT * from information_schema.INNODB_TABLESPACES_ENCRYPTION;
    vault kv put /mariadb/1 data="$(openssl rand -hex 32)"
    vault kv put /mariadb/2 data="$(openssl rand -hex 32)"
    MariaDB [my_db]> SELECT * from information_schema.INNODB_TABLESPACES_ENCRYPTION;
    +-----------------+-------------------+-----------------+---------------------+----------------+----------------------+
    | NAME            | ENCRYPTION_SCHEME | MIN_KEY_VERSION | CURRENT_KEY_VERSION | CURRENT_KEY_ID | ROTATING_OR_FLUSHING |
    +-----------------+-------------------+-----------------+---------------------+----------------+----------------------+
    | innodb_system   |                 1 |               1 |                   2 |              1 |                    0 |
    | innodb_undo001  |                 1 |               1 |                   2 |              1 |                    0 |
    | innodb_undo002  |                 1 |               1 |                   2 |              1 |                    0 |
    | innodb_undo003  |                 1 |               1 |                   2 |              1 |                    0 |
    | mysql/innodb_ta |                 1 |               1 |                   2 |              1 |                    0 |
    | mysql/innodb_in |                 1 |               1 |                   2 |              1 |                    0 |
    | mysql/gtid_slav |                 1 |               1 |                   2 |              1 |                    0 |
    | mysql/transacti |                 1 |               1 |                   2 |              1 |                    0 |
    | my_db/people    |                 1 |               1 |                   2 |              1 |                    0 |
    +-----------------+-------------------+-----------------+---------------------+----------------+----------------------+
    Immutability: UBI images are built to be secure and stable, reducing the risk of unintended changes or vulnerabilities due to mutable base layers.
  • Small size: The UBI minimalarrow-up-right and microarrow-up-right variants used by this operator are designed to be lightweight, containing only the essential packages. This can lead to smaller container image sizes, resulting in faster build times, reduced storage requirements, and quicker image pulls.

  • Security and compliance: Regular CVE scanning and vulnerability patching help maintain compliance with industry standards and security best practices.

  • Enterprise-grade support: UBI images are maintained and supported by Red Hat, ensuring timely security updates and long-term stability.

  • hashtag
    List of compatible images

    MariaDB Enterprise Kubernetes Operator is compatible with the following Docker images:

    Component
    Image
    Supported Tags
    CPU Architecture

    MariaDB Enterprise Kubernetes Operator (ppc64le support)

    docker.mariadb.com/mariadb-enterprise-operator

    26.3.1 26.3.0 25.10.4 25.10.3 25.10.2 25.10.1 25.10.0 25.8.0

    amd64 arm64 ppc64le

    MariaDB Enterprise Kubernetes Operator

    docker.mariadb.com/mariadb-enterprise-operator

    1.0.0

    amd64 arm64

    MariaDB Enterprise Server (ppc64le support)

    docker.mariadb.com/enterprise-server

    11.8.5-2 11.8.3-1 11.4.8-5 11.4.7-4.3 11.4.7-4.2 11.4.7-4.1 11.4 10.6.23-19 10.6.22-18.1 10.6

    Refer to the registry documentation to access docker.mariadb.com with your customer credentials.

    hashtag
    Working With Air-Gapped Environments

    This section outlines several methods for pulling official MariaDB container images from docker.mariadb.com and making them available in your private container registry. This is often necessary for air-gapped, offline, or secure environments.

    hashtag
    Option 1: Direct Pull, Tag, and Push

    This method is ideal for a "bastion" or "jump" host that has network access to both the public internet (specifically docker.mariadb.com) and your internal private registry.

    1. Log in to both registries. You will need a MariaDB token for the public registry and your credentials for the private one. Refer to the official documentationarrow-up-right.

    2. Pull the required image. Pull the official MariaDB Enterprise Kubernetes Operator image from its public registry.

    3. Tag the image for your private registry. Create a new tag for the image that points to your private registry's URL and desired repository path.

    4. Push the re-tagged image. Push the newly tagged image to your private registry.

    hashtag
    Option 2: Using a Proxy or Caching Registry

    Many modern container registries can be configured to function as a pull-through cache or proxy for public registries. When an internal client requests an image, your registry pulls it from the public source, stores a local copy, and then serves it. This automates the process after initial setup.

    You can use Harborarrow-up-right as a pull-through cache (Harbor calls this Replication Rules).

    hashtag
    Option 3: Offline Transfer using docker save and docker push

    This method is designed for fully air-gapped environments where no single machine has simultaneous access to the internet and the private registry.

    hashtag
    On the Internet-Connected Machine

    1. Log in and pull the image.

    2. Save the image to a tar archive. This command packages the image into a single, portable file.

      Use a tool like scp or sftp or a USB drive to copy the generated .tar archives from the internet-connected machine to your isolated systems.

    hashtag
    On the Machine with Private Registry Access

    1. Load the image from the archive.

    2. Log in to your private registry.

    3. Tag the loaded image. The image loaded from the tar file will retain its original tag. You must re-tag it for your private registry.

    4. Push the image to your private registry.

    hashtag
    Option 4: For OpenShift, you can use OpenShift Disconnected Installation Mirroring

    Refer to the official Red Hat documentationarrow-up-right

    hashtag
    Option 5: Offline Transfer for containerd Environments

    This method is for air-gapped environments that use containerd as the container runtime (common in Kubernetes) and do not have the Docker daemon. It uses the ctr command-line tool to import, tag, and push images. ⚙️

    hashtag
    1. On the Bastion Host (with Internet)

    First, on a machine with internet access, you'll pull the images and export them to portable archive files.

    1. Pull the Container Image Use the ctr image pull command to download the required image from its public registry.

      Note: If your bastion host uses Docker, you can use docker pull instead as we did in Option 3.

    2. Export the Image to an Archive Next, export the pulled image to a .tar file using ctr image export. The format is ctr image export <output-filename> <image-name>.

      Note: To find the exact image name as containerd sees it, run ctr image ls. The Docker equivalent for this step is docker save <image-name> -o <output-filename>.

    Repeat this process for all the container images you need to transfer.

    hashtag
    2. Transfer the Archives

    Use a tool like scp or sftp or a USB drive to copy the generated .tar archives from the bastion host to your isolated systems.

    hashtag
    3. On the Isolated Host

    Finally, on the isolated system, you will import the archives into containerd. Official Docsarrow-up-right

    1. Importing for Kubernetes (Important!) ⚙️ If the images need to be available to Kubernetes, you must import them into the k8s.io namespace by adding the -n=k8s.io flag.

    2. Verify the Image Check that containerd recognizes the newly imported image.

      You can also verify that the Container Runtime Interface (CRI) sees it by running:

    hashtag
    Important Note

    The examples above use the mariadb-enterprise-operator:25.8.0 image. You must repeat the chosen process for all required container images. A complete list is available here

    hashtag
    Additional Resources

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Red Hat UBIarrow-up-right
    certified by Red Hatarrow-up-right

    Developing Applications with MariaDB & Containers via Docker

    spinner

    Connections

    Explains how application clients connect to databases managed by the Operator, including the use of Kubernetes Services and MaxScale proxies.

    MariaDB Enterprise Kubernetes Operator provides the Connection resource to configure connection strings for applications connecting to MariaDB. This resource creates and maintains a Kubernetes Secret containing the credentials and connection details needed by your applications.

    hashtag
    Connection CR

    A Connection resource declares an intent to create a connection string for applications to connect to a MariaDB instance. When reconciled, it creates a Secret containing the DSN and optionally, individual connection parameters:

    The operator creates a Secret named connection containing a DSN and individual fields like username, password, host, port, and database. Applications can mount this Secret to obtain the connection details.

    hashtag
    Service selection

    By default, the host in the generated Secret points to the Service named after the referenced MariaDB or MaxScale resource (the same as metadata.name). For HA MariaDB, the Service <mariadb-name>-primary is used instead, so only the primary Pod will be used as target:

    Alternatively, you may override the default behaviour by setting serviceName and connect to another Service.

    Please refer to the to identify which Services are available.

    hashtag
    Credential generation

    The operator can automatically generate credentials for users via the GeneratedSecretKeyRef type with the generate: true field. This feature is available in the MariaDB, MaxScale, and User resources.

    For example, when creating a MariaDB resource with an initial user:

    The operator will automatically generate a random password and store it in a Secret named app-password. You can then reference this Secret in your Connection resource:

    If you prefer to provide your own password, you can opt-out from random password generation by either not providing the generate field or setting it to false. This enables the use of GitOps tools like or to seed the password.

    hashtag
    Secret template

    The secretTemplate field allows you to customize the output Secret, allowing you to include individual connection parameters:

    The resulting Secret will contain:

    • dsn: The full connection string

    • username: The database username

    • password: The database password

    hashtag
    Custom DSN format

    You can customize the DSN format using Go templates via the format field:

    Available template variables:

    • {{ .Username }}: The database username

    • {{ .Password }}: The database password

    • {{ .Host }}: The database host

    Refer to the for additional details about the template syntax.

    hashtag
    TLS authentication

    Connection supports TLS client certificate authentication as an alternative to password authentication:

    When using TLS authentication, provide tlsClientCertSecretRef instead of passwordSecretKeyRef. The referenced Secret must be a Kubernetes TLS Secret containing the client certificate and key.

    hashtag
    Cross-namespace connections

    Connection resources can reference MariaDB instances in different namespaces:

    This creates a Connection in the app namespace that references a MariaDB in the mariadb namespace.

    hashtag
    MaxScale connections

    Connection resources can reference MaxScale instances using maxScaleRef:

    When referencing a MaxScale, the operator uses the MaxScale Service and its listener port. The health check will consume connections from the MaxScale connection pool.

    hashtag
    External MariaDB connections

    Connection resources can reference ExternalMariaDB instances by specifying kind: ExternalMariaDB in the mariaDbRef:

    This is useful for generating connection strings to external MariaDB instances running outside of Kubernetes.

    hashtag
    Health checking

    The healthCheck field configures periodic health checks to verify database connectivity:

    • interval: How often to perform health checks (default: 30s)

    • retryInterval: How often to retry after a failed health check (default: 3s)

    The Connection status reflects the health check results, allowing you to monitor connectivity issues through Kubernetes.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    # Log in to the official MariaDB registry
    docker login docker.mariadb.com
    
    # Log in to your private registry
    docker login <private-registry-url>
    docker pull docker.mariadb.com/mariadb-enterprise-operator:25.8.0
    docker tag docker.mariadb.com/mariadb-enterprise-operator:25.8.0 <private-registry-url>/mariadb/mariadb-enterprise-operator:25.8.0
    docker login docker.mariadb.com
    docker pull docker.mariadb.com/mariadb-enterprise-operator:25.8.0
    docker save [docker.mariadb.com/mariadb-enterprise-operator:25.8.0 -o mariadb-enterprise-operator_25.8.0.tar
    docker load -i mariadb-enterprise-operator_25.8.0.tar
    docker login <private-registry-url>
    docker tag docker.mariadb.com/mariadb-enterprise-operator:25.8.0 <private-registry-url>/mariadb/mariadb-enterprise-operator:25.8.0
    ctr image pull docker.mariadb.com/mariadb-enterprise-operator:25.8.0
    ctr -n=k8s.io image import mariadb-enterprise-operator-25.8.0.tar
    ctr image ls

    amd64 arm64 ppc64le

    MariaDB Enterprise Server

    docker.mariadb.com/enterprise-server

    11.4.5-3 11.4.4-2 10.6.21-17 10.6.20-16.1 10.6.19-15.1 10.6.18-14.2 10.6.17-13.2

    amd64 arm64

    MaxScale Enterprise (ppc64le support)

    docker.mariadb.com/maxscale

    25.10.1 25.10.0 25.01.4 25.01.3-1 25.01

    amd64 arm64 ppc64le

    MaxScale Enterprise

    docker.mariadb.com/maxscale-enterprise

    25.01.2 25.01.1

    amd64 arm64

    MaxScale

    mariadb/maxscale

    23.08.9-ubi 23.08-ubi 24.02.5-ubi 24.02-ubi

    amd64 arm64

    MariaDB Prometheus Exporter (ppc64le support)

    mariadb/mariadb-prometheus-exporter-ubi

    1.1.1 1.1.0

    amd64 arm64 ppc64le

    MariaDB Prometheus Exporter

    mariadb/mariadb-prometheus-exporter-ubi

    1.0.0

    amd64 arm64

    MaxScale Prometheus Exporter (ppc64le support)

    mariadb/maxscale-prometheus-exporter-ubi

    1.1.1 1.1.0

    amd64 arm64 ppc64le

    MaxScale Prometheus Exporter

    mariadb/maxscale-prometheus-exporter-ubi

    1.0.0

    amd64 arm64

    MariaDB Enterprise nslcd sidecar

    docker.mariadb.com/nslcd

    0.9.10-13

    amd64 arm64 ppc64le

    Watch the Webinararrow-up-right

    host: The database host

  • port: The database port

  • database: The database name

  • {{ .Port }}: The database port

  • {{ .Database }}: The database name

  • {{ .Params }}: Query parameters (e.g., ?parseTime=true&timeout=5s)

  • Kubernetes Service documentation
    sealed-secretsarrow-up-right
    external-secretsarrow-up-right
    Go documentationarrow-up-right
    spinner
    docker push <private-registry-url>/mariadb/mariadb-enterprise-operator:25.8.0
    docker push <private-registry-url>/mariadb/mariadb-enterprise-operator:25.8.0
    ctr image export mariadb-enterprise-operator-25.8.0.tar docker.mariadb.com/mariadb-enterprise-operator:25.8.0
    crictl images
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      database: mariadb
      secretName: connection
      healthCheck:
        interval: 30s
        retryInterval: 3s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb
      serviceName: mariadb-primary
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      secretName: connection
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      username: app
      passwordSecretKeyRef:
        name: app-password
        key: password
        generate: true
      database: app
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: app-connection
    spec:
      mariaDbRef:
        name: mariadb
      username: app
      passwordSecretKeyRef:
        name: app-password
        key: password
      database: app
      secretName: app-connection
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      database: mariadb
      secretName: connection
      secretTemplate:
        metadata:
          labels:
            app.kubernetes.io/name: myapp
          annotations:
            app.kubernetes.io/managed-by: mariadb-enterprise-operator
        key: dsn
        usernameKey: username
        passwordKey: password
        hostKey: host
        portKey: port
        databaseKey: database
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      database: mariadb
      params:
        parseTime: "true"
        timeout: "5s"
      secretName: connection
      secretTemplate:
        key: dsn
        format: mysql://{{ .Username }}:{{ .Password }}@{{ .Host }}:{{ .Port }}/{{ .Database }}{{ .Params }}
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: app
    spec:
      mariaDbRef:
        name: mariadb-galera
      require:
        issuer: "/CN=mariadb-galera-ca"
        subject: "/CN=mariadb-galera-client"
      host: "%"
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Grant
    metadata:
      name: grant-app
    spec:
      mariaDbRef:
        name: mariadb-galera
      privileges:
        - "ALL PRIVILEGES"
      database: "*"
      table: "*"
      username: app
      host: "%"
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb-galera
      username: app
      tlsClientCertSecretRef:
        name: mariadb-galera-client-cert
      healthCheck:
        interval: 30s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
      namespace: app
    spec:
      mariaDbRef:
        name: mariadb
        namespace: mariadb
      username: app
      passwordSecretKeyRef:
        name: app
        key: password
      database: app
      secretName: connection
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection-maxscale
    spec:
      maxScaleRef:
        name: maxscale-galera
      username: maxscale-galera-client
      passwordSecretKeyRef:
        name: maxscale-galera-client
        key: password
      secretName: conn-mxs
      port: 3306
      healthCheck:
        interval: 30s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection-external
    spec:
      mariaDbRef:
        name: external-mariadb
        kind: ExternalMariaDB
      username: user
      passwordSecretKeyRef:
        name: mariadb
        key: password
      database: mariadb
      secretName: connection-external
      healthCheck:
        interval: 5s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      database: mariadb
      secretName: connection
      healthCheck:
        interval: 30s
        retryInterval: 3s

    PAM

    The MariaDB pam plugin facilitates user authentication by interfacing with the Pluggable Authentication Modules (PAM) framework, enabling diverse and centralized authentication schemes.

    Currently the enterprise operator utilizes this plugin to provide support for:

    • LDAP based authentication

    hashtag
    LDAP

    This guide outlines the process of configuring MariaDB to authenticate users against an LDAP or Active Directory service. The integration is achieved by using MariaDB's Pluggable Authentication Module (PAM) plugin, which delegates authentication requests to the underlying Linux PAM framework.

    hashtag
    How Does It Work?

    To enable LDAP authentication for MariaDB through PAM, several components work in tandem:

    • PAM (Pluggable Authentication Modules): A framework used by Linux and other UNIX-like systems to consolidate authentication tasks. Applications like MariaDB can use PAM to authenticate users without needing to understand the underlying authentication mechanism. Operations such as system login, screen unlocking, and sudo access commonly use PAM.

    • nss-pam-ldapd: This is the software package that provides the necessary bridge between PAM and an LDAP server. It includes the core components required for authentication.

    • pam_ldap.so: A specific PAM module, provided by the nss-pam-ldapd package. This module is the "plug-in" that the PAM framework loads to handle authentication requests destined for an LDAP server.

    The nslcd daemon is ran as a sidecar container and communication happens through the shared unix socket, following container best practices of keeping a single process per container.

    hashtag
    What is needed for LDAP Auth?

    nslcd is configured with 2 files. nslcd.conf which tells the daemon about the LDAP server and nsswitch.conf, determine the sources from which to obtain name-service information.

    nslcd can be configured to run as a specific user based on the uid and gid props specified in the config file, however that user should have sufficient permissions to read/write to /var/run/nslcd, should own both nslcd.conf and nsswitch.conf and they should not be too open (0600).

    Both of these configuration files will be attached later on in the example given.

    hashtag
    nslcd.conf

    The /etc/nslcd.conf is the configuration file for LDAP nameservice daemon.

    In a production environment it is recommended to use LDAPS (LDAP secure), which uses traditional TLS encryption to secure data in transit. To do so, you need to add the following to your nslcd.conf file:

    hashtag
    nsswitch.conf

    The Name Service Switch (NSS) configuration file, located at /etc/nsswitch.conf. It is used by the GNU C Library and certain other applications to determine the sources from which to obtain name-service information in a range of categories, and in what order. Each category of information is identified by a database name.

    hashtag
    Installing The PAM Plugin

    The pam plugin is not enabled by default (even though it is installed). To enable it, you should add the following lines to your MariaDB Custom Resource:

    See below for a complete example.

    hashtag
    Combining It All Together

    Fistly, we need to create our ConfigMaps and Secrets, that will store the nsswitch.conf, nslcd.conf and the mariadb pam module.

    circle-info

    Make sure to adapt the nslcd-conf as per your ldap server configuration.

    mariadb-nss-config.yaml:

    kubectl apply -f mariadb-nss-config.yaml

    Now that our configuration is done, we need to create the MariaDB custom resource along with needed configurations.

    mariadb.yaml:

    kubectl apply -f mariadb.yaml

    And in the end we need to create our user in the database, which must have the same name as a user in ldap server. In the example below that's ldap-user. We also create mariadb-ldap secret, which holds the name of the plugin we are using as well as the module we need to load.

    mariadb-user.yaml:

    kubectl apply -f mariadb-user.yaml

    After a few seconds, the user should have been created by the operator. To verify that all is working as expected, modify the <password> field below and run:

    You should see something along the lines of:

    hashtag
    LDAPS

    If you followed the instructions for setting up a basic MariaDB instance with ldap, you need to fetch the public certificate that your LDAP server is set up with and add it to a called mariadb-ldap-tls.

    If you have the certificate locally in a file called tls.crt you can run:

    hashtag
    With MaxScale

    To put MaxScale in front of your PAM-enabled MariaDB cluster, configure MaxScale so that it skips checking if passwords of incoming clients are correct, but rather assumes they are. The failure still occurs, but at the time when MaxScale tries to authenticate to the backend servers.

    maxscale-ldap.yaml:

    kubectl apply -f maxscale-ldap.yaml

    Ref:

    hashtag
    Known Issues

    Slow Start On KIND

    This may be a problem with the maximum number of file-handles a process can allocate. Some systems have this value set to really high, which causes an issue. To remedy this, you need to delete your kind cluster and run:

    At this point, the problem should be fixed.

    For more information, check .

    This page is: Copyright © 2025 MariaDB. All rights reserved.

  • nslcd (Name Service Lookup Daemon): This daemon acts as an intermediary service. The pam_ldap.so module does not communicate directly with the LDAP server. Instead, it forwards authentication requests to the nslcd daemon, which manages the connection and communication with the LDAP directory. This design allows for connection caching and a more robust separation of concerns.

  • secretarrow-up-right
    skip_authenticationarrow-up-right
    this commentarrow-up-right
    spinner
    # /etc/nslcd.conf: Configuration file for nslcd(8)
    # The user/group nslcd will run as. Note that these should not be LDAP users.
    # required to be `mysql`
    uid mysql
    # required to be `mysql`
    gid mysql
    
    # The location of the LDAP server.
    uri ldap://openldap-service.default.svc.cluster.local:389
    
    # The search base that will be used for all queries.
    base dc=openldap-service,dc=default,dc=svc,dc=cluster,dc=local
    
    # The distinguished name with which to bind to the directory server for lookups.
    # This is a service account used by the daemon.
    binddn cn=admin,dc=openldap-service,dc=default,dc=svc,dc=cluster,dc=local
    bindpw PASSWORD_REPLACE-ME
    # Change the protocol to `ldaps`
    +uri ldaps://openldap-service.default.svc.cluster.local:636
    -uri ldap://openldap-service.default.svc.cluster.local:389
    
    # ...
    
    +tls_reqcert demand # Look at: https://linux.die.net/man/5/ldap.conf then search for TLS_REQCERT
    +tls_cacertfile /etc/openldap/certs/tls.crt # You will need to mount this certificate (from a secret) later
    passwd:     files ldap
    group:      files ldap
    shadow:     files ldap
      # ....
      myCnf: |
        [mariadb]
        plugin_load_add = auth_pam # Load auth plugin
      # ....
    ---
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: mariadb-nslcd-secret
    stringData:
      nslcd.conf: |
        # /etc/nslcd.conf: Configuration file for nslcd(8)
        # The user/group nslcd will run as. Note that these should not be LDAP users.
        uid mysql # required to be `mysql`
        gid mysql # required to be `mysql`
    
        # The location of the LDAP server.
        uri ldap://openldap-service.default.svc.cluster.local:389
    
        # The search base that will be used for all queries.
        base dc=openldap-service,dc=default,dc=svc,dc=cluster,dc=local
    
        # The distinguished name with which to bind to the directory server for lookups.
        # This is a service account used by the daemon.
        binddn cn=admin,dc=openldap-service,dc=default,dc=svc,dc=cluster,dc=local
        bindpw PASSWORD_REPLACE-ME
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mariadb-nsswitch-configmap
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      nsswitch.conf: |
        passwd:     files ldap
        group:      files ldap
        shadow:     files ldap
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mariadb-pam-configmap
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      mariadb: |
        # This is needed to tell PAM to use pam_ldap.so
        auth required pam_ldap.so
        account required pam_ldap.so
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb # Used to hold the mariadb and root user passwords
      labels:
        enterprise.mariadb.com/watch: ""
    stringData:
      password: MariaDB11!
      root-password: MariaDB11!
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
    
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
        generate: true
      database: mariadb
    
      port: 3306
    
      storage:
        size: 1Gi
    
      service:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.20
    
      myCnf: |
        [mariadb]
        bind-address=*
        default_storage_engine=InnoDB
        binlog_format=row
        innodb_autoinc_lock_mode=2
        innodb_buffer_pool_size=800M
        max_allowed_packet=256M
    
        plugin_load_add = auth_pam # Load auth plugin
    
      resources:
        requests:
          cpu: 1
          memory: 128Mi
        limits:
          memory: 1Gi
    
      metrics:
        enabled: true
    
      volumes: # Attach `nslcd.conf`, `nsswitch.conf` and `mariadb` (pam). Also add an emptyDir volume for `nslcd` socket
        - name: nslcd
          secret:
            secretName: mariadb-nslcd-secret
            defaultMode: 0600
        - name: nsswitch
          configMap:
            name: mariadb-nsswitch-configmap
            defaultMode: 0600
        - name: mariadb-pam
          configMap:
            name: mariadb-pam-configmap
            defaultMode: 0600
        - name: nslcd-run
          emptyDir: {}
    
      sidecarContainers:
        # The `nslcd` daemon is ran as a sidecar container
        - name: nslcd
          image: docker.mariadb.com/nslcd:0.9.10-13
          volumeMounts:
            - name: nslcd
              mountPath: /etc/nslcd.conf
              subPath: nslcd.conf
            - name: nsswitch
              mountPath: /etc/nsswitch.conf
              subPath: nsswitch.conf
          # nslcd-run is missing because volumeMounts from main container are shared with sidecar
    
      volumeMounts:
        - name: mariadb-pam
          mountPath: /etc/pam.d/mariadb
          subPath: mariadb
        - name: nslcd-run
          mountPath: /var/run/nslcd
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb-ldap
    stringData:
      plugin: pam # name of the plugin, must be `pam`
      pamModule: mariadb # This is the name of the pam config file placed in `/etc/pam.d/`
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: ldap-user # This user must exist already in your ldap server.
    spec:
      mariaDbRef:
        name: mariadb
      host: "%" # Don't specify the ldap host here. Keep this as is
      passwordPlugin:
        pluginNameSecretKeyRef:
          name: mariadb-ldap
          key: plugin
        pluginArgSecretKeyRef:
          name: mariadb-ldap
          key: pamModule
    
      cleanupPolicy: Delete
      requeueInterval: 10h
      retryInterval: 30s
    kubectl run mariadb-connect --rm -it --image=mariadb:11.4 -- bash -c "mariadb -u ldap-user -p'<secret>' --ssl=false -h mariadb"
    If you don't see a command prompt, try pressing enter.
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 95
    Server version: 11.4.7-4-MariaDB-enterprise MariaDB Enterprise Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]>
    kubectl create secret generic mariadb-ldap-tls --from-file=./tls.crt
      volumes: # Attach `nslcd.conf`, `nsswitch.conf` and `mariadb` (pam). Also add an emptyDir volume for `nslcd` socket
        - name: nslcd
          secret:
            secretName: mariadb-nslcd-secret
            defaultMode: 0600
        - name: nsswitch
          configMap:
            name: mariadb-nsswitch-configmap
            defaultMode: 0600
        - name: mariadb-pam
          configMap:
            name: mariadb-pam-configmap
            defaultMode: 0600
        - name: nslcd-run
          emptyDir: {}
    +    - name: ldap-tls
    +      secret:
    +        secretName: mariadb-ldap-tls
    +        defaultMode: 0600
    
      sidecarContainers:
        # The `nslcd` daemon is ran as a sidecar container
        - name: nslcd
          image: docker.mariadb.com/nslcd:0.9.10-13
          volumeMounts:
            - name: nslcd
              mountPath: /etc/nslcd.conf
              subPath: nslcd.conf
            - name: nsswitch
              mountPath: /etc/nsswitch.conf
              subPath: nsswitch.conf
    +        - name: ldap-tls
    +          mountPath: /etc/openldap/certs/
          # nslcd-run is missing because volumeMounts from main container are shared with sidecar
    
      volumeMounts:
        - name: mariadb-pam
          mountPath: /etc/pam.d/mariadb
          subPath: mariadb
        - name: nslcd-run
          mountPath: /var/run/nslcd
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-repl
    spec:
      services:
        - name: rw-router
          router: readwritesplit
          listener:
            port: 3306
    +        params: # Configure the following options for all services that should be PAM-enabled.
    +          authenticator: pamauth
    +          authenticator_options: "skip_authentication=true"
    sudo sysctl -w fs.nr_open=1048576
    kind create cluster

    Deployment Overview

    hashtag
    What You Have

    One Package: ai-nexus.deb

    What's Inside the Package:

    • RAG API application

    • MCP Server application

    • Both applications bundled together

    hashtag
    What You Need to Deploy

    hashtag
    1. The Application Package (ai-nexus.deb)

    This contains your RAG API and MCP Server applications.

    hashtag
    2. A Database (MariaDB)

    The applications need a database to store documents and vector embeddings.

    hashtag
    3. Configuration (Secret Management Mode)

    You need to choose HOW to provide secrets (API keys, passwords) to the applications.


    hashtag
    Two Deployment Options

    hashtag
    Option A: Deploy on Ubuntu (Native) ✅ SIMPLER

    What happens: Install the .deb package directly on Ubuntu

    Steps:

    1. Install MariaDB on Ubuntu

    2. Install ai-nexus.deb on Ubuntu

    3. Configure secrets (choose a mode)

    4. Start services

    Guide: UBUNTU_DEPLOYMENT_GUIDE.md


    hashtag
    Option B: Deploy with Docker (on Windows) 🐳

    What happens: Package everything in Docker containers

    Steps:

    1. Build Docker image (wraps the .deb package)

    2. Start containers with docker-compose

    3. Configure secrets (choose a mode)

    Guide: DOCKER_DEPLOYMENT_GUIDE.md


    hashtag
    Secret Management Modes (Works with BOTH Options)

    After you deploy the application (Ubuntu or Docker), you choose ONE mode:

    hashtag
    Mode 1: Standalone (Simplest) ⭐

    How it works: Secrets stored in a plain text config file

    Config File Location:

    • Ubuntu: /opt/rag-in-a-box/config/config.env.template

    • Docker: config.env.secure.local

    Example:

    How to generate secure keys:

    When to use: Development, testing, single developer


    hashtag
    Mode 2: Local Vault (Production-Like) 🔐

    How it works: Secrets stored in HashiCorp Vault (running locally)

    Architecture:

    Config File Location:

    • Ubuntu: /opt/rag-in-a-box/config/config.env.template

    • Docker: config.env.vault.local

    Example:

    When to use: Team development, production-like testing


    hashtag
    Mode 3: 1Password (Enterprise) 🔑

    How it works: Secrets stored in 1Password vault

    Architecture:

    Config File:

    When to use: Enterprise with 1Password subscription


    hashtag
    Mode 4: HCP Vault (Production Cloud) ☁️

    How it works: Secrets stored in HashiCorp Cloud Platform

    Architecture:

    When to use: Production cloud deployments


    hashtag
    Complete Deployment Flow

    hashtag
    Scenario 1: Ubuntu Native + Standalone Mode


    hashtag
    Scenario 2: Ubuntu Native + Vault Mode


    hashtag
    Scenario 3: Docker + Standalone Mode


    hashtag
    Scenario 4: Docker + Vault Mode


    hashtag
    Key Points to Understand

    hashtag
    1. The Package is the Same

    The ai-nexus.deb package is identical regardless of:

    • Where you deploy it (Ubuntu or Docker)

    • Which secret mode you use (Standalone, Vault, 1Password, HCP)

    hashtag
    2. Deployment Location is Independent of Secret Mode

    You can use ANY secret mode with ANY deployment location:

    • Ubuntu + Standalone ✅

    • Ubuntu + Vault ✅

    • Ubuntu + 1Password ✅

    • Docker + Standalone ✅

    hashtag
    3. The Application Decides at Startup

    When RAG API and MCP Server start, they:

    1. Read the config file

    2. Check which mode is configured

    3. Fetch secrets accordingly:


    hashtag
    Which Guide to Use?

    hashtag
    I want to deploy on Ubuntu (no Docker)

    → Use: UBUNTU_DEPLOYMENT_GUIDE.md

    Then choose secret mode:

    • Standalone: Edit /opt/rag-in-a-box/config/config.env.template with actual secrets

    • Vault: Install Vault, store secrets, configure Vault connection in config

    • 1Password: Install 1Password CLI, configure 1Password references in config


    hashtag
    I want to deploy with Docker (on Windows)

    → Use: DOCKER_DEPLOYMENT_GUIDE.md

    Then choose secret mode:

    • Standalone: Edit config.env.secure.local with actual secrets

    • Vault: Run Vault container, store secrets, use config.env.vault.local

    • 1Password: Install 1Password CLI, use config.env.1password.employee


    hashtag
    Quick Decision Tree


    hashtag
    Example: Complete Ubuntu Deployment (Standalone)


    hashtag
    Example: Complete Ubuntu Deployment (Vault)


    hashtag
    Summary

    One Package (ai-nexus.deb) contains RAG API + MCP Server

    Two Deployment Options:

    1. Ubuntu Native (install .deb directly)

    2. Docker (wrap .deb in container)

    Four Secret Modes (choose one):

    1. Standalone (secrets in config file)

    2. Local Vault (secrets in local Vault)

    3. 1Password (secrets in 1Password)

    4. HCP Vault (secrets in cloud Vault)

    The application is the same - only the deployment location and secret source change.


    hashtag
    Which Documentation to Read?

    Your Situation
    Read This

    Is this clearer now? The key insight is:

    • Same package everywhere

    • Choose where to deploy (Ubuntu or Docker)

    • Choose how to manage secrets (Standalone/Vault/1Password/HCP)

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Docker + Vault ✅

  • Docker + 1Password ✅

  • Standalone: Read from config file directly
  • Vault: Connect to Vault and fetch

  • 1Password: Use 1Password CLI to fetch

  • HCP: Connect to HCP Vault and fetch

  • Have Ubuntu, want simplest setup

    Have Ubuntu, want Vault

    + Vault setup

    Have Windows, want Docker

    Have Windows, want Docker + Vault

    Need to understand architecture

    Need step-by-step checklist

    spinner
    Ubuntu Server
    ├── MariaDB (you install separately)
    ├── RAG API (from .deb package)
    └── MCP Server (from .deb package)
    Windows + Docker Desktop
    ├── Docker Container 1: MariaDB
    └── Docker Container 2: ai-nexus.deb 
    GEMINI_API_KEY=your_actual_gemini_api_key_here
    DB_PASSWORD=your_secure_database_password
    SECRET_KEY=your_generated_secret_key_64_chars_long
    # Generate a secure secret key (Python)
    python3 -c "import secrets; print(secrets.token_urlsafe(64))"
    
    # Or using PowerShell
    [Convert]::ToBase64String((1..64 | ForEach-Object { Get-Random -Maximum 256 }))
    Your Application (RAG API + MCP Server)
        ↓ (fetches secrets at startup)
    HashiCorp Vault (running locally)
        ↓ (stores)
    Secrets (API keys, passwords)
    VAULT_ADDR=http://127.0.0.1:8200
    VAULT_TOKEN=your_vault_token
    VAULT_SECRET_PATH=rag-in-a-box
    # Application fetches secrets from Vault at startup
    Your Application (RAG API + MCP Server)
        ↓ (fetches secrets via 1Password CLI)
    1Password CLI
        ↓ (connects to)
    1Password Cloud
        ↓ (stores)
    Secrets (API keys, passwords)
    GEMINI_API_KEY=op://Employee/RAG-API-Keys/gemini
    DB_PASSWORD=op://Employee/RAG-Database/password
    # op:// references point to 1Password items
    Your Application (RAG API + MCP Server)
        ↓ (fetches secrets at startup)
    HCP Vault (cloud service)
        ↓ (stores)
    Secrets (API keys, passwords)
    Step 1: Install MariaDB on Ubuntu
        ↓
    Step 2: Install ai-nexus.deb on Ubuntu
        ↓
    Step# 3. Edit /opt/rag-in-a-box/config/config.env.template
            Put secrets directly in file (Standalone mode)
            GEMINI_API_KEY=your_actual_api_key
            DB_PASSWORD=your_secure_password
        ↓
    Step 4: Start services in their own terminals by running:
            /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
            CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
        ↓
    Step 5: Application reads secrets from config file
        ↓
    ✅ Done! Application running with Standalone mode
    Step 1: Install MariaDB on Ubuntu
        ↓
    Step 2: Install HashiCorp Vault on Ubuntu
        ↓
    Step# 3. Store secrets in Vault
            vault kv put secret/rag-in-a-box \
              GEMINI_API_KEY="your_api_key" \
              DB_PASSWORD="your_password"
        ↓
    Step 4: Install ai-nexus.deb on Ubuntu
        ↓
    Step 5: Edit /opt/rag-in-a-box/config/config.env.template
            Configure Vault connection (NOT the secrets themselves)
            VAULT_ADDR=http://127.0.0.1:8200
            VAULT_TOKEN=your_vault_root_token
        ↓
    Step 6: Start services in their own terminals by running:
            /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
            CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
        ↓
    Step 7: Application connects to Vault and fetches secrets
        ↓
    ✅ Done! Application running with Vault mode
    Step 1: Build Docker image (wraps ai-nexus.deb)
            docker build -t ai-nexus-image .
        ↓
    Step# 2. Edit config.env.secure.local
            Put secrets directly in file (Standalone mode)
            GEMINI_API_KEY=your_actual_api_key
            DB_PASSWORD=your_secure_password
        ↓
    Step 3: Start containers
            docker-compose up -d
            (Starts MariaDB container + ai-nexus container)
        ↓
    Step 4: Application reads secrets from config file
        ↓
    ✅ Done! Application running with Standalone mode
    Step 1: Build Docker image (wraps ai-nexus.deb)
            docker build -t ai-nexus-image .
        ↓
    Step 2: Start Vault container
            docker-compose -f Localvault/docker-compose.vault.yml up -d
        ↓
    Step 3. Store secrets in Vault
            docker exec vault vault kv put secret/rag-in-a-box \
              GEMINI_API_KEY="your_api_key" \
              DB_PASSWORD="your_password"
        ↓
    Step 4: Edit config.env.vault.local
            Configure Vault connection
            VAULT_ADDR=http://rag-vault:8200
            VAULT_TOKEN=your_vault_token
        ↓
    Step 5: Start containers with Vault config
            docker-compose --env-file config.env.vault.local up -d
        ↓
    Step 6: Application connects to Vault and fetches secrets
        ↓
    ✅ Done! Application running with Vault mode
    Do you have Ubuntu system?
    ├─ Yes → Deploy natively on Ubuntu
    │         Guide: UBUNTU_DEPLOYMENT_GUIDE.md
    │         
    │         Choose secret mode:
    │         ├─ Simple testing? → Standalone
    │         ├─ Team development? → Local Vault
    │         ├─ Have 1Password? → 1Password
    │         └─ Production cloud? → HCP Vault
    │
    └─ No (Windows/Mac) → Deploy with Docker
              Guide: DOCKER_DEPLOYMENT_GUIDE.md
              
              Choose secret mode:
              ├─ Simple testing? → Standalone
              ├─ Team development? → Local Vault (Docker)
              ├─ Have 1Password? → 1Password
              └─ Production cloud? → HCP Vault
    # 1. Install database
    sudo apt install -y mariadb-server
    sudo mysql_secure_installation
    
    # 2. Create database
    sudo mariadb -u root -p
    CREATE DATABASE kb_chunks;
    EXIT;
    
    # 3. Install application
    sudo apt install -y ./ai-nexus.deb
    
    # 4. Configure (Standalone mode - secrets in file)
    cp /opt/rag-in-a-box/config/config.env.template /path/to/config.env
    nano /path/to/config.env
    
    # Add these lines:
    GEMINI_API_KEY=your_actual_gemini_api_key_here
    DB_PASSWORD=your_secure_database_password
    SECRET_KEY=your_generated_secret_key_must_be_same_for_all_three
    JWT_SECRET_KEY=your_generated_secret_key_must_be_same_for_all_three
    MCP_AUTH_SECRET_KEY=your_generated_secret_key_must_be_same_for_all_three
    
    # 5. Start services in their own terminals:
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    
    # 6. Verify
    curl http://localhost:8000/health
    
    # ✅ Done! Running in Standalone mode
    # 1. Install database
    sudo apt install -y mariadb-server
    sudo mysql_secure_installation
    sudo mariadb -u root -p -e "CREATE DATABASE kb_chunks;"
    
    # 2. Install Vault
    wget https://releases.hashicorp.com/vault/1.15.0/vault_1.15.0_linux_amd64.zip
    unzip vault_1.15.0_linux_amd64.zip
    sudo mv vault /usr/local/bin/
    
    # 3. Start Vault
    vault server -dev &
    export VAULT_ADDR='http://127.0.0.1:8200'
    export VAULT_TOKEN='root'
    
    # 4. Store secrets in Vault
    vault kv put secret/rag-in-a-box \
      GEMINI_API_KEY="your_actual_gemini_api_key" \
      DB_PASSWORD="your_secure_database_password" \
      SECRET_KEY="your_generated_secret_key"
    
    # 5. Install application
    sudo apt install -y ./ai-nexus.deb
    
    # 6. Configure (Vault mode - connection info only)
    cp /opt/rag-in-a-box/config/config.env.template /path/to/config.env
    nano /path/to/config.env
    
    # Add these lines:
    VAULT_ADDR=http://127.0.0.1:8200
    VAULT_TOKEN=your_vault_root_token
    VAULT_SECRET_PATH=rag-in-a-box
    VAULT_MOUNT_POINT=secret
    
    # 7. Start services in their own terminals:
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    
    # 8. Verify
    curl http://localhost:8000/health
    
    # ✅ Done! Running in Vault mode
    # Application fetched secrets from Vault at startup
    Ubuntu Deployment Guide
    Ubuntu Deployment Guide
    Docker Deployment Guide
    Docker Deployment Guide (Vault section)
    Technical Architecture
    Deployment Checklist
    MariaDB Services
    MariaDB Galera Cluster
    High Availability documentation
    primary switchover

    Docker Deployment Guide

    hashtag
    📋 Quick Navigation

    • System Overview


    hashtag
    System Overview

    hashtag
    What is MariaDB AI RAG?

    MariaDB AI RAG (RAG-in-a-Box) is a containerized RAG system providing:

    • Document ingestion & processing (PDF, TXT, DOCX, MD, etc.)

    • Vector embeddings using Google Gemini

    • Semantic search & AI-powered queries

    hashtag
    Architecture

    hashtag
    Technology Stack

    • Container: Docker Desktop + Docker Compose

    • OS: Ubuntu 24.04 LTS

    • Database: MariaDB 11 with vector support


    hashtag
    Prerequisites

    hashtag
    Hardware Requirements

    Component
    Minimum
    Recommended

    hashtag
    Software Requirements

    1. Windows 10/11 Pro/Enterprise (64-bit)

    2. Docker Desktop 4.x+ with WSL 2 backend

    3. PowerShell 5.1+ (built-in)

    hashtag
    API Keys

    1. Google Gemini API Key (Required)

      • Get from: https://makersuite.google.com/app/apikey

      • Free tier available

    hashtag
    Port Requirements

    • 8000 (RAG API)

    • 8002 (MCP Server)

    • 3306 (MariaDB)

    • 8200 (Vault - if using Vault mode)


    hashtag
    Pre-Deployment Checklist

    hashtag
    1. Verify Docker Installation

    hashtag
    2. Check Available Ports

    hashtag
    3. Navigate to Project Directory

    hashtag
    4. Configure API Key


    hashtag
    Deployment - Standalone Mode

    Standalone Mode = Simplest setup with secrets in config file

    hashtag
    Step 1: Build Docker Image

    Time: 2-5 minutes (first time)

    hashtag
    Step 2: Start Services

    Expected Output:

    hashtag
    Step 3: Monitor Startup

    Wait for:

    Press Ctrl+C to exit logs (containers keep running)

    hashtag
    Step 4: Verify Services

    Expected:

    hashtag
    Step 5: Test Accessibility

    hashtag
    ✅ Deployment Complete!

    Access Points:

    • RAG API: http://localhost:8000/docs

    • MCP Server: http://localhost:8002/mcp


    hashtag
    Deployment - Vault Mode

    Vault Mode = Production-like secret management with HashiCorp Vault

    hashtag
    Step 1: Build Docker Image

    hashtag
    Step 2: Run Automated Vault Setup

    Expected:

    hashtag
    Step 3: Update Gemini API Key in Vault

    hashtag
    Step 4: Start MariaDB AI RAG with Vault Config

    hashtag
    Step 5: Monitor & Verify

    hashtag
    ✅ Deployment Complete!

    Vault Management:


    hashtag
    Post-Deployment

    hashtag
    1. Generate Authentication Token

    hashtag
    2. Authorize in Swagger UI

    hashtag
    3. Test Document Ingestion

    hashtag
    4. Test RAG Query


    hashtag
    Usage Guide

    hashtag
    Document Ingestion

    hashtag
    Via Swagger UI

    1. Open http://localhost:8000/docs

    2. Authorize with Bearer token

    3. Use POST /documents/ingest endpoint

    hashtag
    Via PowerShell

    hashtag
    RAG Query

    hashtag
    Via Swagger UI

    1. Open http://localhost:8000/docs

    2. Use POST /orchestrate/generation endpoint

    3. Enter your question

    hashtag
    Via PowerShell

    hashtag
    MCP Server Integration

    hashtag
    For Windsurf/Claude Desktop

    Add to MCP configuration:

    hashtag
    Available MCP Tools

    • Database Tools: execute_sql, list_tables, get_table_schema

    • Vector Tools: create_vector_store, search_vector_store


    hashtag
    Troubleshooting

    hashtag
    Services Won't Start

    hashtag
    Database Connection Errors

    hashtag
    Port Already in Use

    hashtag
    Authentication Fails

    hashtag
    API Key Invalid

    hashtag
    Health Check Timeout


    hashtag
    Management Commands

    hashtag
    View Status

    hashtag
    View Logs

    hashtag
    Stop Services

    hashtag
    Start Services

    hashtag
    Restart Services

    hashtag
    Clean Everything (⚠️ Deletes Data)

    hashtag
    Access Container Shell

    hashtag
    View Resource Usage


    hashtag
    Quick Reference

    hashtag
    Standalone Mode

    hashtag
    Vault Mode

    hashtag
    Switching Modes

    hashtag
    Access Points

    • RAG API: http://localhost:8000/docs

    • MCP Server: http://localhost:8002/mcp

    • Database: localhost:3306


    hashtag
    Support

    hashtag
    Check Logs

    hashtag
    Verify Configuration

    hashtag
    Test Connectivity


    🎉 Deployment Complete! Your MariaDB AI RAG is ready to use.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    RESTful RAG API (Port 8000)
  • MCP Server for AI agents (Port 8002)

  • MariaDB 11 with vector support (Port 3306)

  • Embedding: Google Gemini text-embedding-004 (768-dim)
  • LLM: Google Gemini gemini-2.0-flash

  • Framework: FastAPI + Uvicorn

  • Upload file(s)
  • Wait for processing

  • Get AI-generated answer

    RAG Tools: ingest_documents, generate_response

  • Health Tools: health_check, get_server_status

  • CPU

    4 cores

    8+ cores

    RAM

    8 GB

    16+ GB

    Storage

    20 GB free

    50+ GB free

    Prerequisites
    Deployment - Standalone Mode
    Deployment - Vault Mode
    Post-Deployment
    Usage Guide
    Troubleshooting
    spinner
    Windows Host
      └─ Docker Desktop
          ├─ ai-nexus Container (Ubuntu 24.04)
          │   ├─ RAG API (Port 8000) - FastAPI
          │   └─ MCP Server (Port 8002) - FastAPI
          └─ mysql-db Container (MariaDB 11)
              └─ Vector Database (Port 3306)
    docker --version
    docker-compose --version
    
    # Test Docker
    docker run hello-world
    # Verify ports are free
    netstat -ano | findstr :8000
    netstat -ano | findstr :8002
    netstat -ano | findstr :3306
    
    # No output = ports are free ✓
    # Navigate to your MariaDB AI RAG deployment directory
    cd "<path-to-your-mariadb-ai-rag-directory>"
    
    # Verify required files exist
    Get-ChildItem | Select-Object Name
    
    # Required files:
    # ✓ ai-nexus.deb
    # ✓ Dockerfile
    # ✓ docker-compose.yml
    # ✓ start-services.sh
    # ✓ config.env.secure.local
    # Edit configuration file
    notepad config.env.secure.local
    
    # Update this line with your actual API key:
    # GEMINI_API_KEY=YOUR_ACTUAL_API_KEY_HERE
    
    # Save and close
    # Ensure you're in the MariaDB AI RAG directory
    docker build -t ai-nexus-image .
    docker-compose up -d
    [+] Running 3/3
     ✔ Network ai-nexus-network    Created
     ✔ Container mysql-db          Started
     ✔ Container ai-nexus          Started
    docker logs ai-nexus -f
    ✓ RAG API is ready! (took ~30 seconds)
    Starting MCP server...
    Adaptive MCP Server ready on 0.0.0.0:8002
    docker-compose ps
    NAME       STATUS                    PORTS
    ai-nexus   Up X minutes              0.0.0.0:8000->8000/tcp, 0.0.0.0:8002->8002/tcp
    mysql-db   Up X minutes (healthy)    0.0.0.0:3306->3306/tcp
    # Test RAG API
    Invoke-RestMethod -Uri "http://localhost:8000/health"
    
    # Open Swagger UI
    Start-Process "http://localhost:8000/docs"
    # Ensure you're in the MariaDB AI RAG directory
    docker build -t ai-nexus-image .
    .\Localvault\setup_vault_local.ps1
    [SUCCESS] Vault Setup Complete!
    
    Vault Details:
      URL:    http://127.0.0.1:8200
      Token:  rag-root-token
      Path:   secret/rag-in-a-box
    docker exec -e VAULT_TOKEN=rag-root-token rag-vault vault kv patch secret/rag-in-a-box GEMINI_API_KEY="YOUR_ACTUAL_API_KEY"
    docker-compose --env-file config.env.vault.local up -d
    # Watch logs
    docker logs ai-nexus -f
    
    # Check status
    docker-compose ps
    # View secrets
    docker exec -e VAULT_TOKEN=rag-root-token rag-vault vault kv get secret/rag-in-a-box
    
    # Update secret
    docker exec -e VAULT_TOKEN=rag-root-token rag-vault vault kv patch secret/rag-in-a-box KEY="value"
    
    # Restart to apply changes
    docker restart ai-nexus
    # Open Swagger UI
    Start-Process "http://localhost:8000/docs"
    
    # In browser:
    # 1. Navigate to POST /token endpoint
    # 2. Click "Try it out"
    # 3. Enter credentials:
    #    {
    #      "username": "admin",
    #      "password": "your_password"
    #    }
    # 4. Click "Execute"
    # 5. Copy the "access_token" from response
    1. Click "Authorize" button (🔒 icon)
    2. Enter: Bearer YOUR_TOKEN_HERE
    3. Click "Authorize"
    1. Navigate to POST /ingest endpoint
    2. Click "Try it out"
    3. Upload a test document (PDF/TXT)
    4. Click "Execute"
    5. Verify: Response shows document processed
    1. Navigate to POST /generate endpoint
    2. Enter a question about your document
    3. Click "Execute"
    4. Verify: AI-generated response with sources
    $token = "YOUR_TOKEN_HERE"
    $headers = @{
        "Authorization" = "Bearer $token"
    }
    
    $file = "C:\path\to\document.pdf"
    $form = @{
        file = Get-Item -Path $file
    }
    
    Invoke-RestMethod -Uri "http://localhost:8000/documents/ingest" `
        -Method POST `
        -Headers $headers `
        -Form $form
    $token = "YOUR_TOKEN_HERE"
    $headers = @{
        "Authorization" = "Bearer $token"
        "Content-Type" = "application/json"
    }
    
    $body = @{
        query = "What is the main topic of the document?"
    } | ConvertTo-Json
    
    Invoke-RestMethod -Uri "http://localhost:8000/orchestrate/generation" `
        -Method POST `
        -Headers $headers `
        -Body $body
    {
      "mcpServers": {
        "ai-nexus": {
          "url": "http://localhost:8002/mcp",
          "headers": {
            "Authorization": "Bearer YOUR_TOKEN_HERE"
          }
        }
      }
    }
    # Check logs
    docker logs ai-nexus --tail 100
    docker logs mysql-db --tail 50
    
    # Rebuild and restart
    docker build -t ai-nexus-image .
    docker-compose down
    docker-compose up -d
    # Check MariaDB status
    docker logs mysql-db --tail 20
    
    # Wait for healthy status
    docker-compose ps
    # Look for "(healthy)" next to mysql-db
    
    # Verify DB_HOST in config
    # Should be: DB_HOST=mysql-db
    # Find process using port
    netstat -ano | findstr :8000
    
    # Stop process (replace <PID>)
    Stop-Process -Id <PID> -Force
    
    # Or change port in docker-compose.yml
    # Verify secret keys are identical
    docker exec ai-nexus env | Select-String "SECRET"
    
    # All three must match:
    # SECRET_KEY
    # JWT_SECRET_KEY
    # MCP_AUTH_SECRET_KEY
    
    # If different, edit config and restart
    docker-compose down
    docker-compose up -d
    # Test Gemini API key
    $apiKey = "YOUR_API_KEY"
    $uri = "https://generativelanguage.googleapis.com/v1beta/models?key=$apiKey"
    Invoke-RestMethod -Uri $uri
    
    # If error: Get new key from https://makersuite.google.com/app/apikey
    # Update in config.env.secure.local or Vault
    # Restart: docker restart ai-nexus
    # Increase timeout in start-services.sh
    # Edit: MAX_WAIT=300  # 5 minutes
    
    # Rebuild
    docker build -t ai-nexus-image .
    docker-compose down
    docker-compose up -d
    docker-compose ps
    # All services
    docker-compose logs -f
    
    # Specific service
    docker logs ai-nexus -f
    docker logs mysql-db -f
    
    # Last N lines
    docker logs ai-nexus --tail 100
    # Stop MariaDB AI RAG
    docker-compose down
    
    # Stop Vault (if using Vault mode)
    docker-compose -f "Localvault/docker-compose.vault.yml" down
    # Standalone mode
    docker-compose up -d
    
    # Vault mode
    docker-compose --env-file config.env.vault.local up -d
    # Restart all
    docker-compose restart
    
    # Restart specific service
    docker restart ai-nexus
    docker-compose down -v
    docker exec -it ai-nexus /bin/bash
    docker stats ai-nexus mysql-db
    # Build
    docker build -t ai-nexus-image .
    
    # Start
    docker-compose up -d
    
    # Stop
    docker-compose down
    # Setup Vault (one-time)
    .\Localvault\setup_vault_local.ps1
    
    # Start
    docker-compose --env-file config.env.vault.local up -d
    
    # Stop
    docker-compose down
    docker-compose -f "Localvault/docker-compose.vault.yml" down
    # Stop current mode
    docker-compose down
    
    # Start different mode
    docker-compose up -d  # Standalone
    docker-compose --env-file config.env.vault.local up -d  # Vault
    docker logs ai-nexus --tail 100
    docker exec ai-nexus env | Select-String "GEMINI"
    docker exec ai-nexus env | Select-String "DB_"
    # RAG API
    Invoke-RestMethod -Uri "http://localhost:8000/health"
    
    # MCP Server
    Invoke-RestMethod -Uri "http://localhost:8002/health"
    
    # Database (from container)
    docker exec ai-nexus curl -s http://mysql-db:3306

    Ubuntu Deployment Guide

    hashtag
    MariaDB AI RAG - Ubuntu Native Deployment Guide

    Deploy MariaDB AI RAG .deb package directly on Ubuntu (without Docker)


    hashtag
    Quick Start


    hashtag
    Prerequisites

    hashtag
    System Requirements

    • OS: Ubuntu 22.04 LTS or 24.04 LTS (x86_64)

    • CPU: 4+ cores (8+ recommended)

    • RAM: 8+ GB (16+ recommended)

    hashtag
    Required

    • Google Gemini API Key: Get from https://makersuite.google.com/app/apikey

    hashtag
    Verify System


    hashtag
    Step 1: Install MariaDB


    hashtag
    Step 2: Secure MariaDB

    Follow prompts:

    • Enter current password for root: [Press Enter]

    • Switch to unix_socket authentication? n

    • Change the root password? Y


    hashtag
    Step 3: Create Database

    In MariaDB shell:


    hashtag
    Step 4: Configure MariaDB

    Add under [mysqld] section:

    Save and restart:


    hashtag
    Step 5: Install MariaDB AI RAG Package

    Verify installation:


    hashtag
    Step 6: Configure MariaDB AI RAG

    Update these essential settings:

    Save: Ctrl+X, Y, Enter


    hashtag
    Step 7: Start Services in their own terminals

    hashtag
    Step 8: Verify Deployment

    Check listening ports:

    Should show LISTEN on both ports

    hashtag
    Test Health Endpoints

    hashtag
    View Logs

    Expected log messages:


    hashtag
    Step 9: Test Functionality

    hashtag
    Generate Authentication Token

    hashtag
    Test Document Upload

    hashtag
    Test RAG Query

    hashtag
    Verify Database

    In MariaDB:


    hashtag
    Access Points

    After successful deployment:

    • RAG API Swagger UI: http://<server-ip>:8000/docs

    • RAG API Health: http://<server-ip>:8000/health

    • MCP Server: http://<server-ip>:8002/mcp

    Get server IP:


    hashtag
    Troubleshooting

    hashtag
    Services Won't Start

    Check logs in the terminal windows

    Common causes:

    1. MariaDB not running

    1. Configuration errors

    1. Port already in use

    1. Permission issues

    hashtag
    Database Connection Fails

    hashtag
    Authentication Fails

    hashtag
    API Key Invalid

    hashtag
    Port Already in Use

    hashtag
    Out of Memory


    hashtag
    Maintenance

    hashtag
    Daily Operations

    hashtag
    Backup Database

    hashtag
    Update Configuration

    hashtag
    Update MariaDB AI RAG

    hashtag
    Optimize Database


    hashtag
    Uninstall


    hashtag
    Security Best Practices

    hashtag
    Change Default Passwords

    Update config:

    hashtag
    Generate New Secret Keys

    hashtag
    Configure Firewall

    hashtag
    Restrict Database Access

    Update config:


    hashtag
    Quick Reference

    hashtag
    Essential Commands

    hashtag
    File Locations

    hashtag
    Service Dependencies

    Start order: MariaDB → RAG API → MCP Server Stop order: MCP Server → RAG API → MariaDB


    hashtag
    Architecture Overview


    hashtag
    Performance Tuning

    hashtag
    MariaDB Optimization

    hashtag
    System Resources


    hashtag
    Deployment Complete! 🎉

    Your MariaDB AI RAG is now running natively on Ubuntu.

    Next Steps:

    1. Access Swagger UI: http://<server-ip>:8000/docs

    2. Generate authentication token

    3. Upload test documents

    4. Start querying with RAG

    For support:

    • Check logs

    • Verify config: nano /path/to/config.env

    • Test health: curl http://localhost:8000/health

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Storage: 20+ GB free
  • Access: Root/sudo privileges

  • New password: [Choose a secure password]
  • Re-enter: [Same password]

  • Remove anonymous users? Y

  • Disallow root login remotely? Y

  • Remove test database? Y

  • Reload privilege tables? Y

  • MCP Health: http://<server-ip>:8002/health
    spinner
    # 1. Install MariaDB
    sudo apt update && sudo apt install -y mariadb-server mariadb-client
    sudo systemctl start mariadb && sudo systemctl enable mariadb
    
    # 2. Secure MariaDB (set root password during setup)
    sudo mysql_secure_installation
    
    # 3. Create database
    sudo mariadb -u root -p <<EOF
    CREATE DATABASE kb_chunks CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    EXIT;
    EOF
    
    # 4. Install MariaDB AI RAG
    sudo apt install -y ./ai-nexus.deb
    
    # 5. Configure (update GEMINI_API_KEY)
    cp /opt/rag-in-a-box/config/config.env.template /path/to/config.env
    nano /path/to/config.env
    
    # 6. Start services in their own terminals
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    
    # 7. Verify
    curl http://localhost:8000/health
    # Check Ubuntu version
    lsb_release -a
    
    # Check disk space
    df -h /
    
    # Check ports are free
    sudo netstat -tuln | grep -E ':(8000|8002|3306)'
    # No output = ports available
    # Update package lists
    sudo apt update
    
    # Install MariaDB
    sudo apt install -y mariadb-server mariadb-client
    
    # Start and enable MariaDB
    sudo systemctl start mariadb
    sudo systemctl enable mariadb
    
    # Verify running
    sudo systemctl status mariadb
    sudo mysql_secure_installation
    # Login to MariaDB
    sudo mariadb -u root -p
    # Enter password: [your_password]
    -- Create database
    CREATE DATABASE kb_chunks CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    -- Verify
    SHOW DATABASES;
    
    -- Exit
    EXIT;
    # Edit configuration
    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    innodb_page_size = 16k
    innodb_default_row_format = dynamic
    max_connections = 100
    innodb_buffer_pool_size = 2G
    # Save: Ctrl+X, Y, Enter
    sudo systemctl restart mariadb
    # Navigate to directory with .deb file
    cd ~/
    
    # Install package
    sudo apt install -y ./ai-nexus.deb
    
    # If dependency issues:
    sudo dpkg -i ai-nexus.deb
    sudo apt-get install -f
    # Check installed files
    dpkg -L ai-nexus | head -20
    
    # Expected locations:
    # /opt/rag-in-a-box/bin/rag-api
    # /opt/rag-in-a-box/bin/mcp-server
    # /opt/rag-in-a-box/config/config.env.template
    
    # Check binaries exist
    ls -lh /opt/rag-in-a-box/bin/
    # Edit configuration file
    cp /opt/rag-in-a-box/config/config.env.template /path/to/config.env
    nano /path/to/config.env
    # ===== DATABASE CONFIGURATION =====
    DB_HOST=localhost
    DB_PORT=3306
    DB_USER=root
    DB_PASSWORD=your_secure_database_password
    DB_NAME=kb_chunks
    
    # ===== API KEYS (REQUIRED - UPDATE THIS!) =====
    GEMINI_API_KEY=your_actual_gemini_api_key_here
    
    # ===== SECURITY KEYS (MUST BE IDENTICAL) =====
    SECRET_KEY=your_generated_secret_key_must_be_same_for_all_three
    JWT_SECRET_KEY=your_generated_secret_key_must_be_same_for_all_three
    MCP_AUTH_SECRET_KEY=your_generated_secret_key_must_be_same_for_all_three
    
    # ===== SERVER CONFIGURATION =====
    APP_HOST=0.0.0.0
    APP_PORT=8000
    MCP_HOST=0.0.0.0
    MCP_PORT=8002
    
    # ===== EMBEDDING & LLM =====
    EMBEDDING_PROVIDER=gemini
    embedding_model=text-embedding-004
    LLM_PROVIDER=gemini
    LLM_MODEL=gemini-2.0-flash
    
    # ===== TABLE NAMES =====
    DOCUMENTS_TABLE=documents_DEMO_gemini
    VDB_TABLE=vdb_tbl_DEMO_gemini
    
    # ===== MCP CONFIGURATION =====
    MCP_ENABLE_AUTH=true
    MCP_ENABLE_VECTOR_TOOLS=true
    MCP_ENABLE_DATABASE_TOOLS=true
    MCP_ENABLE_RAG_TOOLS=true
    MCP_READ_ONLY=false
    MCP_LOG_LEVEL=INFO
    
    # ===== PROCESSING =====
    CHUNK_SIZE=512
    CHUNK_OVERLAP=128
    DOCUMENT_PROCESSING_BATCH_SIZE=5
    EMBEDDING_BATCH_SIZE=32
    # Start RAG API
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    
    # Start MCP Server
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    sudo netstat -tuln | grep -E ':(8000|8002)'
    # Test RAG API
    curl http://localhost:8000/health
    # Expected: {"status":"healthy","database":"connected"}
    
    # Test MCP Server
    curl http://localhost:8002/health
    # Expected: {"status":"healthy"}
    
    # Test API info
    curl http://localhost:8000/
    INFO:     Started server process
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:8000
    # Generate token
    curl -X POST "http://localhost:8000/token" \
      -H "Content-Type: application/json" \
      -d '{"username":"admin","password":"your_password"}'
    
    # Save token for next commands
    export TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    # Create test document
    echo "This is a test document for MariaDB AI RAG RAG system. It contains sample text for testing." > test_document.txt
    
    # Upload document
    curl -X POST "http://localhost:8000/documents/ingest" \
      -H "Authorization: Bearer $TOKEN" \
      -F "file=@test_document.txt"
    
    # Expected output:
    # {"document_id":1,"filename":"test_document.txt","chunks_created":1,"status":"success"}
    # Query the document
    curl -X POST "http://localhost:8000/orchestrate/generation" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"query":"What is this document about?"}'
    
    # Expected: AI-generated response with sources
    # Login to MariaDB
    mariadb -u root -p kb_chunks
    # Enter password: [your_password]
    -- Show tables
    SHOW TABLES;
    
    -- Check documents
    SELECT id, filename, created_at FROM documents_DEMO_gemini;
    
    -- Check embeddings
    SELECT COUNT(*) FROM vdb_tbl_DEMO_gemini;
    
    -- Exit
    EXIT;
    hostname -I
    sudo systemctl status mariadb
    sudo systemctl start mariadb
    nano /path/to/config.env
    # Check for typos, missing values
    sudo lsof -i :8000
    sudo lsof -i :8002
    # Stop conflicting service or kill process
    sudo chmod +x /opt/rag-in-a-box/bin/rag-api
    sudo chmod +x /opt/rag-in-a-box/bin/mcp-server
    sudo chmod 640 /opt/rag-in-a-box/config/config.env.template
    # Test MariaDB connection
    mariadb -u root -p -e "SELECT 1;"
    
    # Check MariaDB status
    sudo systemctl status mariadb
    
    # Restart MariaDB
    sudo systemctl restart mariadb
    
    # Check credentials in config
    sudo grep DB_ /path/to/config.env
    
    # View MariaDB logs
    sudo tail -f /var/log/mysql/error.log
    # Verify all three secret keys are identical
    sudo grep SECRET_KEY /path/to/config.env
    
    # Should show same value for:
    # SECRET_KEY=...
    # JWT_SECRET_KEY=...
    # MCP_AUTH_SECRET_KEY=...
    
    # If different, fix and restart
    nano /path/to/config.env
    # Test Gemini API key
    API_KEY="YOUR_KEY"
    curl -s "https://generativelanguage.googleapis.com/v1beta/models?key=$API_KEY"
    
    # If invalid, update config
    nano /path/to/config.env
    # Update: GEMINI_API_KEY=...
    
    # Restart services
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    # Find process using port
    sudo lsof -i :8000
    sudo lsof -i :8002
    
    # Kill process (if safe)
    sudo kill <PID>
    # Check memory
    free -h
    top
    
    # Add swap if needed (4GB example)
    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
    # Make permanent
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    # Check service status
    sudo systemctl status mariadb
    
    # Test RAG API
    curl http://localhost:8000/health
    # Expected: {"status":"healthy","database":"connected"}
    
    # Test MCP Server
    curl http://localhost:8002/health
    # Expected: {"status":"healthy"}
    
    # Test API info
    curl http://localhost:8000/
    
    # Monitor disk space
    df -h
    # Backup
    sudo mysqldump -u root -p kb_chunks > kb_chunks_backup_$(date +%Y%m%d).sql
    
    # Compress backup
    gzip kb_chunks_backup_$(date +%Y%m%d).sql
    
    # Restore (if needed)
    mariadb -u root -p kb_chunks < kb_chunks_backup_20241013.sql
    # Edit config
    nano /path/to/config.env
    
    # Restart services to apply changes
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    # Install new version
    sudo apt install -y ./ai-nexus-new-version.deb
    
    # Start services in their own terminals
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    
    # Verify
    curl http://localhost:8000/health
    mariadb -u root -p <<EOF
    USE kb_chunks;
    OPTIMIZE TABLE documents_DEMO_gemini;
    OPTIMIZE TABLE vdb_tbl_DEMO_gemini;
    EXIT;
    EOF
    # Remove package
    sudo apt remove --purge rag-in-a-box
    
    # Remove configuration (optional)
    sudo rm -rf /opt/rag-in-a-box/
    
    # Remove database (optional - ⚠️ deletes all data)
    mariadb -u root -p -e "DROP DATABASE kb_chunks;"
    # Change MariaDB root password
    sudo mariadb -u root -p
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_secure_password';
    FLUSH PRIVILEGES;
    EXIT;
    nano /path/to/config.env
    # DB_PASSWORD=your_new_secure_password
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    # Generate secure key
    python3 -c "import secrets; print(secrets.token_urlsafe(64))"
    
    # Use same value for all three keys in config
    nano /path/to/config.env
    # Install UFW
    sudo apt install -y ufw
    
    # Allow SSH (IMPORTANT!)
    sudo ufw allow 22/tcp
    
    # Allow RAG API
    sudo ufw allow 8000/tcp
    
    # Allow MCP Server
    sudo ufw allow 8002/tcp
    
    # Enable firewall
    sudo ufw enable
    
    # Check status
    sudo ufw status
    # Create dedicated database user
    sudo mariadb -u root -p
    CREATE USER 'rag_user'@'localhost' IDENTIFIED BY 'your_secure_password';
    GRANT ALL PRIVILEGES ON kb_chunks.* TO 'rag_user'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;
    nano /path/to/config.env
    # DB_USER=rag_user
    # DB_PASSWORD=your_secure_password
    # Start services
    /opt/rag-in-a-box/bin/rag-api --config /path/to/config.env
    CONFIG_FILE=/path/to/config.env /opt/rag-in-a-box/bin/mcp-server
    
    # Test health
    curl http://localhost:8000/health
    
    # Edit config
    nano /path/to/config.env
    
    # Database access
    mariadb -u root -p kb_chunks
    /opt/rag-in-a-box/bin/rag-api                   # RAG API binary
    /opt/rag-in-a-box/bin/mcp-server                # MCP Server binary
    /opt/rag-in-a-box/config/config.env.template    # Configuration file
    /var/log/mysql/error.log                        # MariaDB logs
    MariaDB (Port 3306)
        ↓
    RAG API (Port 8000)
        ↓
    MCP Server (Port 8002)
    Ubuntu System (Native)
    ├── MariaDB Service (systemd)
    │   └── Database: kb_chunks (Port 3306)
    ├── RAG API Service (systemd)
    │   └── FastAPI Server (Port 8000)
    └── MCP Server Service (systemd)
        └── FastAPI Server (Port 8002)
    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    [mysqld]
    # Adjust based on available RAM
    innodb_buffer_pool_size = 4G  # 50-70% of RAM
    max_connections = 200
    innodb_log_file_size = 512M
    query_cache_size = 0
    query_cache_type = 0
    # Monitor resources
    htop
    # Or
    top
    
    # Check disk I/O
    iostat -x 1
    
    # Check network
    iftop

    Synchronous Multi-Master With Galera

    MariaDB Enterprise Kubernetes Operator provides cloud native support for provisioning and operating multi-master MariaDB clusters using Galera. This setup enables the ability to perform writes on a single node and reads in all nodes, enhancing availability and allowing scalability across multiple nodes.

    In certain circumstances, it could be the case that all the nodes of your cluster go down at the same time, something that Galera is not able to recover by itself, and it requires manual action to bring the cluster up again, as documented in the Galera documentationarrow-up-right. The MariaDB Enterprise Kubernetes Operator encapsulates this operational expertise in the MariaDB CR. You just need to declaratively specify spec.galera, as explained in more detail later in this guide.

    To accomplish this, after the MariaDB cluster has been provisioned, the operator will regularly monitor the cluster's status to make sure it is healthy. If any issues are detected, the operator will initiate the recovery process to restore the cluster to a healthy state. During this process, the operator will set status conditions in the MariaDB and emit Events so you have a better understanding of the recovery progress and the underlying activities being performed. For example, you may want to know which Pods were out of sync to further investigate infrastructure-related issues (i.e. networking, storage...) on the nodes where these Pods were scheduled.

    hashtag
    MariaDB configuration

    The easiest way to get a MariaDB Galera cluster up and running is setting spec.galera.enabled = true:

    This relies on sensible defaults set by the operator, which may not be suitable for your Kubernetes cluster. This can be solved by overriding the defaults, so you have fine-grained control over the Galera configuration.

    Refer to the to better understand the purpose of each field.

    hashtag
    Storage

    By default, the operator provisions two PVCs for running Galera:

    • Storage PVC: Used to back the MariaDB data directory, mounted at /var/lib/mysql.

    • Config PVC: Where the Galera config files are located, mounted at /etc/mysql/conf.d.

    However, you are also able to use just one PVC for keeping both the data and the config files:

    hashtag
    Wsrep provider

    You are able to pass extra options to the Galera wsrep provider by using the galera.providerOptions field:

    It is important to note that, the ist.recv_addr cannot be set by the user, as it is automatically configured to the Pod IP by the operator, something that an user won't be able to know beforehand.

    A list of the available options can be found in the .

    hashtag
    IPv6 support

    If you have a Kubernetes cluster running with IPv6, the operator will automatically detect the IPv6 addresses of your Pods and it will configure several options to ensure that the Galera protocol runs smoothly with IPv6.

    hashtag
    Galera cluster recovery

    MariaDB Enterprise Kubernetes Operator monitors the Galera cluster and acts accordinly to recover it if needed. This feature is enabled by default, but you may tune it as you need:

    The minClusterSize field indicates the minimum cluster size (either absolut number of replicas or percentage) for the operator to consider the cluster healthy. If the cluster is unhealthy for more than the period defined in clusterHealthyTimeout (30s by default), a cluster recovery process is initiated by the operator. The process is explained in the and consists of the following steps:

    • Recover the sequence number from the grastate.dat on each node.

    • Trigger a to obtain the sequence numbers in case that the previous step didn't manage to.

    • Mark the node with highest sequence (bootstrap node) as safe to bootstrap.

    The operator monitors the Galera cluster health periodically and performs the cluster recovery described above if needed. You are able to tune the monitoring interval via the clusterMonitorInterval field.

    Refer to the to better understand the purpose of each field.

    hashtag
    Galera recovery Job

    During the recovery process, a Job is triggered for each MariaDB Pod to obtain the sequence numbers. It's crucial for this Job to succeed; otherwise, the recovery process will fail. As a user, you are responsible for adjusting this Job to allocate sufficient resources and provide the necessary metadata to ensure its successful completion.

    For example, if you're using a service mesh like Istio, it's important to add the sidecar.istio.io/inject=false label. Without this label, the Job will not complete, which would prevent the recovery process from finishing successfully.

    hashtag
    Force cluster bootstrap

    triangle-exclamation

    Use this option only in exceptional circumstances. Not selecting the Pod with the highest sequence number may result in data loss.

    circle-exclamation

    Ensure you unset forceClusterBootstrapInPod after completing the bootstrap to allow the operator to choose the appropriate Pod to bootstrap from in an event of cluster recovery.

    You have the ability to manually select which Pod is used to bootstrap a new cluster during the recovery process by setting forceClusterBootstrapInPod:

    This should only be used in exceptional circumstances:

    • You are absolutely certain that the chosen Pod has the highest sequence number.

    • The operator has not yet selected a Pod to bootstrap from.

    You can verify this with the following command:

    In this case, assuming that mariadb-galera-2 sequence is lower than 350454, it should be safe to bootstrap from mariadb-galera-0.

    Finally, after your cluster has been bootstrapped, remember to unset forceClusterBootstrapInPod to allow the operator to select the appropriate node for bootstrapping in the event of a cluster recovery.

    hashtag
    Bootstrap Galera cluster from existing PVCs

    MariaDB Enterprise Kubernetes Operator will never delete your MariaDB PVCs. Whenever you delete a MariaDB resource, the PVCs will remain intact so you could reuse them to re-provision a new cluster.

    That said, Galera is unable to form a cluster from pre-existing state, it requires a process to identify which Pod has the highest sequence number to bootstrap a new cluster. That's exactly what the operator does: whenever a new MariaDB Galera cluster is created and previously created PVCs exist, a cluster recovery process is automatically triggered.

    hashtag
    Quickstart

    Apply the following manifests to get started with Galera in Kubernetes:

    Next, check the MariaDB status and the resources created by the operator:

    Let's now proceed with simulating a Galera cluster failure by deleting all the Pods at the same time:

    After some time, we will see the MariaDB entering a non Ready state:

    Eventually, the operator will kick in and recover the Galera cluster:

    Finally, the MariaDB resource will become Ready and your Galera cluster will be operational again:

    hashtag
    Troubleshooting

    The aim of this section is showing you how to diagnose your Galera cluster when something goes wrong. In this situations, observability is a key factor to understand the problem, so we recommend following these steps before jumping into debugging the problem.

    • Inspect MariaDB status conditions.

    • Make sure network connectivity is fine by checking that you have an Endpoint per Pod in your Galera cluster.

    • Check the events associated with the MariaDB object, as they provide significant insights for diagnosis, particularly within the context of cluster recovery.

    • Enable debug logs in mariadb-enterprise-operator.

    • Get the logs of all the MariaDB Pod containers, not only of the main mariadb container but also the agent and init ones.

    Once you are done with these steps, you will have the context required to jump ahead to the section to see if any of them matches your case.

    hashtag
    Common errors

    hashtag
    Galera cluster recovery not progressing

    If your MariaDB Galera cluster has been in GaleraNotReady state for a long time, the recovery process might not be progressing. You can diagnose this by checking:

    • Operator logs.

    • Galera recovery status:

    • MariaDB events:

    • If you have Pods named <mariadb-name>-<ordinal>-recovery-<suffix> running for a long time, check its logs to understand if something is wrong.

    One of the reasons could be misconfigured Galera recovery Jobs, please make sure you read . If after checking all the points above, there are still no clear symptoms of what could be wrong, continue reading.

    First af all, you could attempt to forcefully bootstrap a new cluster as it is described in . Please, refrain from doing so if the conditions described in the docs are not met.

    Alternatively, if you can afford some downtime and your PVCs are in healthy state, you may follow this procedure:

    • Delete your existing MariaDB, this will leave your PVCs intact.

    • Create your MariaDB again, this will trigger a Galera recovery process as described in .

    As a last resource, you can always delete the PVCs and bootstrap a new MariaDB from a backup as documented .

    hashtag
    Permission denied writing Galera configuration

    This error occurs when the user that runs the container does not have enough privileges to write in /etc/mysql/mariadb.conf.d:

    To mitigate this, by default, the operator sets the following securityContext in the MariaDB's StatefulSet :

    This enables the CSIDriver and the kubelet to recursively set the ownership ofr the /etc/mysql/mariadb.conf.d folder to the group 999, which is the one expected by MariaDB. It is important to note that not all the CSIDrivers implementations support this feature, see the for further information.

    hashtag
    Unauthorized error disabling bootstrap

    This situation occurs when the mariadb-enterprise-operator credentials passed to the agent as authentication are either invalid or the agent is unable to verify them. To confirm this, ensure that both the mariadb-enterprise-operator and the MariaDB ServiceAccounts are able to create TokenReview objects:

    If that's not the case, check that the following ClusterRole and ClusterRoleBindings are available in your cluster:

    mariadb-enterprise-operator:auth-delegator is the ClusterRoleBinding bound to the mariadb-enterprise-operator ServiceAccount which is created by the helm chart, so you can re-install the helm release in order to recreate it:

    mariadb-galera:auth-delegator is the ClusterRoleBinding bound to the mariadb-galera ServiceAccount which is created on the flight by the operator as part of the reconciliation logic. You may check the mariadb-enterprise-operator logs to see if there are any issues reconciling it.

    Bear in mind that ClusterRoleBindings are cluster-wide resources that are not garbage collected when the MariaDB owner object is deleted, which means that creating and deleting MariaDBs could leave leftovers in your cluster. These leftovers can lead to RBAC misconfigurations, as the ClusterRoleBinding might not be pointing to the right ServiceAccount. To overcome this, you can override the ClusterRoleBinding name setting the spec.galera.agent.kubernetesAuth.authDelegatorRoleName field.

    hashtag
    Timeout waiting for Pod to be Synced

    This error appears in the mariadb-enterprise-operator logs when a Pod is in non synced state for a duration exceeding the spec.galera.recovery.podRecoveryTimeout. Just after, the operator will restart the Pod.

    Increase this timeout if you consider that your Pod may take longer to recover.

    hashtag
    Galera cluster bootstrap timed out

    This is error is returned by the mariadb-enterprise-operator after exceeding the spec.galera.recovery.clusterBootstrapTimeout when recovering the cluster. At this point, the operator will reset the recovered sequence numbers and start again from a clean state.

    Increase this timeout if you consider that your Galera cluster may take longer to recover.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Logical backups

    hashtag
    What is a logical backup?

    A logical backup is a backup that contains the logical structure of the database, such as tables, indexes, and data, rather than the physical storage format. It is created using mariadb-dumparrow-up-right, which generates SQL statements that can be used to recreate the database schema and populate it with data.

    Logical backups serve not just as a source of restoration, but also enable data mobility between MariaDB instances. These backups are called "logical" because they are independent from the MariaDB topology, as they only contain DDLs and INSERT statements to populate data.

    Although logical backups are a great fit for data mobility and migrations, they are not as efficient as for large databases. For this reason, physical backups are the recommended method for backing up MariaDB databases, especially in production environments.

    hashtag
    Storage types

    Currently, the following storage types are supported:

    • S3 compatible storage: Store backups in a S3 compatible storage, such as or .

    • PVCs: Use the available in your Kubernetes cluster to provision a PVC dedicated to store the backup files.

    • Kubernetes volumes: Use any of the supported natively by Kubernetes.

    Our recommendation is to store the backups externally in a S3 compatible storage.

    hashtag
    Backup CR

    You can take a one-time backup of your MariaDB instance by declaring the following resource:

    This will use the default StorageClass to provision a PVC that would hold the backup files, but ideally you should use a S3 compatible storage:

    By providing the authentication details and the TLS configuration via references to Secret keys, this example will store the backups in a local Minio instance.

    Alternatively you can use dynamic credentials from an EKS Service Account using EKS Pod Identity or IRSA:

    By leaving out the accessKeyIdSecretKeyRef and secretAccessKeySecretKeyRef credentials and pointing to the correct serviceAccountName, the backup Job will use the dynamic credentials from EKS.

    hashtag
    Scheduling

    To minimize the Recovery Point Objective (RPO) and mitigate the risk of data loss, it is recommended to perform backups regularly. You can do so by providing a spec.schedule in your Backup resource:

    This resource gets reconciled into a CronJob that periodically takes the backups.

    It is important to note that regularly scheduled Backups complement very well the feature detailed below.

    hashtag
    Retention policy

    Given that the backups can consume a substantial amount of storage, it is crucial to define your retention policy by providing the spec.maxRetention field in your Backup resource:

    hashtag
    Compression

    You are able to compress backups by providing the compression algorithm you want to use in the spec.compression field:

    Currently the following compression algorithms are supported:

    • bzip2: Good compression ratio, but slower compression/decompression speed compared to gzip.

    • gzip: Good compression/decompression speed, but worse compression ratio compared to bzip2.

    • none: No compression.

    compression is defaulted to none by the operator.

    hashtag
    Server-Side Encryption with Customer-Provided Keys (SSE-C)

    You can enable server-side encryption using your own encryption key (SSE-C) by providing a reference to a Secret containing a 32-byte (256-bit) key encoded in base64:

    circle-exclamation

    When using SSE-C, you are responsible for managing and securely storing the encryption key. If you lose the key, you will not be able to decrypt your backups. Ensure you have proper key management procedures in place.

    circle-info

    When restoring from SSE-C encrypted backups, the same key must be provided in the Restore CR or bootstrapFrom configuration.

    hashtag
    Restore CR

    You can easily restore a Backup in your MariaDB instance by creating the following resource:

    This will trigger a Job that will mount the same storage as the Backup and apply the dump to your MariaDB database.

    Nevertheless, the Restore resource doesn't necessarily need to specify a spec.backupRef, you can point to other storage source that contains backup files, for example a S3 bucket:

    hashtag
    Target recovery time

    If you have multiple backups available, specially after configuring a , the operator is able to infer which backup to restore based on the spec.targetRecoveryTime field.

    The operator will look for the closest backup available and utilize it to restore your MariaDB instance. Only backups strictly before or at targetRecoveryTime will be matched.

    By default, spec.targetRecoveryTime will be set to the current time, which means that the latest available backup will be used.

    hashtag
    Bootstrap new MariaDB instances

    To minimize your Recovery Time Objective (RTO) and to switfly spin up new clusters from existing Backups, you can provide a Restore source directly in the MariaDB object via the spec.bootstrapFrom field:

    As in the Restore resource, you don't strictly need to specify a reference to a Backup, you can provide other storage types that contain backup files:

    Under the hood, the operator creates a Restore object just after the MariaDB resource becomes ready. The advantage of using spec.bootstrapFrom over a standalone Restore is that the MariaDB is bootstrap-aware and this will allow the operator to hold primary switchover/failover operations until the restoration is finished.

    hashtag
    Backup and restore specific databases

    By default, all the logical databases are backed up when a Backup is created, but you may also select specific databases by providing the databases field:

    When it comes to restore, all the databases available in the backup will be restored, but you may also choose a single database to be restored via the database field available in the Restore resource:

    There are a couple of points to consider here:

    • The referred database (db1 in the example) must previously exist for the Restore to succeed.

    • The mariadb CLI invoked by the operator under the hood only supports selecting a single database to restore via the option, restoration of multiple specific databases is not supported.

    hashtag
    Extra options

    Not all the flags supported by mariadb-dump and mariadb have their counterpart field in the Backup and Restore CRs respectively, but you may pass extra options by using the args field. For example, setting the --verbose flag can be helpful to track the progress of backup and restore operations:

    Refer to the mariadb-dump and mariadb CLI options in the section.

    hashtag
    Staging area

    circle-info

    S3 is the only storage type that supports a staging area.

    When using S3 storage for backups, a staging area is used for keeping the external backups while they are being processed. By default, this staging area is an emptyDir volume, which means that the backups are temporarily stored in the node's local storage where the Backup/Restore Job is scheduled. In production environments, large backups may lead to issues if the node doesn't have sufficient space, potentially causing the backup/restore process to fail.

    To overcome this limitation, you are able to define your own staging area by setting the stagingStorage field to both the Backup and Restore CRs:

    In the examples above, a PVC with the default StorageClass will be used as staging area. Refer to the for more configuration options.

    Similarly, you may also use a custom staging area when :

    hashtag
    Important considerations and limitations

    hashtag
    Root credentials

    When restoring a backup, the root credentials specified through the spec.rootPasswordSecretKeyRef field in the MariaDB resource must match the ones in the backup. These credentials are utilized by the liveness and readiness probes, and if they are invalid, the probes will fail, causing your MariaDB Pods to restart after the backup restoration.

    hashtag
    Restore job

    Restoring large backups can consume significant compute resources and may cause Restore Jobs to become stuck due to insufficient resources. To prevent this, you can define the compute resources allocated to the Job:

    hashtag
    Galera backup limitations

    hashtag
    mysql.global_priv

    Galera only replicates the tables with InnoDB engine, see the .

    Something that does not include mysql.global_priv, the table used to store users and grants, which uses the MyISAM engine. This basically means that a Galera instance with mysql.global_priv populated will not replicate this data to an empty Galera instance. However, DDL statements (CREATE USER, ALTER USER ...) will be replicated.

    Taking this into account, if we think now about a restore scenario where:

    • The backup file includes a DROP TABLE statement for the mysql.global_priv table.

    • The backup has some INSERT statements for the mysql.global_priv table.

    This is what will happen under the scenes while restoring the backup:

    • The DROP TABLE statement is a DDL so it will be executed in galera-0, galera-1 and galera-2.

    • The INSERT statements are not DDLs, so they will only be applied to galera-0.

    After the backup is fully restored, the liveness and readiness probes will kick in, they will succeed in galera-0, but they will fail in galera-1 and galera-2, as they rely in the root credentials available in mysql.global_priv, resulting in the galera-1 and galera-2 getting restarted.

    To address this issue, when backing up MariaDB instances with Galera enabled, the mysql.global_priv table will be excluded from backups by using the --ignore-table option with mariadb-dump. This prevents the replication of the DROP TABLE statement for the mysql.global_priv table. You can opt-out from this feature by setting spec.ignoreGlobalPriv=false in the Backup resource.

    Also, to avoid situations where mysql.global_priv is unreplicated, all the entries in that table must be managed via DDLs. This is the recommended approach suggested in the . There are a couple of ways that we can guarantee this:

    • Use the rootPasswordSecretKeyRef, username and passwordSecretKeyRef fields of the MariaDB CR to create the root and initial user respectively. This fields will be translated into DDLs by the image entrypoint.

    • Rely on the and CRs to create additional users and grants. Refer to the for further detail.

    hashtag
    LOCK TABLES

    Galera is not compatible with the LOCK TABLES statement:

    For this reason, the operator automatically adds the --skip-add-locks option to the Backup to overcome this limitation.

    hashtag
    Migrations using logical backups

    hashtag
    Migrating an external MariaDB to a MariaDB running in Kubernetes

    You can leverage logical backups to bring your external MariaDB data into a new MariaDB instance running in Kubernetes. Follow this runbook for doing so:

    1. Take a logical backup of your external MariaDB using one of the commands below:

    circle-exclamation

    If you are using Galera or planning to migrate to a Galera instance, make sure you understand the and use the following command instead:

    1. Ensure that your backup file is named in the following format: backup.2024-08-26T12:24:34Z.sql. If the file name does not follow this format, it will be ignored by the operator.

    2. Upload the backup file to one of the supported . We recommend using S3.

    3. Create your MariaDB resource declaring that you want to and providing a

    1. If you are using Galera in your new instance, migrate your previous users and grants to use the User and Grant CRs. Refer to the for further detail.

    hashtag
    Migrating to a MariaDB with different topology

    Database mobility between MariaDB instances with different topologies is possible with logical backups. However, there are a couple of technical details that you need to be aware of in the following scenarios:

    hashtag
    Migrating between standalone and replicated MariaDBs

    This should be fully compatible, no issues have been detected.

    hashtag
    Migrating from standalone/replicated to Galera MariaDBs

    There are a couple of limitations regarding the backups in Galera, please make sure you read the section before proceeding.

    To overcome this limitations, the Backup in the standalone/replicated instance needs to be taken with spec.ignoreGlobalPriv=true. In the following example, we are backing up a standalone MariaDB (single instance):

    Once the previous Backup is completed, we will be able bootstrap a new Galera instance from it:

    hashtag
    Reference

    hashtag
    Troubleshooting

    hashtag
    Galera Pods restarting after bootstrapping from a backup

    Please make sure you understand the .

    After doing so, ensure that your backup does not contain a DROP TABLE mysql.global_priv; statement, as it will make your liveness and readiness probes to fail after the backup restoration.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    MaxScale Database Proxy

    MaxScale is a sophisticated database proxy, router, and load balancer designed specifically for and by MariaDB. It provides a range of features that ensure optimal high availability:

    • Query-based routing: Transparently route write queries to the primary nodes and read queries to the replica nodes.

    • Connection-based routing: Load balance connections between multiple servers.

    Bootstrap a new cluster in the bootstrap node.

  • Restart and wait until the bootstrap node becomes ready.

  • Restart the rest of the nodes one by one so they can join the new cluster.

  • API referencearrow-up-right
    MariaDB documentationarrow-up-right
    wsrep provider
    Galera documentationarrow-up-right
    recovery Job
    API referencearrow-up-right
    cluster recovery
    Common errors
    this section
    this section
    this section
    here
    CSIDriver documentationarrow-up-right
    spinner
    The Galera cluster has 3 nodes: galera-0, galera-1 and galera-2.
  • The backup is restored in galera-0.

  • This results in the galera-1 and galera-2 not having the mysql.global_priv table.

    that matches the backup:
    physical backups
    AWS S3arrow-up-right
    Minioarrow-up-right
    StorageClassesarrow-up-right
    volume typesarrow-up-right
    target recovery time
    scheduled Backup
    --one-databasearrow-up-right
    reference
    API reference
    bootstrapping from backup
    Galera docsarrow-up-right
    Galera docsarrow-up-right
    User
    Grant
    SQL resource documentation
    LOCK TABLES Limitationsarrow-up-right
    Galera backup limitations
    storage types
    bootstrap from the previous backup
    SQL resource documentation
    Galera backup limitations
    API reference
    mariadb-dump optionsarrow-up-right
    mariadb optionsarrow-up-right
    Galera backup limitations
    spinner
    root password Secret
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
    ...
      replicas: 3
    
      galera:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      galera:
        enabled: true
        config:
          reuseStorageVolume: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      galera:
        providerOptions:
          gcs.fc_limit: '64'
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      galera:
        enabled: true
        recovery:
          enabled: true
          minClusterSize: 1
          clusterMonitorInterval: 10s
          clusterHealthyTimeout: 30s
          clusterBootstrapTimeout: 10m
          podRecoveryTimeout: 5m
          podSyncTimeout: 5m
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      galera:
        enabled: true
        recovery:
          job:
            metadata:
              labels:
                sidecar.istio.io/inject: "false"
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                memory: 256Mi
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      galera:
        enabled: true
        recovery:
          enabled: true
          forceClusterBootstrapInPod: "mariadb-galera-0"
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.galeraRecovery}" | jq
    {
      "recovered": {
        "mariadb-galera-0": {
          "seqno": 350454,
          "uuid": "67a44ea9-63a8-11ef-98a2-2b0c0aa0a627"
        },
        "mariadb-galera-1": {
          "seqno": 350450,
          "uuid": "67a44ea9-63a8-11ef-98a2-2b0c0aa0a627"
        }
      },
      "state": {
        "mariadb-galera-0": {
          "safeToBootstrap": false,
          "seqno": -1,
          "uuid": "67a44ea9-63a8-11ef-98a2-2b0c0aa0a627",
          "version": "2.1"
        },
        "mariadb-galera-1": {
          "safeToBootstrap": false,
          "seqno": -1,
          "uuid": "67a44ea9-63a8-11ef-98a2-2b0c0aa0a627",
          "version": "2.1"
        },
        "mariadb-galera-2": {
          "safeToBootstrap": false,
          "seqno": -1,
          "uuid": "67a44ea9-63a8-11ef-98a2-2b0c0aa0a627",
          "version": "2.1"
        }
      }
    }
    apiVersion: v1
    kind: Secret
    metadata:
      name: mariadb
    stringData:
      root-password: MariaDB11!
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
      storage:
        size: 1Gi
      replicas: 3
      galera:
        enabled: true
    kubectl get mariadbs
    NAME             READY   STATUS    PRIMARY POD          AGE
    mariadb-galera   True    Running   mariadb-galera-0     48m
    
    kubectl get events --field-selector involvedObject.name=mariadb-galera --sort-by='.lastTimestamp'
    LAST SEEN   TYPE     REASON                 OBJECT                               MESSAGE
    ...
    45m         Normal   GaleraClusterHealthy   mariadb/mariadb-galera               Galera cluster is healthy
    
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.conditions[?(@.type=='GaleraReady')]}" | jq
    {
      "lastTransitionTime": "2023-07-13T18:22:31Z",
      "message": "Galera ready",
      "reason": "GaleraReady",
      "status": "True",
      "type": "GaleraReady"
    }
    
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.conditions[?(@.type=='GaleraConfigured')]}" | jq
    {
      "lastTransitionTime": "2023-07-13T18:22:31Z",
      "message": "Galera configured",
      "reason": "GaleraConfigured",
      "status": "True",
      "type": "GaleraConfigured"
    }
    
    kubectl get statefulsets
    NAME             READY   AGE
    mariadb-galera   3/3     58m
    
    kubectl get pods -o wide
    NAME                                        READY   STATUS    RESTARTS   AGE   IP           NODE          NOMINATED NODE   READINESS GATES
    mariadb-galera-0                            2/2     Running   0          58m   10.244.2.4   mdb-worker3   <none>           <none>
    mariadb-galera-1                            2/2     Running   0          58m   10.244.1.9   mdb-worker2   <none>           <none>
    mariadb-galera-2                            2/2     Running   0          58m   10.244.5.4   mdb-worker4   <none>           <none>
    kubectl delete pods -l app.kubernetes.io/instance=mariadb-galera
    pod "mariadb-galera-0" deleted
    pod "mariadb-galera-1" deleted
    pod "mariadb-galera-2" deleted
    kubectl get mariadb mariadb-galera
    NAME             READY   STATUS             PRIMARY POD             AGE
    mariadb-galera   False   Galera not ready   mariadb-galera-0        67m
    
    kubectl get events --field-selector involvedObject.name=mariadb-galera --sort-by='.lastTimestamp'
    LAST SEEN   TYPE      REASON                    OBJECT                       MESSAGE
    ...
    48s         Warning   GaleraClusterNotHealthy   mariadb/mariadb-galera       Galera cluster is not healthy
    
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.conditions[?(@.type=='GaleraReady')]}" | jq
    {
      "lastTransitionTime": "2023-07-13T19:25:17Z",
      "message": "Galera not ready",
      "reason": "GaleraNotReady",
      "status": "False",
      "type": "GaleraReady"
    }
    kubectl get events --field-selector involvedObject.name=mariadb-galera --sort-by='.lastTimestamp'
    LAST SEEN   TYPE      REASON                    OBJECT                       MESSAGE
    ...
    16m         Warning   GaleraClusterNotHealthy   mariadb/mariadb-galera       Galera cluster is not healthy
    16m         Normal    GaleraPodStateFetched     mariadb/mariadb-galera       Galera state fetched in Pod 'mariadb-galera-2'
    16m         Normal    GaleraPodStateFetched     mariadb/mariadb-galera       Galera state fetched in Pod 'mariadb-galera-1'
    16m         Normal    GaleraPodStateFetched     mariadb/mariadb-galera       Galera state fetched in Pod 'mariadb-galera-0'
    16m         Normal    GaleraPodRecovered        mariadb/mariadb-galera       Recovered Galera sequence in Pod 'mariadb-galera-1'
    16m         Normal    GaleraPodRecovered        mariadb/mariadb-galera       Recovered Galera sequence in Pod 'mariadb-galera-2'
    17m         Normal    GaleraPodRecovered        mariadb/mariadb-galera       Recovered Galera sequence in Pod 'mariadb-galera-0'
    17m         Normal    GaleraClusterBootstrap    mariadb/mariadb-galera       Bootstrapping Galera cluster in Pod 'mariadb-galera-2'
    20m         Normal    GaleraClusterHealthy      mariadb/mariadb-galera       Galera cluster is healthy
    
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.galeraRecovery}" | jq
    {
      "bootstrap": {
        "pod": "mariadb-galera-2",
        "time": "2023-07-13T19:25:28Z"
      },
      "recovered": {
        "mariadb-galera-0": {
          "seqno": 3,
          "uuid": "bf00b9c3-21a9-11ee-984f-9ba9ff0e9285"
        },
        "mariadb-galera-1": {
          "seqno": 3,
          "uuid": "bf00b9c3-21a9-11ee-984f-9ba9ff0e9285"
        },
        "mariadb-galera-2": {
          "seqno": 3,
          "uuid": "bf00b9c3-21a9-11ee-984f-9ba9ff0e9285"
        }
      },
      "state": {
        "mariadb-galera-0": {
          "safeToBootstrap": false,
          "seqno": -1,
          "uuid": "bf00b9c3-21a9-11ee-984f-9ba9ff0e9285",
          "version": "2.1"
        },
        "mariadb-galera-1": {
          "safeToBootstrap": false,
          "seqno": -1,
          "uuid": "bf00b9c3-21a9-11ee-984f-9ba9ff0e9285",
          "version": "2.1"
        },
        "mariadb-galera-2": {
          "safeToBootstrap": false,
          "seqno": -1,
          "uuid": "bf00b9c3-21a9-11ee-984f-9ba9ff0e9285",
          "version": "2.1"
        }
      }
    }
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.conditions[?(@.type=='GaleraReady')]}" | jq
    {
      "lastTransitionTime": "2023-07-13T19:27:51Z",
      "message": "Galera ready",
      "reason": "GaleraReady",
      "status": "True",
      "type": "GaleraReady"
    }
    
    kubectl get mariadb mariadb-galera
    NAME             READY   STATUS    PRIMARY POD          AGE
    mariadb-galera   True    Running   mariadb-galera-0     82m
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.conditions}" | jq
    [
      {
        "lastTransitionTime": "2023-08-05T14:58:57Z",
        "message": "Galera not ready",
        "reason": "GaleraNotReady",
        "status": "False",
        "type": "Ready"
      },
      {
        "lastTransitionTime": "2023-08-05T14:58:57Z",
        "message": "Galera not ready",
        "reason": "GaleraNotReady",
        "status": "False",
        "type": "GaleraReady"
      },
      {
        "lastTransitionTime": "2023-08-03T19:21:16Z",
        "message": "Galera configured",
        "reason": "GaleraConfigured",
        "status": "True",
        "type": "GaleraConfigured"
      }
    ]
    kubectl get endpoints mariadb-galera-internal -o yaml
    apiVersion: v1
    kind: Endpoints
    metadata:
      name: mariadb-internal
    subsets:
    - addresses:
      - hostname: mariadb-1
        ip: 10.255.140.181
        nodeName: k8s-worker-1
        targetRef:
          kind: Pod
          name: mariadb-1
          namespace: mariadb
      - hostname: mariadb-2
        ip: 10.255.20.156
        nodeName: k8s-worker-2
        targetRef:
          kind: Pod
          name: mariadb-2
          namespace: mariadb
      - hostname: mariadb-0
        ip: 10.255.214.164
        nodeName: k8s-worker-0
        targetRef:
          kind: Pod
          name: mariadb-0
          namespace: mariadb
      ports:
      - name: sst
        port: 4568
        protocol: TCP
      - name: ist
        port: 4567
        protocol: TCP
      - name: mariadb
        port: 3306
        protocol: TCP
      - name: agent
        port: 5555
        protocol: TCP
      - name: cluster
        port: 4444
        protocol: TCP
    kubectl get events --field-selector involvedObject.name=mariadb-galera --sort-by='.lastTimestamp'
    LAST SEEN   TYPE      REASON                    OBJECT                       MESSAGE
    ...
    16m         Warning   GaleraClusterNotHealthy   mariadb/mariadb-galera       Galera cluster is not healthy
    16m         Normal    GaleraPodStateFetched     mariadb/mariadb-galera       Galera state fetched in Pod 'mariadb-galera-2'
    16m         Normal    GaleraPodStateFetched     mariadb/mariadb-galera       Galera state fetched in Pod 'mariadb-galera-1'
    16m         Normal    GaleraPodStateFetched     mariadb/mariadb-galera       Galera state fetched in Pod 'mariadb-galera-0'
    16m         Normal    GaleraPodRecovered        mariadb/mariadb-galera       Recovered Galera sequence in Pod 'mariadb-galera-1'
    16m         Normal    GaleraPodRecovered        mariadb/mariadb-galera       Recovered Galera sequence in Pod 'mariadb-galera-2'
    17m         Normal    GaleraPodRecovered        mariadb/mariadb-galera       Recovered Galera sequence in Pod 'mariadb-galera-0'
    17m         Normal    GaleraClusterBootstrap    mariadb/mariadb-galera       Bootstrapping Galera cluster in Pod 'mariadb-galera-2'
    20m         Normal    GaleraClusterHealthy      mariadb/mariadb-galera       Galera cluster is healthy
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --set logLevel=debug
    kubectl logs mariadb-enterprise-operator-546c78f4f5-gq44k
    {"level":"info","ts":1691090524.4911606,"logger":"galera.health","msg":"Checking Galera cluster health","controller":"statefulset","controllerGroup":"apps","controllerKind":"StatefulSet","statefulSet":{"name":"mariadb-galera","namespace":"default"},"namespace":"default","name":"mariadb-galera","reconcileID":"098620db-4486-45cc-966a-9f3fec0d165e"}
    {"level":"debug","ts":1691090524.4911761,"logger":"galera.health","msg":"StatefulSet ready replicas","controller":"statefulset","controllerGroup":"apps","controllerKind":"StatefulSet","statefulSet":{"name":"mariadb-galera","namespace":"default"},"namespace":"default","name":"mariadb-galera","reconcileID":"098620db-4486-45cc-966a-9f3fec0d165e","replicas":1}
    kubectl logs mariadb-galera-0 -c init
    {"level":"info","ts":1691090778.5239124,"msg":"Starting init"}
    {"level":"info","ts":1691090778.5305626,"msg":"Configuring Galera"}
    {"level":"info","ts":1691090778.5307593,"msg":"Already initialized. Init done"}
    
    kubectl logs mariadb-galera-0 -c agent
    {"level":"info","ts":1691090779.3193653,"logger":"server","msg":"server listening","addr":":5555"}
    2023/08/03 19:26:28 "POST http://mariadb-galera-0.mariadb-galera-internal.default.svc.cluster.local:5555/api/recovery HTTP/1.1" from 10.244.4.2:39162 - 200 58B in 4.112086ms
    2023/08/03 19:26:28 "DELETE http://mariadb-galera-0.mariadb-galera-internal.default.svc.cluster.local:5555/api/recovery HTTP/1.1" from 10.244.4.2:39162 - 200 0B in 883.544µs
    
    kubectl logs mariadb-galera-0 -c mariadb
    2023-08-03 19:27:10 0 [Note] WSREP: Member 2.0 (mariadb-galera-0) synced with group.
    2023-08-03 19:27:10 0 [Note] WSREP: Processing event queue:...100.0% (1/1 events) complete.
    2023-08-03 19:27:10 0 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 6)
    2023-08-03 19:27:10 2 [Note] WSREP: Server mariadb-galera-0 synced with group
    2023-08-03 19:27:10 2 [Note] WSREP: Server status change joined -> synced
    2023-08-03 19:27:10 2 [Note] WSREP: Synchronized with group, ready for connections
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.galeraRecovery}" | jq
    kubectl get events --field-selector involvedObject.name=mariadb-galera
    Error writing Galera config: open /etc/mysql/mariadb.conf.d/0-galera.cnf: permission denied
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mariadb-galera
    spec:
      securityContext:
        fsGroup: 999
        runAsGroup: 999
        runAsNonRoot: true
        runAsUser: 999
    Error reconciling Galera: error disabling bootstrap in Pod 0: unauthorized
    kubectl auth can-i --list --as=system:serviceaccount:default:mariadb-enterprise-operator | grep tokenreview
    tokenreviews.authentication.k8s.io              []                                    []               [create]
    
    kubectl auth can-i --list --as=system:serviceaccount:default:mariadb-galera | grep tokenreview
    tokenreviews.authentication.k8s.io              []                                    []               [create]
    kubectl get clusterrole system:auth-delegator
    NAME                    CREATED AT
    system:auth-delegator   2023-08-03T19:12:37Z
    
    kubectl get clusterrolebinding | grep mariadb | grep auth-delegator
    mariadb-galera:auth-delegator                     ClusterRole/system:auth-delegator                                                  108m
    mariadb-enterprise-operator:auth-delegator                        ClusterRole/system:auth-delegator                                                  112m
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator
    Timeout waiting for Pod 'mariadb-galera-2' to be Synced
    Galera cluster bootstrap timed out. Resetting recovery status
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        persistentVolumeClaim:
          resources:
            requests:
              storage: 100Mi
          accessModes:
            - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        s3:
          bucket: backups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          region:  us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: tls.crt
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: mariadb-backup
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::<<account_id>>:role/my-role-irsa
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      serviceAccountName: mariadb-backup
      storage:
        s3:
          bucket: backups
          prefix: mariadb
          endpoint: s3.us-east-1.amazonaws.com
          region:  us-east-1
          tls:
            enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      schedule:
        cron: "*/1 * * * *"
        suspend: false
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      maxRetention: 720h # 30 days
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      compression: gzip
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: ssec-key
    stringData:
      # 32-byte key encoded in base64 (use: openssl rand -base64 32)
      customer-key: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        s3:
          bucket: backups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          region: us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: tls.crt
          ssec:
            customerKeySecretKeyRef:
              name: ssec-key
              key: customer-key
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      mariaDbRef:
        name: mariadb
      backupRef:
        name: backup
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      mariaDbRef:
        name: mariadb
      s3:
        bucket: backups
        prefix: mariadb
        endpoint: minio.minio.svc.cluster.local:9000
        region:  us-east-1
        accessKeyIdSecretKeyRef:
          name: minio
          key: access-key-id
        secretAccessKeySecretKeyRef:
          name: minio
          key: secret-access-key
        tls:
          enabled: true
          caSecretKeyRef:
            name: minio-ca
            key: tls.crt
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      mariaDbRef:
        name: mariadb
      backupRef:
        name: backup
      targetRecoveryTime: 2023-12-19T09:00:00Z
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-from-backup
    spec:
      storage:
        size: 1Gi
      bootstrapFrom:
        backupRef:
          name: backup
        targetRecoveryTime: 2023-12-19T09:00:00Z
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-from-backup
    spec:
      storage:
        size: 1Gi
      bootstrapFrom:
        s3:
          bucket: backups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: tls.crt
        targetRecoveryTime: 2023-12-19T09:00:00Z
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      databases:
        - db1
        - db2
        - db3
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      mariaDbRef:
        name: mariadb
      backupRef:
        name: backup
      database: db1
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      args:
        - --verbose
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      mariaDbRef:
        name: mariadb
      backupRef:
        name: backup
      args:
        - --verbose
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      storage:
        s3:
          ...
      stagingStorage:
        persistentVolumeClaim:
          resources:
            requests:
              storage: 10Gi
          accessModes:
            - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Restore
    metadata:
      name: restore
    spec:
      s3:
        ...
      stagingStorage:
        persistentVolumeClaim:
          resources:
            requests:
              storage: 10Gi
          accessModes:
            - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      bootstrapFrom:
        s3:
          ...
        stagingStorage:
          persistentVolumeClaim:
            resources:
              requests:
                storage: 10Gi
            accessModes:
              - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      storage:
        size: 1Gi
      bootstrapFrom:
        restoreJob:
          args:
            - --verbose
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              memory: 1Gi
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup
    spec:
      mariaDbRef:
        name: mariadb
      ignoreGlobalPriv: false
    mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARIADB_HOST} --single-transaction --events --routines --all-databases > backup.2024-08-26T12:24:34Z.sql
    mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARIADB_HOST} --single-transaction --events --routines --all-databases --skip-add-locks --ignore-table=mysql.global_priv > backup.2024-08-26T12:24:34Z.sql
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
      replicas: 3
      galera:
        enabled: true
      storage:
        size: 1Gi
      bootstrapFrom:
        s3:
          bucket: backups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: tls.crt
        targetRecoveryTime: 2024-08-26T12:24:34Z
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Backup
    metadata:
      name: backup-standalone
    spec:
      mariaDbRef:
        name: mariadb-standalone
      ignoreGlobalPriv: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      replicas: 3
      galera:
        enabled: true
      storage:
        size: 1Gi
      bootstrapFrom:
        backupRef:
          name: backup-standalone

    Automatic primary failover based on MariaDB internals.

  • Replay pending transactions when a server goes down.

  • Support for Galera and Replication.

  • To better understand what MaxScale is capable of you may check the product page and the documentation.

    hashtag
    MaxScale resources

    Prior to configuring MaxScale within Kubernetes, it's essential to have a basic understanding of the resources managed through its API.

    hashtag
    Servers

    A server defines the backend database servers that MaxScale forwards traffic to. For more detailed information, please consult the .

    hashtag
    Monitors

    A monitor is an agent that queries the state of the servers and makes it available to the services in order to route traffic based on it. For more detailed information, please consult the monitor referencearrow-up-right.

    Depending on which highly available configuration your servers have, you will need to choose between the following modules:

    • Galera Monitorarrow-up-right: Detects whether servers are part of the cluster, ensuring synchronization among them, and assigning primary and replica roles as needed.

    • MariaDB Monitorarrow-up-right: Probes the state of the cluster, assigns roles to the servers, and executes failover, switchover, and rejoin operations as necessary.

    hashtag
    Services

    A service defines how the traffic is routed to the servers based on a routing algorithm that takes into account the state of the servers and its role. For more detailed information, please consult the .

    Depending on your requirements to route traffic, you may choose between the following routers:

    • Readwritesplitarrow-up-right: Route write queries to the primary server and read queries to the replica servers.

    • Readconnroutearrow-up-right: Load balance connections between multiple servers.

    hashtag
    Listeners

    A listener specifies a port where MaxScale listens for incoming connections. It is associated with a service that handles the requests received on that port. For more detailed information, please consult the .

    hashtag
    MaxScale CR

    The minimal spec you need to provision a MaxScale instance is just a reference to a MariaDB resource:

    This will provision a new StatefulSet for running MaxScale and configure the servers specified by the MariaDB resource. Refer to the Server configuration section if you want to manually configure the MariaDB servers.

    The rest of the configuration uses reasonable defaults set automatically by the operator. If you need a more fine grained configuration, you can provide this values yourself:

    As you can see, the MaxScale resources we previously mentioned have a counterpart resource in the MaxScale CR.

    The previous example configured a MaxScale for a Galera cluster, but you may also configure MaxScale with a MariaDB that uses replication. It is important to note that the monitor module is automatically inferred by the operator based on the MariaDB reference you provided, however, its parameters are specific to each monitor module:

    You also need to set a reference in the MariaDB resource to make it MaxScale-aware. This is explained in the MariaDB CR section.

    Refer to the API reference for further detail.

    hashtag
    MariaDB CR

    You can set a spec.maxScaleRef in your MariaDB resource to make it MaxScale-aware. By doing so, the primary server reported by MaxScale will be used in MariaDB and the high availability tasks such the primary failover will be delegated to MaxScale:

    Refer to the API reference for further detail.

    hashtag
    Defaults

    MariaDB Enterprise Kubernetes Operator aims to provide highly configurable CRs, but at the same time maximize its usability by providing reasonable defaults. In the case of MaxScale, the following defaulting logic is applied:

    • spec.servers are inferred from spec.mariaDbRef.

    • spec.monitor.module is inferred from the spec.mariaDbRef.

    • spec.monitor.cooperativeMonitoring is set if is enabled.

    • If spec.services is not provided, a readwritesplit service is configured on port 3306 by default.

    hashtag
    Server configuration

    As an alternative to provide a reference to a MariaDB via spec.mariaDbRef, you can also specify the servers manually:

    As you could see, you can refer to in-cluser MariaDB servers by providing the DNS names of the MariaDB Pods as server addresses. In addition, you can also refer to external MariaDB instances running outside of the Kubernetes cluster where the operator was deployed:

    Pointing to external MariaDBs has some limitations: Since the operator doesn't have a reference to a MariaDB resource (spec.mariaDbRef), it will be unable to perform the following actions:

    • Infer the monitor module (spec.monitor.module), so it will need to be provided by the user.

    • Autogenerate authentication credentials (spec.auth), so they will need to be provided by the user. See Authentication section.

    hashtag
    Primary server switchover

    circle-info

    Only the MariaDB Monitor, to be used with MariaDB replication, supports the primary switchover operation.

    You can declaratively select the primary server by setting spec.primaryServer=<server>:

    This will trigger a switchover operation and MaxScale will promote the specified server to be the new primary server.

    hashtag
    Server maintenance

    You can put servers in maintenance mode by setting the server field maintenance=true:

    hashtag
    Configuration

    Similar to MariaDB, MaxScale allows you to provide global configuration parameters in a maxscale.conf file. You don't need to provide this config file directly, but instead you can use the spec.config.params to instruct the operator to create the maxscale.conf:

    Both this global configuration and the resources created by the operator using the MaxScale API are stored under a volume provisioned by the spec.config.volumeClaimTemplate. Refer to the troubleshooting if you are getting errors writing on this volume.

    Refer to the for more details about the supported parameters.

    hashtag
    Authentication

    MaxScale requires authentication with different levels of permissions for the following components/actors:

    • MaxScale API consumed by MariaDB Enterprise Kubernetes Operator.

    • Clients connecting to MaxScale.

    • MaxScale connecting to MariaDB servers.

    • MaxScale monitor connecting to MariaDB servers.

    • MaxScale configuration syncer to connect to MariaDB servers. See section.

    By default, the operator generates this credentials when spec.mariaDbRef is set and spec.auth.generate = true, but you are still able to provide your own:

    As you could see, you are also able to limit the number of connections for each component/actor. Bear in mind that, when running in high availability, you may need to increase this number, as more MaxScale instances implies more connections.

    hashtag
    Kubernetes Services

    To enable your applications to communicate with MaxScale, a Kubernetes Service is provisioned with all the ports specified in the MaxScale listeners. You have the flexibility to provide a template to customize this Service:

    This results in the reconciliation of the following Service:

    There is also another Kubernetes Service to access the GUI, please refer to the MaxScale GUI section for further detail.

    hashtag
    Connection

    You can leverage the Connection resource to automatically configure connection strings as Secret resources that your applications can mount:

    Alternatively, you can also provide a connection template to your MaxScale resource:

    Note that, the Connection uses the Service described in the Kubernetes Service section and you are able to specify which MaxScale service to connect to by providing the port (spec.port) of the corresponding MaxScale listener.

    hashtag
    High availability

    To synchronize the configuration state across multiple replicas, MaxScale stores the configuration externally in a MariaDB table and conducts periodic polling across all replicas. By default, the table mysql.maxscale_config is used, but this can be configured by the user as well as the synchronization interval.

    Another crucial aspect to consider regarding HA is that only one monitor can be running at any given time to avoid conflicts. This can be achieved via cooperative locking, which can be configured by the user. Refer to for more information.

    Multiple MaxScale replicas can be specified by providing the spec.replicas field. Note that, MaxScale exposes the scale subresourcearrow-up-right, so you can scale/downscale it by running the following command:

    Or even configuring an HorizontalPodAutoscaler to do the job automatically.

    hashtag
    Suspend resources

    In order to enable this feature, you must set the --feature-maxscale-suspend feature flag:

    Then you will be able to suspend any MaxScale resources, for instance, you can suspend a monitor:

    hashtag
    MaxScale GUI

    MaxScale offers a great user interface that provides very useful information about the MaxScale resources. You can enable it by providing the following configuration:

    The GUI is exposed via a dedicated Kubernetes Service in the same port as the MaxScale API. Once you access, you will need to enter the MaxScale API credentials configured by the operator in a Secret. See the Authentication section for more details.

    hashtag
    MaxScale API

    MariaDB Enterprise Kubernetes Operator interacts with the to reconcile the specification provided by the user, considering both the MaxScale status retrieved from the API and the provided spec.

    arrow-up-right

    hashtag
    Troubleshooting

    The operator tracks both the MaxScale status in regards to Kubernetes resources as well as the status of the MaxScale API resources. This information is available on the status field of the MaxScale resource, it may be very useful for debugging purposes:

    Kubernetes events emitted by mariadb-enterprise-operator may also be very relevant for debugging. For instance, an event is emitted whenever the primary server changes:

    The operator logs can also be a good source of information for troubleshooting. You can increase its verbosity and enable MaxScale API request logs by running:

    hashtag
    Common errors

    hashtag
    Permission denied writing /var/lib/maxscale

    This error occurs when the user that runs the container does not have enough privileges to write in /var/lib/maxscale:

    To mitigate this, by default, the operator sets the following securityContext in the MaxScale's StatefulSet:

    This enables the CSIDriver and the kubelet to recursively set the ownership ofr the /var/lib/maxscale folder to the group 999, which is the one expected by MaxScale. It is important to note that not all the CSIDrivers implementations support this feature, see the CSIDriver documentationarrow-up-right for further information.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    WEBINAR

    New innovations in MaxScale 25.01 and Enterprise Platform

    spinner

    Physical backups

    hashtag
    What is a physical backup?

    A physical backup is a snapshot of the entire data directory (/var/lib/mysql), including all data files. This type of backup captures the exact state of the database at a specific point in time, allowing for quick restoration in case of data loss or corruption.

    Physical backups are the recommended method for backing up MariaDB databases, especially in production environments, as they are faster and more efficient than logical backups.

    hashtag
    Backup strategies

    Multiple strategies are available for performing physical backups, including:

    • mariadb-backup: Taken using the enterprise version of , specifically , which is available in the MariaDB enterprise images. The operator supports scheduling Jobs to perform backups using this utility.

    • Kubernetes VolumeSnapshot: Leverage to create snapshots of the persistent volumes used by the MariaDB Pods. This method relies on a compatible CSI (Container Storage Interface) driver that supports volume snapshots. See the

    In order to use VolumeSnapshots, you will need to provide a VolumeSnapshotClass that is compatible with your storage provider. The operator will use this class to create snapshots of the persistent volumes:

    For the rest of compatible , the mariadb-backup CLI will be used to perform the backup. For instance, to use S3 as backup storage:

    hashtag
    Storage types

    Multiple storage types are supported for storing physical backups, including:

    • S3 compatible storage: Store backups in a S3 compatible storage, such as or .

    • Azure Blob Storage: Store backups in an .

    • Persistent Volume Claims (PVC): Use any of the available in your Kubernetes cluster to create a PersistentVolumeClaim (PVC) for storing backups.

    hashtag
    Scheduling

    Physical backup schedule can be optionally configured using the spec.schedule field in the PhysicalBackup resource. When empty, a single backup job is scheduled:

    • cron: to define the backup schedule.

    • suspend: Setting it to true, it prevents new backups from being scheduled.

    • immediate

    It is very important to note that, by default, backups are only scheduled if the referred MariaDB resource is in ready state. You can override this behavior by setting mariaDbRef.waitForIt=false which allows backups to be scheduled even if the MariaDB resource is not ready.

    hashtag
    Compression

    When using physical backups based on mariadb-backup, you are able to choose the compression algorithm used to compress the backup files. The available options are:

    • bzip2: Good compression ratio, but slower compression/decompression speed compared to gzip.

    • gzip: Good compression/decompression speed, but worse compression ratio compared to bzip2.

    • none: No compression.

    To specify the compression algorithm, you can use the compression field in the PhysicalBackup resource:

    compression is defaulted to none by the operator.

    hashtag
    Server-Side Encryption with Customer-Provided Keys (SSE-C) For S3

    You can enable server-side encryption using your own encryption key (SSE-C) by providing a reference to a Secret containing a 32-byte (256-bit) key encoded in base64:

    circle-exclamation

    When using SSE-C, you are responsible for managing and securely storing the encryption key. If you lose the key, you will not be able to decrypt your backups. Ensure you have proper key management procedures in place.

    circle-info

    When restoring from SSE-C encrypted backups via bootstrapFrom, the same key must be provided in the S3 configuration.

    hashtag
    Retention policy

    You can define a retention policy both for backups based on mariadb-backup and for VolumeSnapshots. The retention policy allows you to specify how long backups should be retained before they are automatically deleted. This can be defined via the maxRetention field in the PhysicalBackup resource:

    When using physical backups based on mariadb-backup, the operator will automatically delete backups files in the specified storage older than the retention period. The cleanup process will be performed after each successful backup.

    When using VolumeSnapshots, the operator will automatically delete the VolumeSnapshot resources older than the retention period using the Kubernetes API. The cleanup process will be performed after a VolumeSnapshot is successfully created.

    hashtag
    Target policy

    You can define a target policy both for backups based on mariadb-backup and for VolumeSnapshots. The target policy allows you to specify in which Pod the backup should be taken. This can be defined via the target field in the PhysicalBackup resource:

    The following target policies are available:

    • Replica: The backup will be taken in a ready replica. If no ready replicas are available, the backup will not be scheduled.

    • PreferReplica: The backup will be taken in a ready replica if available, otherwise it will be taken in the primary Pod.

    When using the PreferReplica target policy, you may be willing to schedule the backups even if the MariaDB resource is not ready. In this case, you can set mariaDbRef.waitForIt=false to allow scheduling the backup even if no replicas are available.

    hashtag
    Restoration

    Physical backups can only be restored in brand new MariaDB instances without any existing data. This means that you cannot restore a physical backup into an existing MariaDB instance that already has data.

    To perform a restoration, you can specify a PhysicalBackup as restoration source under the spec.bootstrapFrom field in the MariaDB resource:

    This will take into account the backup strategy and storage type used in the PhysicalBackup, and it will perform the restoration accordingly.

    As an alternative, you can also provide a reference to an S3 bucket that was previously used to store the physical backup files:

    It is important to note that the backupContentType field must be set to Physical when restoring from a physical backup. This ensures that the operator uses the correct restoration method.

    To restore a VolumeSnapshot, you can provide a reference to a specific VolumeSnapshot resource in the spec.bootstrapFrom field:

    hashtag
    Target recovery time

    By default, the operator will match the closest backup available to the current time. You can specify a different target recovery time by using the targetRecoveryTime field in the PhysicalBackup resource. This lets you define the exact point in time you want to restore to:

    Only backups strictly before or at targetRecoveryTime will be matched.

    hashtag
    Timeout

    By default, both backups based on mariadb-backup and VolumeSnapshots will have a timeout of 1 hour. You can change this timeout by using the timeout field in the PhysicalBackup resource:

    When timed out, the operator will delete the Jobs or VolumeSnapshots resources associated with the PhysicalBackup resource. The operator will create new Jobs or VolumeSnapshots to retry the backup operation if the PhysicalBackup resource is still scheduled.

    hashtag
    Log level

    When taking backups based on mariadb-backup, you can specify the log level to be used by the mariadb-enterprise-operator container using the logLevel field in the PhysicalBackup resource:

    hashtag
    Extra options

    When taking backups based on mariadb-backup, you can specify extra options to be passed to the mariadb-backup command using the args field in the PhysicalBackup resource:

    Refer to the for a list of available options.

    hashtag
    Azure Blob Storage Credentials

    Credentials for accessing Azure Blob Storage can be provided via the azureBlob key in the storage field of the PhysicalBackup resource. The credentials are provided as a reference to a Kubernetes Secret:

    Alternatively, you may choose to omit the storageAccountKey and storageAccountName if you are using

    hashtag
    S3 credentials

    Credentials for accessing an S3 compatible storage can be provided via the s3 key in the storage field of the PhysicalBackup resource. The credentials can be provided as a reference to a Kubernetes Secret:

    Alternatively, if you are running in EKS, you can use dynamic credentials from an EKS Service Account using EKS Pod Identity or IRSA:

    By leaving out the accessKeyIdSecretKeyRef and secretAccessKeySecretKeyRef credentials and pointing to the correct serviceAccountName, the backup Job will use the dynamic credentials from EKS.

    hashtag
    Staging area

    circle-info

    S3 backups based on mariadb-backup are the only scenario that requires a staging area.

    When using S3 storage for backups, a staging area is used for keeping the external backups while they are being processed. By default, this staging area is an emptyDir volume, which means that the backups are temporarily stored in the node's local storage where the PhysicalBackup Job is scheduled. In production environments, large backups may lead to issues if the node doesn't have sufficient space, potentially causing the backup/restore process to fail.

    Additionally, when restoring these backups, the operator will pull the backup files from S3, uncompress them if needded, and restore them to each of the MariaDB Pods in the cluster individually. To save network bandwidth and compute resources, a staging area is used to keep the uncompressed backup files after they have been restored to the first MariaDB Pod. This allows the operator to restore the same backup to the rest of MariaDB Pods seamlessly, without needing to pull and uncompress the backup again.

    To configure the staging area, you can use the stagingStorage field in the PhysicalBackup resource:

    Similarly, you may also use a staging area when , in the MariaDB resource:

    In the examples above, a PVC with the default StorageClass will be provisioned to be used as staging area.

    hashtag
    VolumeSnapshots

    circle-exclamation

    Before using this feature, ensure that you meet the following prerequisites :

    • and its CRs are installed in the cluster.

    The operator is capable of creating of the PVCs used by the MariaDB Pods. This allows you to create point-in-time snapshots of your data in a Kubernetes-native way, leveraging the capabilities of your storage provider.

    Most of the fields described in this documentation apply to VolumeSnapshots, including scheduling, retention policy, and compression. The main difference with the mariadb-backup based backups is that the operator will not create a Job to perform the backup, but instead it will create a VolumeSnapshot resource directly.

    In order to create consistent, point-in-time snapshots of the MariaDB data, the operator will perform the following steps:

    1. Execute a BACKUP STAGE START statement followed by BACKUP STAGE BLOCK_COMMIT in one of the secondary Pods.

    2. Create a VolumeSnapshot resource of the data PVC mounted by the MariaDB secondary Pod.

    This backup process is described in the and is designed to be .

    hashtag
    Non-blocking physical backups

    Both for mariadb-backup and VolumeSnapshot , the enterprise operator performs non-blocking physical backups by leveraging the . This implies that the backups are taken without long read locks, enabling consistent, production-grade backups with minimal impact on running workloads, ideal for high-availability and performance-sensitive environments.

    hashtag
    Important considerations and limitations

    hashtag
    Root credentials

    When restoring a backup, the root credentials specified through the spec.rootPasswordSecretKeyRef field in the MariaDB resource must match the ones in the backup. These credentials are utilized by the liveness and readiness probes, and if they are invalid, the probes will fail, causing your MariaDB Pods to restart after the backup restoration.

    hashtag
    Restore Job

    When using backups based on mariadb-backup, restoring and uncompressing large backups can consume significant compute resources and may cause restoration Jobs to become stuck due to insufficient resources. To prevent this, you can define the compute resources allocated to the Job:

    hashtag
    ReadWriteOncePod access mode partially supported

    When using backups based on mariadb-backup, the data PVC used by the MariaDB Pod cannot use the access mode, as it needs to be mounted at the same time by both the MariaDB Pod and the PhysicalBackup Job. In this case, please use either the ReadWriteOnce or ReadWriteMany access modes instead.

    Alternatively, if you want to keep using the ReadWriteOncePod access mode, you must use backups based on VolumeSnapshots, which do not require creating a Job to perform the backup and therefore avoid the volume sharing limitation.

    hashtag
    PhysicalBackup Jobs scheduling

    PhysicalBackup Jobs must mount the data PVC used by one of the secondary MariaDB Pods. To avoid scheduling issues caused by the commonly used ReadWriteOnce access mode, the operator schedules backup Jobs on the same node as MariaDB by default.

    If you prefer to disable this behavior and allow Jobs to run on any node, you can set podAffinity=false:

    This configuration may be suitable when using the ReadWriteMany access mode, which allows multiple Pods across different nodes to mount the volume simultaneously.

    hashtag
    Troubleshooting

    Custom columns are used to display the status of the PhysicalBackup resource:

    To get a higher level of detail, you can also check the status field directly:

    You may also check the related events for the PhysicalBackup resource to see if there are any issues:

    hashtag
    Common errors

    hashtag
    mariadb-backup log copy incomplete: consider increasing innodb_log_file_size

    In some situations, when using the mariadb-backup strategy, you may encounter the following error in the backup Job logs:

    This can be addressed by increasing the innodb_log_file_size in the MariaDB configuration. You can do this by adding the following to your MariaDB resource:

    Refer to for further details on this issue.

    hashtag
    mariadb-backup Job fails to start because the Pod cannot mount MariaDB PVC created with StorageClass provider

    Without explicitly enabled the ReadWriteOnce access mode is treated as ReadWriteOncePod.

    Refer to for further details on this issue.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Asynchronous Replication

    The operator supports provisioning and operating MariaDB clusters with replication as a highly availability topology. In the following sections we will be covering how to manage the full lifecycle of a replication cluster.

    In a replication setup, one primary server handles all write operations while one or more replica servers replicate data from the primary, being able to handle read operations. More precisely, the primary has a binary log and the replicas asynchronously replicate the binary log events over the network.

    Please refer to the for more details about replication.

    hashtag
    Provisioning

    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      mariaDbRef:
        name: mariadb-galera
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      mariaDbRef:
        name: mariadb-galera
    
      services:
        - name: rw-router
          router: readwritesplit
          listener:
            port: 3306
    
      monitor:
        interval: 2s
        cooperativeMonitoring: majority_of_all
        params:
          disable_master_failback: "false"
          available_when_donor: "false"
          disable_master_role_setting: "false"
    
      kubernetesService:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.224
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-repl
    spec:
    ...
      mariaDbRef:
        name: mariadb-repl
    
      services:
        - name: rw-router
          router: readwritesplit
          params:
            transaction_replay: "true"
            transaction_replay_attempts: "10"
            transaction_replay_timeout: "5s"
            max_slave_connections: "255"
            max_replication_lag: "3s"
            master_accept_reads: "true"
          listener:
            port: 3306
            protocol: MariaDBProtocol
            params:
              connection_metadata: "tx_isolation=auto"
        - name: rconn-master-router
          router: readconnroute
          params:
            router_options: "master"
            max_replication_lag: "3s"
            master_accept_reads: "true"
          listener:
            port: 3307
        - name: rconn-slave-router
          router: readconnroute
          params:
            router_options: "slave"
            max_replication_lag: "3s"
          listener:
            port: 3308
    
      monitor:
        interval: 2s
        cooperativeMonitoring: majority_of_all
        params:
          auto_failover: "true"
          auto_rejoin: "true"
          switchover_on_low_disk_space: "true"
    
      kubernetesService:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.214
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
    ...
      maxScaleRef:
        name: maxscale-galera
    
      galera:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      servers:
        - name: mariadb-0
          address: mariadb-galera-0.mariadb-galera-internal.default.svc.cluster.local
        - name: mariadb-1
          address: mariadb-galera-1.mariadb-galera-internal.default.svc.cluster.local
        - name: mariadb-2
          address: mariadb-galera-2.mariadb-galera-internal.default.svc.cluster.local
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      servers:
        - name: mariadb-0
          address: 172.18.0.140
          port: 3306
        - name: mariadb-1
          address: 172.18.0.141
        - name: mariadb-2
          address: 172.18.0.142
    
      monitor:
        name: mariadb-monitor
        module: galeramon
        interval: 2s
        cooperativeMonitoring: majority_of_all
        params:
          disable_master_failback: "false"
          available_when_donor: "false"
          disable_master_role_setting: "false"
    
      auth:
        adminUsername: mariadb-enterprise-operator
        adminPasswordSecretKeyRef:
          name: maxscale
          key: password
        clientUsername: maxscale-client
        clientPasswordSecretKeyRef:
          name: maxscale
          key: password
        serverUsername: maxscale-server
        serverPasswordSecretKeyRef:
          name: maxscale
          key: password
        monitorUsername: maxscale-monitor
        monitorPasswordSecretKeyRef:
          name: maxscale
          key: password
        syncUsername: maxscale-sync
        syncPasswordSecretKeyRef:
          name: maxscale
          key: password
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-repl
    spec:
      primaryServer: mariadb-repl-1
    kubectl patch maxscale maxscale-repl \
      --type='merge' \
      -p '{"spec":{"primaryServer":"mariadb-repl-1"}}'
      
    kubectl get maxscale
    NAME            READY   STATUS                                  PRIMARY          AGE
    maxscale-repl   False   Switching primary to 'mariadb-repl-1'   mariadb-repl-0   2m15s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      servers:
        - name: mariadb-0
          address: mariadb-galera-0.mariadb-galera-internal.default.svc.cluster.local
          port: 3306
          protocol: MariaDBBackend
          maintenance: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      config:
        params:
          log_info: "true"
        volumeClaimTemplate:
          resources:
            requests:
              storage: 100Mi
          accessModes:
            - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      auth:
        generate: false
        adminUsername: mariadb-enterprise-operator
        adminPasswordSecretKeyRef:
          name: maxscale
          key: password
        deleteDefaultAdmin: true
        clientUsername: maxscale-client
        clientPasswordSecretKeyRef:
          name: maxscale
          key: password
        clientMaxConnections: 90
        serverUsername: maxscale-server
        serverPasswordSecretKeyRef:
          name: maxscale
          key: password
        serverMaxConnections: 90 
        monitorUsername: maxscale-monitor
        monitorPasswordSecretKeyRef:
          name: maxscale
          key: password
        monitorMaxConnections: 90 
        syncUsername: maxscale-sync
        syncPasswordSecretKeyRef:
          name: maxscale
          key: password
        syncMaxConnections: 90
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      kubernetesService:
        type: LoadBalancer
        metadata:
          annotations:
            metallb.universe.tf/loadBalancerIPs: 172.18.0.224
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        metallb.universe.tf/loadBalancerIPs: 172.18.0.229
      name: maxscale-galera
    spec:
    ...
      ports:
      - name: admin
        port: 8989
        targetPort: 8989
      - name: rw-router-listener
        port: 3306
        targetPort: 3306
      selector:
        app.kubernetes.io/instance: maxscale-galera
        app.kubernetes.io/name: maxscale
      type: LoadBalancer
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection-maxscale
    spec:
      maxScaleRef:
        name: maxscale-galera
      username: maxscale-galera-client
      passwordSecretKeyRef:
        name: maxscale-galera-client
        key: password
      secretName: conn-mxs
      port: 3306
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...  
      connection:
        secretName: mxs-galera-conn
        port: 3306
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      replicas: 2
    
      monitor:
        name: mariadb-monitor
        module: galeramon
        interval: 2s
        cooperativeMonitoring: majority_of_all
        params:
          disable_master_failback: "false"
          available_when_donor: "false"
          disable_master_role_setting: "false"   
    
      config:
        sync:
          database: mysql
          interval: 5s
          timeout: 10s
    kubectl scale maxscale maxscale-galera --replicas 3
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --set extraArgs={--feature-maxscale-suspend}
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      monitor:
        name: mariadb-monitor
        module: galeramon
        interval: 2s
        cooperativeMonitoring: majority_of_all
        params:
          disable_master_failback: "false"
          available_when_donor: "false"
          disable_master_role_setting: "false"   
        suspend: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
    ...
      admin:
        port: 8989
        guiEnabled: true
      guiKubernetesService:
        type: LoadBalancer
        metadata:
          metadata:
            annotations:
              metallb.universe.tf/loadBalancerIPs: 172.18.0.231
    status:
      conditions:
      - lastTransitionTime: "2024-02-08T17:29:01Z"
        message: Running
        reason: MaxScaleReady
        status: "True"
        type: Ready
      configSync:
        databaseVersion: 20
        maxScaleVersion: 20
      listeners:
      - name: rw-router-listener
        state: Running
      monitor:
        name: galeramon-monitor
        state: Running
      primaryServer: mariadb-galera-1
      replicas: 1
      servers:
      - name: mariadb-galera-0
        state: Slave, Synced, Running
      - name: mariadb-galera-1
        state: Master, Synced, Running
      - name: mariadb-galera-2
        state: Slave, Synced, Running
      services:
      - name: rw-router
        state: Started
    kubectl get events --field-selector involvedObject.name=mariadb-repl-maxscale --sort-by='.lastTimestamp'
    
    LAST SEEN   TYPE      REASON                         OBJECT                           MESSAGE
    24s         Normal    MaxScalePrimaryServerChanged   maxscale/mariadb-repl-maxscale   MaxScale primary server changed from 'mariadb-repl-0' to 'mariadb-repl-1'
    helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --set logLevel=debug --set extraArgs={--log-maxscale}
    Failed to create directory '/var/lib/maxscale/maxscale.cnf.d': 13, Permission denied
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: maxscale-galera
    spec:
      securityContext:
        fsGroup: 999
        runAsGroup: 999
        runAsNonRoot: true
        runAsUser: 999
    section for more details.

    Kubernetes Volumes: Store backups in any of the in-tree storage providersarrow-up-right supported by Kubernetes out of the box, such as NFS.

  • Kubernetes VolumeSnapshots: Use Kubernetes VolumeSnapshotsarrow-up-right to create snapshots of the persistent volumes used by the MariaDB Pods. This method relies on a compatible CSI (Container Storage Interface) driver that supports volume snapshots. See the VolumeSnapshots section for more details.

  • : Setting it
    true
    , it schedules a backup immediately after creating the
    PhysicalBackup
    resource.
  • onDemand: Schedule identifier for triggering an on-demand backup. If the identifier is different from the one tracked under status.lastScheduleOnDemand, a new physical backup is triggered.

  • onPrimaryChange: By setting it to true, it schedules a new backup after the primary Pod in the referred MariaDB instance is changed. This is particularly useful for point-in-time recovery.

  • You have a compatible CSI driver that supports VolumeSnapshots installed in the cluster.
  • You have a VolumeSnapshotClass configured configured for your CSI driver.

  • Wait until the VolumeSnapshot is provisioned by the storage system. When timing out, the operator will delete the VolumeSnapshot resource and retry the operation.

  • Issue a BACKUP STAGE END statement.

  • mariadb-backuparrow-up-right
    MariaDB Enterprise backuparrow-up-right
    Kubernetes VolumeSnapshotsarrow-up-right
    VolumeSnapshots
    backup storage types
    AWS S3arrow-up-right
    Minioarrow-up-right
    Azure Blob Storagearrow-up-right
    StorageClassesarrow-up-right
    Cron expressionarrow-up-right
    mariadb-backup documentationarrow-up-right
    managed identityarrow-up-right
    bootstrapping from backup
    external-snapshotterarrow-up-right
    VolumeSnapshot resourcesarrow-up-right
    MariaDB documentationarrow-up-right
    non-blocking
    backup strategies
    BACKUP STAGE feature.arrow-up-right
    ReadWriteOncePodarrow-up-right
    MDEV-36159arrow-up-right
    openebs/lvm-localpvarrow-up-right
    shared optionarrow-up-right
    openebs/lvm-localpv#281arrow-up-right
    spinner
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        volumeSnapshot:
          volumeSnapshotClassName: csi-hostpath-snapclass
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        s3:
          bucket: physicalbackups
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
        waitForIt: true
      schedule:
        cron: "*/1 * * * *"
        suspend: false
        immediate: true
        onDemand: "1"
        onPrimaryChange: true 
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      compression: bzip2
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: ssec-key
    stringData:
      # 32-byte key encoded in base64 (use: openssl rand -base64 32)
      customer-key: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        s3:
          bucket: physicalbackups
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
          ssec:
            customerKeySecretKeyRef:
              name: ssec-key
              key: customer-key
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      maxRetention: 720h # 30 days
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      target: Replica
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      bootstrapFrom:
        backupRef:
          name: physicalbackup
          kind: PhysicalBackup
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      bootstrapFrom:
        s3:
          bucket: physicalbackups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
        backupContentType: Physical
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      bootstrapFrom:
        volumeSnapshotRef:
          name: physicalbackup-20250611163352
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      bootstrapFrom:
        targetRecoveryTime: 2025-06-17T08:07:00Z
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      timeout: 2h
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      logLevel: debug
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      args:
        - "--verbose"
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      target: Replica
      compression: bzip2
      storage:
        azureBlob:
          containerName: physicalbackup
          serviceURL: https://physicalbackup.blob.core.windows.net # Format is: `https://%s.blob.core.windows.net/` where `%s` is the containerName
          prefix: mariadb
          storageAccountName: exampleStorageAccount
          storageAccountKey:
            name: azurite-key
            key: storageAccountKey
          # Optional.
          # tls:
          #   enabled: true
          #   caSecretKeyRef:
          #     name: azurite-certs
          #     key: cert.pem
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        s3:
          bucket: physicalbackups
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: mariadb-backup
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::<<account_id>>:role/my-role-irsa
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      serviceAccountName: mariadb-backup
      storage:
        s3:
          bucket: physicalbackups
          prefix: mariadb
          endpoint: s3.us-east-1.amazonaws.com
          region:  us-east-1
          tls:
            enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      storage:
        s3:
          bucket: physicalbackups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          region:  us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
      stagingStorage:
        persistentVolumeClaim:
          resources:
            requests:
              storage: 1Gi
          accessModes:
            - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      mariaDbRef:
        name: mariadb
      bootstrapFrom:
        s3:
          bucket: physicalbackups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
        backupContentType: Physical
        stagingStorage:
          persistentVolumeClaim:
            resources:
              requests:
                storage: 1Gi
            accessModes:
              - ReadWriteOnce
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      bootstrapFrom:
        restoreJob:
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              memory: 1Gi
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      mariaDbRef:
        name: mariadb
      podAffinity: false
    kubectl get physicalbackups
    
    NAME             COMPLETE   STATUS    MARIADB   LAST SCHEDULED   AGE
    physicalbackup   True       Success   mariadb   17s              17s
    kubectl get physicalbackups physicalbackup -o json | jq -r '.status'
    
    {
      "conditions": [
        {
          "lastTransitionTime": "2025-07-14T07:01:14Z",
          "message": "Success",
          "reason": "JobComplete",
          "status": "True",
          "type": "Complete"
        }
      ],
      "lastScheduleCheckTime": "2025-07-14T07:00:00Z",
      "lastScheduleTime": "2025-07-14T07:00:00Z",
      "nextScheduleTime": "2025-07-15T07:00:00Z"
    }
    kubectl get events --field-selector involvedObject.name=physicalbackup
    
    LAST SEEN   TYPE     REASON                  OBJECT                                 MESSAGE
    116s        Normal   WaitForFirstConsumer    persistentvolumeclaim/physicalbackup   waiting for first consumer to be created before binding
    116s        Normal   JobScheduled            physicalbackup/physicalbackup          Job physicalbackup-20250714140837 scheduled
    116s        Normal   ExternalProvisioning    persistentvolumeclaim/physicalbackup   Waiting for a volume to be created either by the external provisioner 'rancher.io/local-path' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
    116s        Normal   Provisioning            persistentvolumeclaim/physicalbackup   External provisioner is provisioning volume for claim "default/physicalbackup"
    113s        Normal   ProvisioningSucceeded   persistentvolumeclaim/physicalbackup   Successfully provisioned volume pvc-7b7c71f9-ea7e-4950-b612-2d41d7ab35b7
    mariadb [00] 2025-08-04 09:15:57 Was only able to copy log from 58087 to 59916, not 68968; try increasing
    innodb_log_file_size
    mariadb mariabackup: Stopping log copying thread.[00] 2025-08-04 09:15:57 Retrying read of log at LSN=59916
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
    ...
      myCnf: |
        [mariadb]
        innodb_log_file_size=200M
    In order to provision a replication cluster, you need to configure a number of replicas greater than 1 and set the replication.enabled=true in the MariaDB CR:

    After applying the previous CR, the operator will provision a replication cluster with one primary and two replicas. The operator will take care of setting up replication, configuring the replication user and monitoring the replication status:

    As you can see, the primary can be identified in the PRIMARY column of the kubectl get mariadb output. You may also inspect the current replication status by checking the MariaDB CR status:

    The operator continuously monitors the replication status via SHOW SLAVE STATUSarrow-up-right, taking it into account for internal operations and updating the CR status accordingly.

    hashtag
    Asynchronous vs semi-synchronous replication

    By default, semi-synchronous replicationarrow-up-right is configured, which requires an acknowledgement from at least one replica before committing the transaction back to the client. This trades off performance for better consistency and facilitates failover and switchover operations.

    If you are aiming for better performance, you can disable semi-synchronous replication, and go fully asynchronous, please refer to configuration section for doing so.

    hashtag
    Configuration

    The replication settings can be customized under the replication section of the MariaDB CR. The following options are available:

    • gtidStrictMode: Enables GTID strict mode. It is recommended and enabled by default. See MariaDB documentationarrow-up-right.

    • semiSyncEnabled: Determines whether semi-synchronous replication should be enabled. It is enabled by default. See MariaDB documentationarrow-up-right.

    • semiSyncAckTimeout: ACK timeout for the replicas to acknowledge transactions to the primary. It requires semi-synchronous replication. See .

    • semiSyncWaitPoint: Determines whether the transaction should wait for an ACK after having synced the binlog (AfterSync) or after having committed to the storage engine (AfterCommit, the default). It requires semi-synchronous replication. See .

    • syncBinlog: Number of events after which the binary log is synchronized to disk. See .

    • standaloneProbes: Determines whether to use regular non-HA startup and liveness probes. It is disabled by default.

    These options are used by the operator to create a replication configuration file that is applied to all nodes in the cluster. When updating any of these options, an update of the cluster will be triggered in order to apply the new configuration.

    For replica-specific configuration options, please refer to the replica configuration section. Additional system variables may be configured via the myCnf configuration field. Refer to the configuration documentation for more details.

    hashtag
    Replica configuration

    The following options are replica-specific and can be configured under the replication.replica section of the MariaDB CR:

    • replPasswordSecretKeyRef: Reference to the Secret key containing the password for the replication user, used by the replicas to connect to the primary. By default, a Secret with a random password will be created.

    • gtid: GTID position mode to be used (CurrentPos and SlavePos allowed). It defaults to CurrentPos. See .

    • connectionRetrySeconds: Number of seconds that the replica will wait between connection retries. See .

    • maxLagSeconds: Maximum acceptable lag in seconds between the replica and the primary. If the lag exceeds this value, the will fail and the replica will be marked as not ready. It defaults to 0, meaning that no lag is allowed. See section for more details.

    • syncTimeout: Timeout for the replicas to be synced during switchover and failover operations. It defaults to 10s. See the and sections for more details.

    hashtag
    Probes

    Kubernetes probes are resolved by the agent (see data-plane documentation) in the replication topology, taking into account both the MariaDB and replication status. Additionally, as described in the configuration documentation, probe thresholds may be tuned accordingly for a better reliability based on your environment.

    In the following sub-sections we will be covering specifics about the replication topology.

    hashtag
    Liveness probe

    As part of the liveness probe, the agent checks that the MariaDB server is running and that the replication threads (Slave_IO_Running and Slave_SQL_Running) are both running on replicas. If any of these checks fail, the liveness probe will fail.

    If such a behaviour is undesirable, it is possible to opt in for regular standalone startup/liveness probes (default SELECT 1 query). See standaloneProbes in the configuration section.

    hashtag
    Readiness probe

    The readiness probe checks that the MariaDB server is running and that the Seconds_Behind_Master value is within the acceptable lag range defined by the spec.replication.replica.maxLagSeconds configuration option. If the lag exceeds this value, the readiness probe will fail and the replica will be marked as not ready.

    hashtag
    Lagged replicas

    A replica is considered to be lagging behind the primary when the Seconds_Behind_Master value reported by SHOW SLAVE STATUS exceeds the spec.replication.replica.maxLagSeconds configuration option. This results in the readiness probe failing for that replica, and it has the following implications:

    • When using Kubernetes Services for high availability, queries will not be forwarded to lagged replicas. This doesn't affect MaxScale routing.

    • When taking a physical backup, lagged replicas will not be considered as a target for taking the backup.

    • During a primary switchover managed by the operator, lagged replicas will block switchover operations, as all the replicas must be in sync before promoting the new primary. This doesn't affect MaxScale switchover operation.

    • During a managed by the operator, lagged replicas will not be considered as candidates to be promoted as the new primary. MaxScale failover will not consider lagged replicas either.

    • During , lagged replicas will block the update operation, as each of the replicas must pass the readiness probe before proceeding to the update of the next one.

    hashtag
    Backing up and restoring

    In order to back up and restore a replication cluster, all the concepts and procedures described in the physical backup documentation apply.

    Additionally, for the replication topology, the operator tracks the GTID position at the time of taking the backup, and sets this position based on the gtid_current_pos system variable when restoring the backup, as described in the MariaDB documentationarrow-up-right.

    Depending on the PhysicalBackup strategy used, the operator will track the GTID position accordingly:

    • mariadb-backup: When using PhysicalBackup with the mariadb-backup strategy, the GTID will be restored to a mariadb-enterprise-operator.info file in the data directory, which the agent will expose to the operator via HTTP.

    • VolumeSnapshot: When using PhysicalBackup with the VolumeSnapshot strategy, the GTID position will be kept in a enterprise.mariadb.com/gtid annotation in the VolumeSnapshot object, which later on the operator will read when restoring the backup.

    When using PhysicalBackup with the mariadb-backup strategy, the GTID will be restored to a mariadb-enterprise-operator.info file in the data directory, which the agent will expose to the operator via HTTP.

    It is important to note that, by default, physical backups are only taken in ready replicas when the MariaDB resource is in a ready state. If you are running with a single replica, it is recommended to set mariaDbRef.waitForIt=false and target=PreferReplica in the PhysicalBackup CR to allow taking backups from the primary when the replica is not ready. Please refer to the physical backup documentation for configuring this behaviour.

    hashtag
    VolumeSnapshot

    When using PhysicalBackup with the VolumeSnapshot strategy, the GTID position will be kept in a enterprise.mariadb.com/gtid annotation in the VolumeSnapshot object, which later on the operator will read when restoring the backup.

    circle-exclamation

    Refrain from removing the enterprise.mariadb.com/gtid annotation in the VolumeSnapshot object, as it is required for configuring the replica when restoring the backup.

    hashtag
    Primary switchover

    circle-info

    Our recommendation for production environments is to rely on MaxScale for the switchover operation, as it provides several advantages.

    You can declaratively trigger a primary switchover by updating the spec.replication.primary.podIndex field in the MariaDB CR to the index of the replica you want to promote as the new primary. For example, to promote the replica at index 1:

    You can also do this imperatively using kubectl:

    This will result in the MariaDB object reporting the following status:

    The steps involved in the switchover operation are:

    1. Lock the current primary using FLUSH TABLES WITH READ LOCK to ensure no new transactions are being processed.

    2. Set the read_only system variable on the current primary to prevent any write operations.

    3. Wait until all the replicas are in sync with the current primary. The timeout for this step can be configured via the spec.replication.replica.syncTimeout option. If the timeout is reached, the switchover operation will be retried from the beginning.

    4. Promote the selected replica to be the new primary.

    5. Connect replicas to the new primary.

    6. Change the current primary to be a replica of the new primary.

    If the switchover operation is stuck waiting for replicas to be in sync, you can check the MariaDB status to identify which replicas are causing the issue. Furthermore, if still in this step, you can cancel the switchover operation by setting back the spec.replication.primary.podIndex field back to the previous primary index.

    hashtag
    Primary failover

    circle-info

    Our recommendation for production environments is to rely on MaxScale for the failover process, as it provides several advantages.

    You can configure the operator to automatically perform a primary failover whenever the current primary becomes unavailable:

    Optionally, you may also specify a autoFailoverDelay, which will add a delay before triggering the failover operation. By default, the failover is immediate, but introducing a delay may be useful to avoid failovers due to transient issues. But note that the delay should be lower than the readiness probe failure threshold (e.g. 20 seconds delay when readiness threshold is 30 seconds), otherwise all the replicas will be marked as not ready and the automatic failover will not be able to proceed.

    Whenever the primary becomes unavailable, the following status will be reported in the MariaDB CR:

    The criteria for choosing a new primary is:

    • The Pod should be in Ready state, therefore not considering unavailable or lagged replicas (see readiness probe and lagged replicas sections).

    • Both the IO(Slave_IO_Running) and the SQL(Slave_SQL_Running) threads should be running.

    • The replica should not have relay log events.

    • Among the candidates, the one with the highest gtid_current_pos will be selected.

    Once the new primary is selected, the failover process will be performed, consisting of the following steps:

    1. Wait for the new primary to apply all relay log events.

    2. Promote the selected replica to be the new primary.

    3. Connect replicas to the new primary.

    hashtag
    Updates

    When updating a replication cluster, all the considerations and procedures described in the updates documentation apply.

    Furthermore, for the replication topology, the operator will trigger an additional switchover operation once all the replicas have been updated, just before updating the primary. This ensures that the primary is always updated last, minimizing the impact on write operations.

    The steps involved in updating a replication cluster are:

    1. Update each replica one by one, waiting for each replica to be ready before proceeding to the next one (see readiness probe section).

    2. Once all replicas are up to date and synced, perform a primary switchover to promote one of the replicas as the new primary. If MariaDB CR has a MaxScale configured using the spec.maxScaleRef field, the operator will trigger the primary switchover in MaxScale instead.

    3. Update the previous primary, now running as a replica.

    hashtag
    Scaling out

    Scaling out a replication cluster implies adding new replicas to the cluster i.e scaling horizontally. The process involves taking a physical backup from a ready replica to setup the new replica PVC, and upscaling the replication cluster afterwards.

    The first step is to define the PhysicalBackup strategy to be used for taking the backup. For doing so, we will be defining a PhysicalBackup CR, that will be used by the operator as template for creating the actual PhysicalBackup object during scaling out events. For instance, to use the mariadb-backup strategy, we can define the following PhysicalBackup:

    It is important to note that, we set the spec.schedule.suspend=true to prevent scheduling this backup, as it will be only be used as a template.

    Alternatively, you may also use a VolumeSnapshot strategy for taking the backup:

    Once the PhysicalBackup template is created, you need to set a reference to it in the spec.replication.replica.bootstrapFrom, indicating that this will be the source for creating new replicas:

    At this point, you can proceed to scale out the cluster by increasing the spec.replicas field in the MariaDB CR. For example, to scale out from 3 to 4 replicas:

    You can also do this imperatively using kubectl:

    This will trigger an scaling out operation, resulting in:

    • A PhysicalBackup based on the template being created.

    • Creating a new PVC for the new replica based on the PhysicalBackup.

    • Upscaling the StatefulSet, adding a Pod that mounts the newly created PVC.

    • The Pod is configured as a replica, connected to the primary by starting the replication in the GTID position stored in the backup.

    It is important to note that, if there are no ready replicas available at the time of the scaling out operation, the PhysicalBackup will not become ready, and the scaling out operation will be stuck until a replica becomes ready. You have the ability to cancel the scaling out operation by setting back the spec.replicas field to the previous value.

    circle-exclamation

    Considering that we set mariaDbRef.waitForIt=false and target=PreferReplica in the PhysicalBackup template, it is important to note that, if there are no ready replicas available at the time of the scaling out operation, the operator will take the backup from the primary instead. Please refer to the physical backup documentation for configuring this behaviour.

    circle-info

    You have the ability to cancel the scaling out operation by setting spec.replicas back to the previous value.

    hashtag
    Replica recovery

    The operator has the ability to automatically recover replicas that become unavailable and report a specific error code in the replication status. For doing so, the operator continuously monitors the replication status of each replica, and whenever a replica reports an error code listed in the table below, the operator will trigger an automated recovery process for that replica:

    Error Code
    Thread
    Description
    Documentation

    1236

    IO

    Error 1236: Got fatal error from master when reading data from binary log.

    To perform the recovery, the operator will take a physical backup from a ready replica, restore it to the failed replica PVC, and reconfigure the replica to connect to the primary from the GTID position stored in the backup.

    Similarly to the scaling out operation, you need to define a PhysicalBackup template and set a reference to it in the spec.replication.replica.bootstrapFrom field of the MariaDB CR. Additionally, you need to explicitly enable the replica recovery, as it is disabled by default:

    The errorDurationThreshold option defines the duration after which, a replica reporting an unknown error code will be considered for recovery. This is useful to avoid recovering replicas due to transient issues. It defaults to 5m.

    We will be simulating a 1236 error in a replica to demonstrate how the recovery process works:

    triangle-exclamation

    Do not perform the following steps in a production environment.

    • Purge the binary logs in the primary:

    • Delete the PVC and restart one of the replicas:

    This will trigger a replica recovery operation, resulting in:

    • A PhysicalBackup based on the template being created.

    • Restoring the backup to the failed replica PVC.

    • Reconfigure the replica to connect to the primary from the GTID position stored in the backup.

    circle-exclamation

    Considering that we set mariaDbRef.waitForIt=false and target=PreferReplica in the PhysicalBackup template, it is important to note that, if there are no ready replicas available at the time of the replica recovery operation, the operator will take the backup from the primary instead. Please refer to the physical backup documentation for configuring this behaviour.

    circle-info

    You have the ability to cancel the recovery operation by setting spec.replication.replica.recovery.enabled=false.

    hashtag
    Troubleshooting

    The operator tracks the current replication status under the MariaDB status subresource. This status is updated every time the operator reconciles the MariaDB resource, and it is the first place to look for when troubleshooting replication issues:

    Additionally, also under the status subresource, the operator sets status conditions whenever a specific state of the MariaDB lifecycle is reached:

    The operator also emits Kubernetes events during failover/switchover operations. You may check them to see how these operations progress:

    hashtag
    Common errors

    Primary has purged binary logs, unable to configure replica

    The primary may purge binary log events at some point, after then, if a replica requests events before that point, it will fail with the following error:

    This is a something the operator is able to recover from, please refer to the replica recovery section.

    Scaling out/recovery operation stuck

    These operations rely on a PhysicalBackup for setting up the new replicas. If this PhysicalBackup does not become ready, the operation will not progress. In order to debug this please refer to the PhysicalBackup troubleshooting section.

    One of the reasons could be that you have no ready replicas for taking the backup and your PhysicalBackup CR does not allow taking the backup from the primary. You may set mariaDbRef.waitForIt=false and target=PreferReplica in the PhysicalBackup template to allow taking the backup from the primary when there are no ready replicas available. Please verify that this is the case by checking the status of your MariaDB resource and your Pods, and refer to the physical backup documentation for configuring the backup behaviour.

    MaxScale switchover stuck during update

    When using MaxScale, after having updated all the replica Pods, it could happen that MaxScale refuses to perform the switchover, as it considers the Pod chosen by the operator to be unsafe:

    For this case, you can manually update the primaryServer field in the MaxScale resource to a safe Pod, and restart the operator. If the new primary server is the right Pod, MaxScale will start the switchover and the update will continue after it completes.

    Scale out/replica recovery job names too long

    This error happens when the name of the physical backup Job created for the scaling out or replica recovery operation exceeds the Kubernetes hard limit of 63 characters. We have truncated the job names already to significantly mitigate this problem, but the problem might still happen if your MariaDB resource name is too long.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    MariaDB documentationarrow-up-right
    spinner
    high availability
    high availability
    Watch Nowarrow-up-right
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replicas: 3
      replication:
        enabled: true
    kubectl get pods
    NAME                                    READY   STATUS    RESTARTS   AGE
    mariadb-repl-0                          2/2     Running   0          2d19h
    mariadb-repl-1                          2/2     Running   0          2d19h
    mariadb-repl-2                          2/2     Running   0          2d19h
    mariadb-repl-metrics-56865fff65-t72kc   1/1     Running   0          2d20h
    
    kubectl get mariadb
    NAME           READY   STATUS    PRIMARY          UPDATES                    AGE
    mariadb-repl   True    Running   mariadb-repl-0   ReplicasFirstPrimaryLast   2d20h
    kubectl get mariadb mariadb-repl -o jsonpath="{.status.replication}" | jq
    {
      "replicas": {
        "mariadb-repl-1": {
          "gtidCurrentPos": "0-10-155",
          "gtidIOPos": "0-10-155",
          "lastErrorTransitionTime": "2025-10-22T10:51:10Z",
          "lastIOErrno": 0,
          "lastIOError": "",
          "lastSQLErrno": 0,
          "lastSQLError": "",
          "secondsBehindMaster": 0,
          "slaveIORunning": true,
          "slaveSQLRunning": true
        },
        "mariadb-repl-2": {
          "gtidCurrentPos": "0-10-155",
          "gtidIOPos": "0-10-155",
          "lastErrorTransitionTime": "2025-10-22T10:47:29Z",
          "lastIOErrno": 0,
          "lastIOError": "",
          "lastSQLErrno": 0,
          "lastSQLError": "",
          "secondsBehindMaster": 0,
          "slaveIORunning": true,
          "slaveSQLRunning": true
        }
      },
      "roles": {
        "mariadb-repl-0": "Primary",
        "mariadb-repl-1": "Replica",
        "mariadb-repl-2": "Replica"
      }
    }
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replicas: 3
      replication:
        enabled: true
        gtidStrictMode: true
        semiSyncEnabled: true
        semiSyncAckTimeout: 10s
        semiSyncWaitPoint: AfterCommit
        syncBinlog: 1
        standaloneProbes: false
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replicas: 3
      replication:
        enabled: true
        replica:
          replPasswordSecretKeyRef:
            name: mariadb
            key: password
          gtid: CurrentPos
          connectionRetrySeconds: 10
          maxLagSeconds: 0
          syncTimeout: 10s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replicas: 3
      replication:
        enabled: true
        primary:
          podIndex: 1
    kubectl patch mariadb mariadb-repl \
      --type='merge' \
      -p '{"spec":{"replication":{"primary":{"podIndex":1}}}}'
    kubectl get mariadb
    NAME           READY   STATUS                                  PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Switching primary to 'mariadb-repl-1'   mariadb-repl-0   ReplicasFirstPrimaryLast   3d2h
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replicas: 3
      replication:
        enabled: true
        primary:
          autoFailover: true
          autoFailoverDelay: 0s
    kubectl get mariadb
    NAME           READY   STATUS    PRIMARY          UPDATES                    AGE
    mariadb-repl   True    Running   mariadb-repl-0   ReplicasFirstPrimaryLast   3d2h
    
    kubectl delete pod mariadb-repl-0
    pod "mariadb-repl-0" deleted
    
    kubectl get mariadb
    NAME           READY   STATUS                                  PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Switching primary to 'mariadb-repl-1'   mariadb-repl-0   ReplicasFirstPrimaryLast   3d2h 
    
    kubectl get mariadb
    NAME           READY   STATUS    PRIMARY          UPDATES                    AGE
    mariadb-repl   True    Running   mariadb-repl-1   ReplicasFirstPrimaryLast   3d2h
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup-tpl
    spec:
      mariaDbRef:
        name: mariadb-repl
        waitForIt: false
      schedule:
        suspend: true
      target: PreferReplica
      storage:
        s3:
          bucket: scaleout
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          region:  us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
      timeout: 1h
      podAffinity: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup-tpl
    spec:
      mariaDbRef:
        name: mariadb-repl
        waitForIt: false
      schedule:
        suspend: true
      target: PreferReplica
      storage:
        volumeSnapshot:
          volumeSnapshotClassName: csi-hostpath-snapclass
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replication:
        enabled: true
        replica:
          bootstrapFrom:
            physicalBackupTemplateRef:
              name: physicalbackup-tpl
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replicas: 4
      replication:
        enabled: true
        replica:
          bootstrapFrom:
            physicalBackupTemplateRef:
              name: physicalbackup-tpl
    kubectl scale mariadb mariadb-repl --replicas=4
    kubectl scale mariadb mariadb-repl --replicas=4
    mariadb.enterprise.mariadb.com/mariadb-repl scaled
    
    kubectl get mariadb
    NAME           READY   STATUS        PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Scaling out   mariadb-repl-1   ReplicasFirstPrimaryLast   3d5h
    
    kubectl get physicalbackups
    NAME                       COMPLETE   STATUS      MARIADB        LAST SCHEDULED   AGE
    mariadb-repl-pb-scaleout   True       Success     mariadb-repl   14s              14s
    physicalbackup-tpl         False      Suspended   mariadb-repl                    3d8h
    
    kubectl get pods
    NAME                                    READY   STATUS    RESTARTS   AGE
    mariadb-repl-0                          2/2     Running   0          137m
    mariadb-repl-1                          2/2     Running   0          3d5h
    mariadb-repl-2                          2/2     Running   0          3d5h
    mariadb-repl-3                          2/2     Running   0          40s
    mariadb-repl-metrics-56865fff65-t72kc   1/1     Running   0          3d5h
    
    kubectl get mariadb
    NAME           READY   STATUS    PRIMARY          UPDATES                    AGE
    mariadb-repl   True    Running   mariadb-repl-1   ReplicasFirstPrimaryLast   3d5h
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      replication:
        enabled: true
        replica:
          bootstrapFrom:
            physicalBackupTemplateRef:
              name: physicalbackup-tpl
          recovery:
            enabled: true
            errorDurationThreshold: 5m
    PRIMARY=$(kubectl get mariadb mariadb-repl -o jsonpath="{.status.currentPrimary}")
    echo "Purging binary logs in primary $PRIMARY"
    kubectl exec -it $PRIMARY -c mariadb -- mariadb -u root -p'MariaDB11!' --ssl=false -e "FLUSH LOGS;"
    kubectl exec -it $PRIMARY -c mariadb -- mariadb -u root -p'MariaDB11!' --ssl=false -e "PURGE BINARY LOGS BEFORE NOW();"
    kubectl exec -it $PRIMARY -c mariadb -- mariadb -u root -p'MariaDB11!' --ssl=false -e "SHOW BINARY LOGS;"
    REPLICA=$(kubectl get mariadb mariadb-repl -o jsonpath='{.status.replication.replicas}' | jq -r 'keys[]' | head -n1)
    echo "Deleting PVC and restarting replica $REPLICA"
    kubectl delete pvc storage-$REPLICA --wait=false 
    kubectl delete pod $REPLICA --wait=false 
    kubectl get mariadb
    NAME           READY   STATUS                PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Recovering replicas   mariadb-repl-1   ReplicasFirstPrimaryLast   3d6h
    
    kubectl get physicalbackups
    NAME                       COMPLETE   STATUS      MARIADB        LAST SCHEDULED   AGE
    mariadb-repl-pb-recovery   True       Success     mariadb-repl   31s              31s
    physicalbackup-tpl         False      Suspended   mariadb-repl                    3d9h
    
    kubectl get pods
    NAME                                          READY   STATUS            RESTARTS       AGE
    mariadb-repl-0                                0/2     PodInitializing   0              22s
    mariadb-repl-0-pb-init-qn79f                  0/1     Completed         0              8s
    mariadb-repl-1                                2/2     Running           0              3d6h
    mariadb-repl-2                                2/2     Running           0              3d6h
    mariadb-repl-metrics-56865fff65-t72kc         1/1     Running           0              3d6h
    mariadb-repl-pb-recovery-2025102020270r98zr   0/1     Completed         0              31s
    
    kubectl get mariadb
    NAME           READY   STATUS    PRIMARY          UPDATES                    AGE
    mariadb-repl   True    Running   mariadb-repl-1   ReplicasFirstPrimaryLast   3d6h
    kubectl get mariadb mariadb-repl -o jsonpath="{.status.replication}" | jq
    {
      "replicas": {
        "mariadb-repl-1": {
          "gtidCurrentPos": "0-10-155",
          "gtidIOPos": "0-10-155",
          "lastErrorTransitionTime": "2025-10-22T10:51:10Z",
          "lastIOErrno": 0,
          "lastIOError": "",
          "lastSQLErrno": 0,
          "lastSQLError": "",
          "secondsBehindMaster": 0,
          "slaveIORunning": true,
          "slaveSQLRunning": true
        },
        "mariadb-repl-2": {
          "gtidCurrentPos": "0-10-155",
          "gtidIOPos": "0-10-155",
          "lastErrorTransitionTime": "2025-10-22T10:47:29Z",
          "lastIOErrno": 0,
          "lastIOError": "",
          "lastSQLErrno": 0,
          "lastSQLError": "",
          "secondsBehindMaster": 0,
          "slaveIORunning": true,
          "slaveSQLRunning": true
        }
      },
      "roles": {
        "mariadb-repl-0": "Primary",
        "mariadb-repl-1": "Replica",
        "mariadb-repl-2": "Replica"
      }
    }
    kubectl get mariadb mariadb-repl -o jsonpath="{.status.conditions}" | jq
    [
      {
        "lastTransitionTime": "2025-10-20T20:28:09Z",
        "message": "Running",
        "reason": "StatefulSetReady",
        "status": "True",
        "type": "Ready"
      },
      {
        "lastTransitionTime": "2025-10-17T14:17:43Z",
        "message": "Updated",
        "reason": "Updated",
        "status": "True",
        "type": "Updated"
      },
      {
        "lastTransitionTime": "2025-10-17T14:17:58Z",
        "message": "Replication configured",
        "reason": "ReplicationConfigured",
        "status": "True",
        "type": "ReplicationConfigured"
      },
      {
        "lastTransitionTime": "2025-10-20T17:14:38Z",
        "message": "Switchover complete",
        "reason": "SwitchPrimary",
        "status": "True",
        "type": "PrimarySwitched"
      },
      {
        "lastTransitionTime": "2025-10-20T19:31:29Z",
        "message": "Scaled out",
        "reason": "ScaledOut",
        "status": "True",
        "type": "ScaledOut"
      },
      {
        "lastTransitionTime": "2025-10-20T20:27:41Z",
        "message": "Replica recovered",
        "reason": "ReplicaRecovered",
        "status": "True",
        "type": "ReplicaRecovered"
      }
    ]
    kubectl get events --field-selector involvedObject.name=mariadb-repl --sort-by='.lastTimestamp'
    
    LAST SEEN   TYPE     REASON             OBJECT                 MESSAGE
    17s         Normal   PrimaryLock        mariadb/mariadb-repl   Locking primary with read lock
    17s         Normal   PrimaryReadonly    mariadb/mariadb-repl   Enabling readonly mode in primary
    17s         Normal   ReplicaSync        mariadb/mariadb-repl   Waiting for replicas to be synced with primary
    17s         Normal   PrimaryNew         mariadb/mariadb-repl   Configuring new primary at index '0'
    7s          Normal   ReplicaConn        mariadb/mariadb-repl   Connecting replicas to new primary at '0'
    7s          Normal   PrimaryToReplica   mariadb/mariadb-repl   Unlocking primary '1' and configuring it to be a replica. New primary at '0'
    7s          Normal   PrimaryLock        mariadb/mariadb-repl   Unlocking primary
    7s          Normal   PrimarySwitched    mariadb/mariadb-repl   Primary switched from index '1' to index '0'
    Error 1236: Got fatal error from master when reading data from binary log.
    2025-10-27 15:17:11   error  : [mariadbmon] 'mariadb-repl-1' is not a valid demotion target for switchover: it does not have a 'gtid_binlog_pos'.
    error creating Job: Job.batch \"mariadb-repl-operator-test-new-physicalbackup-scale-out-20251208221943\" 
    is invalid: spec.template.labels: 
    Invalid value: \"mariadb-repl-operator-test-new-physicalbackup-scale-out-20251208221943\": 
    must be no more than 63 characters
    MariaDB documentationarrow-up-right
    MariaDB documentationarrow-up-right
    MariaDB documentationarrow-up-right
    MariaDB documentationarrow-up-right
    MariaDB documentationarrow-up-right
    readiness probe
    lagged replicas
    primary switchover
    primary failover
    primary failover
    updates
    MariaDB docsarrow-up-right
    Run In Postman

    Helm

    Official Helm install MariaDB Enterprise Operator: mariadb-enterprise-operator-crds chart, values.yaml imagePullSecrets, --version, helm upgrade/uninstall.

    Helm is the preferred way to install MariaDB Enterprise Kubernetes Operator in Kubernetes clusters. This documentation aims to provide guidance on how to manage the installation and upgrades of both the CRDs and the operator via Helm charts.

    hashtag
    Prerequisites

    Configure your customer credentials as described in the documentation to be able to pull images.

    hashtag
    Charts

    MariaDB Enterprise Kubernetes Operator is split into two different helm charts for better convenience:

    • mariadb-enterprise-operator-crds: Bundles the required by the operator.

    • mariadb-enterprise-operator: Contains all the template manifests required to install the operator. Refer to the section for detailed information about the supported values.

    hashtag
    Control-plane

    The operator extends the Kubernetes control plane and consists of the following components deployed via Helm:

    • operator: The mariadb-enterprise-operator itself that performs the CRD reconciliation.

    • webhook: The Kubernetes control-plane delegates CRD validations to this HTTP server. Kubernetes requires TLS to communicate with the webhook server.

    hashtag
    Installing CRDs

    Helm has certain . To address this, we are providing the CRDs in a separate chart, . This allows us to manage the installation and updates of the CRDs independently from the operator. For example, you can uninstall the operator without impacting your existing MariaDB CRDs.

    CRDs can be installed in your cluster by running the following commands

    hashtag
    Installing the operator

    The first step is to prepare a values.yaml file to specify your previously configured :

    Then, you can proceed to install the operator:

    If you have the and already installed in your cluster, it is recommended to leverage them to scrape the operator metrics and provision the webhook certificate respectively:

    Refer to the section for detailed information about the supported values.

    hashtag
    Long-Term Support Versions

    MariaDB Enterprise Kubernetes Operator provides stable Long-Term Support (LTS) versions.

    Version
    Supported Kubernetes Versions
    Description

    If you instead wish to install a specific LTS release, you can do:

    Where: --version "25.10.*" installs the most recent available release within the 25.10 series.

    hashtag
    Deployment modes

    The following deployment modes are supported:

    hashtag
    Cluster-wide

    The operator watches CRDs in all namespaces and requires cluster-wide RBAC permissions to operate. This is the default deployment mode, enabled through the default configuration values:

    hashtag
    Single namespace

    By setting currentNamespaceOnly=true, the operator will only watch CRDs within the namespace it is deployed in, and the RBAC permissions will be restricted to that namespace as well:

    hashtag
    Updates

    circle-info

    Make sure you read and understand the before proceeding to update the operator.

    circle-exclamation

    To install a version instead, replace <new-version> with your desired LTS release. For example: --version "25.10.*" will automatically install the latest available patch within that LTS series.

    The first step is upgrading the CRDs that the operator depends on:

    Once updated, you may proceed to upgrade the operator:

    Whenever a new version of the operator is released, an upgrade guide is linked in the if additional upgrade steps are required. Be sure to review the and follow the version-specific upgrade guides accordingly.

    hashtag
    Operator high availability

    The operator can run in high availability mode to prevent downtime during updates and ensure continuous reconciliation of your CRs, even if the node where the operator runs goes down. To achieve this, you need:

    • Multiple replicas

    • Configure Pod anti-affinity

    • Configure PodDisruptionBudgets

    You can achieve this by providing the following values to the helm chart:

    You may similarly configure the webhook and cert-controller components to run in high availability mode by providing the same values to their respective sections. Refer to the for detailed information.

    hashtag
    Uninstalling

    triangle-exclamation

    Uninstalling the mariadb-enterprise-operator-crds Helm chart will remove the CRDs and their associated resources, resulting in downtime.

    First, uninstall the mariadb-enterprise-operator Helm chart. This action will not delete your CRDs, so your operands (i.e. MariaDB and MaxScale) will continue to run without the operator's reconciliation.

    At this point, if you also want to delete CRDs and the operands running in your cluster, you may proceed to uninstall the mariadb-enterprise-operator-crds Helm chart:

    hashtag
    Operator helm values

    Key
    Type
    Default
    Description

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Point-In-Time-Recovery

    Point-in-time recovery (PITR) is a feature that allows you to restore a MariaDB instance to a specific point in time. For achieving this, it combines a full base backup and the binary logs that record all changes made to the database after the backup. This is something fully automated by operator, covering archival and restoration up to a specific time, ensuring business continuity and reduced RTO and RPO.

    hashtag
    Supported MariaDB versions and topologies

    The operator uses to replay binary logs, in particular, it filters binlog events by passing a GTID to mariadb-binlog via the flag. This is only supported by MariaDB server 10.8 and later, so make sure you are using a compatible MariaDB version.

    cert-controller: Provisions TLS certificates for the webhook. You can see it as a minimal cert-managerarrow-up-right that is intended to work only with the webhook. It is optional and can be replaced by cert-manager.

    certController.certLifetime

    string

    "2160h"

    Certificate lifetime.

    certController.enabled

    bool

    true

    Specifies whether the cert-controller should be created.

    certController.extraArgs

    list

    []

    Extra arguments to be passed to the cert-controller entrypoint

    certController.extraVolumeMounts

    list

    []

    Extra volumes to mount to cert-controller container

    certController.extraVolumes

    list

    []

    Extra volumes to pass to cert-controller Pod

    certController.ha.enabled

    bool

    false

    Enable high availability

    certController.ha.replicas

    int

    3

    Number of replicas

    certController.image.pullPolicy

    string

    "IfNotPresent"

    certController.image.repository

    string

    "docker.mariadb.com/mariadb-enterprise-operator"

    certController.image.tag

    string

    ""

    Image tag to use. By default the chart appVersion is used

    certController.imagePullSecrets

    list

    []

    certController.nodeSelector

    object

    {}

    Node selectors to add to cert-controller container

    certController.pdb.enabled

    bool

    false

    Enable PodDisruptionBudget for the cert-controller.

    certController.pdb.maxUnavailable

    int

    1

    Maximum number of unavailable Pods. You may also give a percentage, like 50%

    certController.podAnnotations

    object

    {}

    Annotations to add to cert-controller Pod

    certController.podSecurityContext

    object

    {}

    Security context to add to cert-controller Pod

    certController.priorityClassName

    string

    ""

    priorityClassName to add to cert-controller container

    certController.privateKeyAlgorithm

    string

    "ECDSA"

    Private key algorithm to be used for the CA and leaf certificate private keys. One of: ECDSA or RSA.

    certController.privateKeySize

    int

    256

    Private key size to be used for the CA and leaf certificate private keys. Supported values: ECDSA(256, 384, 521), RSA(2048, 3072, 4096)

    certController.renewBeforePercentage

    int

    33

    How long before the certificate expiration should the renewal process be triggered. For example, if a certificate is valid for 60 minutes, and renewBeforePercentage=25, cert-controller will begin to attempt to renew the certificate 45 minutes after it was issued (i.e. when there are 15 minutes (25%) remaining until the certificate is no longer valid).

    certController.requeueDuration

    string

    "5m"

    Requeue duration to ensure that certificate gets renewed.

    certController.resources

    object

    {}

    Resources to add to cert-controller container

    certController.securityContext

    object

    {}

    Security context to add to cert-controller Pod

    certController.serviceAccount.annotations

    object

    {}

    Annotations to add to the service account

    certController.serviceAccount.automount

    bool

    true

    Automounts the service account token in all containers of the Pod

    certController.serviceAccount.enabled

    bool

    true

    Specifies whether a service account should be created

    certController.serviceAccount.extraLabels

    object

    {}

    Extra Labels to add to the service account

    certController.serviceAccount.name

    string

    ""

    The name of the service account to use. If not set and enabled is true, a name is generated using the fullname template

    certController.serviceMonitor.additionalLabels

    object

    {}

    Labels to be added to the cert-controller ServiceMonitor

    certController.serviceMonitor.enabled

    bool

    true

    Enable cert-controller ServiceMonitor. Metrics must be enabled

    certController.serviceMonitor.interval

    string

    "30s"

    Interval to scrape metrics

    certController.serviceMonitor.metricRelabelings

    list

    []

    certController.serviceMonitor.relabelings

    list

    []

    certController.serviceMonitor.scrapeTimeout

    string

    "25s"

    Timeout if metrics can't be retrieved in given time interval

    certController.tolerations

    list

    []

    Tolerations to add to cert-controller container

    certController.topologySpreadConstraints

    list

    []

    topologySpreadConstraints to add to cert-controller container

    clusterName

    string

    "cluster.local"

    Cluster DNS name

    config.exporterImage

    string

    "mariadb/mariadb-prometheus-exporter-ubi:1.1.1"

    Default MariaDB exporter image

    config.exporterMaxscaleImage

    string

    "mariadb/maxscale-prometheus-exporter-ubi:1.1.1"

    Default MaxScale exporter image

    config.galeraLibPath

    string

    "/usr/lib64/galera/libgalera_enterprise_smm.so"

    Galera Enterprise library path to be used with Galera

    config.mariadbDefaultVersion

    string

    "11.8"

    Default MariaDB Enterprise version to be used when unable to infer it via image tag

    config.mariadbImage

    string

    "docker.mariadb.com/enterprise-server:11.8.5-2"

    Default MariaDB Enterprise image

    config.mariadbImageName

    string

    "docker.mariadb.com/enterprise-server"

    Default MariaDB Enterprise image name

    config.maxscaleImage

    string

    "docker.mariadb.com/maxscale:25.10.1"

    Default MaxScale Enterprise image

    crds

    object

    {"enabled":false}

    CRDs

    crds.enabled

    bool

    false

    Whether the helm chart should create and update the CRDs. It is false by default, which implies that the CRDs must be managed independently with the mariadb-enterprise-operator-crds helm chart. WARNING This should only be set to true during the initial deployment. If this chart manages the CRDs and is later uninstalled, all MariaDB instances will be DELETED.

    currentNamespaceOnly

    bool

    false

    Whether the operator should watch CRDs only in its own namespace or not.

    extraArgs

    list

    []

    Extra arguments to be passed to the controller entrypoint

    extraEnv

    list

    []

    Extra environment variables to be passed to the controller

    extraEnvFrom

    list

    []

    Extra environment variables from preexiting ConfigMap / Secret objects used by the controller using envFrom

    extraVolumeMounts

    list

    []

    Extra volumes to mount to the container.

    extraVolumes

    list

    []

    Extra volumes to pass to pod.

    fullnameOverride

    string

    ""

    ha.enabled

    bool

    false

    Enable high availability of the controller. If you enable it we recommend to set affinity and pdb

    ha.replicas

    int

    3

    Number of replicas

    image.pullPolicy

    string

    "IfNotPresent"

    image.repository

    string

    "docker.mariadb.com/mariadb-enterprise-operator"

    image.tag

    string

    ""

    Image tag to use. By default the chart appVersion is used

    imagePullSecrets

    list

    []

    logLevel

    string

    "INFO"

    Controller log level

    metrics.enabled

    bool

    false

    Enable operator internal metrics. Prometheus must be installed in the cluster

    metrics.serviceMonitor.additionalLabels

    object

    {}

    Labels to be added to the controller ServiceMonitor

    metrics.serviceMonitor.enabled

    bool

    true

    Enable controller ServiceMonitor

    metrics.serviceMonitor.interval

    string

    "30s"

    Interval to scrape metrics

    metrics.serviceMonitor.metricRelabelings

    list

    []

    metrics.serviceMonitor.relabelings

    list

    []

    metrics.serviceMonitor.scrapeTimeout

    string

    "25s"

    Timeout if metrics can't be retrieved in given time interval

    nameOverride

    string

    ""

    nodeSelector

    object

    {}

    Node selectors to add to controller Pod

    pdb.enabled

    bool

    false

    Enable PodDisruptionBudget for the controller.

    pdb.maxUnavailable

    int

    1

    Maximum number of unavailable Pods. You may also give a percentage, like 50%

    podAnnotations

    object

    {}

    Annotations to add to controller Pod

    podSecurityContext

    object

    {}

    Security context to add to controller Pod

    pprof.enabled

    bool

    false

    Enable the pprof HTTP server.

    pprof.port

    int

    6060

    The port where the pprof HTTP server listens.

    priorityClassName

    string

    ""

    priorityClassName to add to controller Pod

    rbac.aggregation.enabled

    bool

    true

    Specifies whether the cluster roles aggregate to view and edit predefinied roles

    rbac.enabled

    bool

    true

    Specifies whether RBAC resources should be created

    resources

    object

    {}

    Resources to add to controller container

    securityContext

    object

    {}

    Security context to add to controller container

    serviceAccount.annotations

    object

    {}

    Annotations to add to the service account

    serviceAccount.automount

    bool

    true

    Automounts the service account token in all containers of the Pod

    serviceAccount.enabled

    bool

    true

    Specifies whether a service account should be created

    serviceAccount.extraLabels

    object

    {}

    Extra Labels to add to the service account

    serviceAccount.name

    string

    ""

    The name of the service account to use. If not set and enabled is true, a name is generated using the fullname template

    tolerations

    list

    []

    Tolerations to add to controller Pod

    topologySpreadConstraints

    list

    []

    topologySpreadConstraints to add to controller Pod

    webhook.affinity

    object

    {}

    Affinity to add to webhook Pod

    webhook.annotations

    object

    {}

    Annotations for webhook configurations.

    webhook.cert.ca.key

    string

    ""

    File under 'ca.path' that contains the full CA trust chain.

    webhook.cert.ca.path

    string

    ""

    Path that contains the full CA trust chain.

    webhook.cert.certManager.duration

    string

    ""

    Duration to be used in the Certificate resource,

    webhook.cert.certManager.enabled

    bool

    false

    Whether to use cert-manager to issue and rotate the certificate. If set to false, mariadb-enterprise-operator's cert-controller will be used instead.

    webhook.cert.certManager.issuerRef

    object

    {}

    Issuer reference to be used in the Certificate resource. If not provided, a self-signed issuer will be used.

    webhook.cert.certManager.privateKeyAlgorithm

    string

    "ECDSA"

    Private key algorithm to be used for the CA and leaf certificate private keys. One of: ECDSA or RSA.

    webhook.cert.certManager.privateKeySize

    int

    256

    Private key size to be used for the CA and leaf certificate private keys. Supported values: ECDSA(256, 384, 521), RSA(2048, 3072, 4096)

    webhook.cert.certManager.renewBefore

    string

    ""

    Renew before duration to be used in the Certificate resource.

    webhook.cert.certManager.revisionHistoryLimit

    int

    3

    The maximum number of CertificateRequest revisions that are maintained in the Certificate’s history.

    webhook.cert.path

    string

    "/tmp/k8s-webhook-server/serving-certs"

    Path where the certificate will be mounted. 'tls.crt' and 'tls.key' certificates files should be under this path.

    webhook.cert.secretAnnotations

    object

    {}

    Annotatioms to be added to webhook TLS secret.

    webhook.cert.secretLabels

    object

    {}

    Labels to be added to webhook TLS secret.

    webhook.enabled

    bool

    true

    Specifies whether the webhook should be created.

    webhook.extraArgs

    list

    []

    Extra arguments to be passed to the webhook entrypoint

    webhook.extraVolumeMounts

    list

    []

    Extra volumes to mount to webhook container

    webhook.extraVolumes

    list

    []

    Extra volumes to pass to webhook Pod

    webhook.ha.enabled

    bool

    false

    Enable high availability

    webhook.ha.replicas

    int

    3

    Number of replicas

    webhook.hostNetwork

    bool

    false

    Expose the webhook server in the host network

    webhook.image.pullPolicy

    string

    "IfNotPresent"

    webhook.image.repository

    string

    "docker.mariadb.com/mariadb-enterprise-operator"

    webhook.image.tag

    string

    ""

    Image tag to use. By default the chart appVersion is used

    webhook.imagePullSecrets

    list

    []

    webhook.nodeSelector

    object

    {}

    Node selectors to add to webhook Pod

    webhook.pdb.enabled

    bool

    false

    Enable PodDisruptionBudget for the webhook.

    webhook.pdb.maxUnavailable

    int

    1

    Maximum number of unavailable Pods. You may also give a percentage, like 50%

    webhook.podAnnotations

    object

    {}

    Annotations to add to webhook Pod

    webhook.podSecurityContext

    object

    {}

    Security context to add to webhook Pod

    webhook.port

    int

    9443

    Port to be used by the webhook server

    webhook.priorityClassName

    string

    ""

    priorityClassName to add to webhook Pod

    webhook.resources

    object

    {}

    Resources to add to webhook container

    webhook.securityContext

    object

    {}

    Security context to add to webhook container

    webhook.serviceAccount.annotations

    object

    {}

    Annotations to add to the service account

    webhook.serviceAccount.automount

    bool

    true

    Automounts the service account token in all containers of the Pod

    webhook.serviceAccount.enabled

    bool

    true

    Specifies whether a service account should be created

    webhook.serviceAccount.extraLabels

    object

    {}

    Extra Labels to add to the service account

    webhook.serviceAccount.name

    string

    ""

    The name of the service account to use. If not set and enabled is true, a name is generated using the fullname template

    webhook.serviceMonitor.additionalLabels

    object

    {}

    Labels to be added to the webhook ServiceMonitor

    webhook.serviceMonitor.enabled

    bool

    true

    Enable webhook ServiceMonitor. Metrics must be enabled

    webhook.serviceMonitor.interval

    string

    "30s"

    Interval to scrape metrics

    webhook.serviceMonitor.metricRelabelings

    list

    []

    webhook.serviceMonitor.relabelings

    list

    []

    webhook.serviceMonitor.scrapeTimeout

    string

    "25s"

    Timeout if metrics can't be retrieved in given time interval

    webhook.tolerations

    list

    []

    Tolerations to add to webhook Pod

    webhook.topologySpreadConstraints

    list

    []

    topologySpreadConstraints to add to webhook Pod

    25.10

    >=1.32.0-0 <= 1.34.0-0

    LTS 25.10. It was tested to work up to kubernetes v1.34.

    affinity

    object

    {}

    Affinity to add to controller Pod

    certController.affinity

    object

    {}

    Affinity to add to cert-controller container

    certController.caLifetime

    string

    "26280h"

    CustomResourceDefinitionsarrow-up-right
    operator helm values
    limitations when it comes to manage CRDsarrow-up-right
    as recommended by the official Helm documentationarrow-up-right
    customer credentials
    prometheus operatorarrow-up-right
    cert-managerarrow-up-right
    operator helm values
    updates documentation
    Long-Term Support (LTS)
    operator helm values
    spinner

    CA certificate lifetime. It must be greater than certLifetime.

    Regarding supported MariaB topologies, at the moment, binary log archiving and point-in-time recovery are only supported by the asynchronous replication topology, which already relies on the binary logs for replication. Galera and standalone topologies will be supported in upcoming releases.

    hashtag
    Storage types

    Full base backups and binary logs can be stored in the following object storage types:

    • S3 compatible storage: Such as AWS S3arrow-up-right or Minioarrow-up-right.

    • Azure Blob Storagearrow-up-right.

    For additional details on configuring storage, please refer to the storage types section in the physical backup documentation, same settings are applicable to the PointInTimeRecovery object.

    hashtag
    Configuration

    To be able to perform a point-in-time restoration, a physical backup should be configured as full base backup. For example, you can configure a nightly backup:

    Refer to the full base backup section for additional details on how to configure the full base backup.

    Next step is configuring common aspects of both binary log archiving and point-in-time restoration by defining a PointInTimeRecovery object:

    • physicalBackupRef: It is a reference to the PhysicalBackup resource used as full base backup. See full base backup.

    • storage: Object storage configuration for binary logs. See storage types.

    • compression: Algorithm to be used for compressing binary logs. It is disabled by default. See .

    • archiveTimeout: Maximum duration for the binary log archival. If exceeded, agent will return an error and archival will be retried in the next archive cycle. Defaults to 1h.

    • archiveInterval: Interval at which the binary logs will be archived. Defaults to 10m. See for additional details.

    • maxParallel: Maximum number of workers that can be used for parallel binary log archival and restoration. Defaults to 1. See .

    • maxRetention: Maximum retention duration for binary logs. By default, binary logs are not automatically deleted. See .

    • strictMode: Controls the behavior when a point-in-time restoration cannot reach the exact target time. It is disabled by default. See .

    With this configuration in place, you can enable binary log archival in a MariaDB instance by setting a reference to the PointInTimeRecovery object:

    Once a full base backup has been completed and the binary logs have been archived, you can perform a point-in-time restoration. For example, you can create a new MariaDB instance with the following configuration:

    Refer to the point-in-time restoration section for additional details.

    hashtag
    Full base backup

    To enable point-in-time recovery, a PhysicalBackup resource should be configured as full base backup. The backup should be a complete snapshot of the database at a specific point in time, and it will serve as the starting point for replaying the binary logs. Any of the supported backup strategies can be used as full base backup, as all of them provide a consistent snapshot of the database and a starting GTID position.

    It is very important to note that a full physical backups should be completed before a point-in-time restoration can be performed. This is something that the operator accounts for when computing the last recoverable time.

    To further expand the last recoverable time, it is recommended to take physical backups after the primary Pod has changed. This can be automated by setting schedule.onPrimaryChange, as documented in the physical backup docs:

    Alternatively, you can schedule an on-demand physical backup or rely on the cron scheduling for doing so:

    The backup taken in the new primary will establish a baseline for a new binlog timeline, which will be expanded when new binary logs are archived.

    hashtag
    Archival

    The mariadb-enterprise-operator sidecar agent will periodically check for new binary logs and archive them to the configured object storage. The archival process is controlled by the archiveInterval and archiveTimeout settings in the PointInTimeRecovery configuration, which determine how often the archival process runs and how long it can take before it is considered failed.

    The archival process is performed on the primary Pod in the asynchronous replication topology, you may check the logs of the agent sidecar container, Kubernetes events and status of the MariaDB objects to monitor the current status of the archival process:

    There are a couple of important considerations regarding binary log archival:

    • The archival process should start from a clean state, which means that the object storage should be empty at the time of the first archival.

    • It is not recommended to set archiveInterval to a very low value (< 1m), as it can lead to increased load on the database Pod and the storage system.

    • If the archival process fails (e.g., due to network issues or storage unavailability), it will be retried in the next archive cycle.

    • If server variable is configured, it should be set to a value higher than the archiveInterval to prevent automatic deletion of binary logs before they are archived.

    • Manually executing command on the database is not recommended, as it can lead to inconsistencies between the database and the archived binary logs.

    • Manually executing command on the database should be compatible with the archival process, it will force the active binary log to be closed and will be archived by the agent in the next archive cycle.

    hashtag
    Binary log size

    The server has a default max_binlog_sizearrow-up-right of 1GB, which means that a new binary log file will be created once the current one reaches that size. This is sensible default value for most cases, but it can be adjusted based on the data volume in order to enable a faster archival, and therefore a reduced RPO:

    Environment
    Recommended Size
    Rationale

    Low Traffic

    128MB

    Keeps file size minimal for slow-growing logs.

    Standard

    256MB

    Balances rotation frequency with server overhead.

    High Throughput

    512MB - 1GB

    Reduces the contention caused by frequent rotations in write-heavy environments.

    The smaller the binlog file size, the more frequently the files will be rotated and archived, which can lead to increased load on the database Pod and the storage system. On the other hand, setting a very high binlog file size can lead to longer archival times and increased RPO.

    Refer to the configuration documentation for instructions on how to set the max_binlog_size server variable in the MariaDB instance.

    hashtag
    Compression

    In order to reduce storage usage and save bandwidth during archival and restoration, the operator supports compressing the binary log files. Compression is enabled by setting the compression field in the PointInTimeRecovery configuration:

    The supported compression algorithms are:

    • bzip2: Good compression ratio, but slower compression/decompression speed compared to gzip.

    • gzip: Good compression/decompression speed, but worse compression ratio compared to bzip2.

    • none: No compression.

    Compression is disabled by default, and the are some important considerations before enabling it:

    • Compression is immutable, which means that once configured and binary logs have been archived with a specific algorithm, it cannot be changed. This also applies to restoration, the same compression algorithm should be configured as the one used for archival.

    • Although it saves storage space and bandwidth, the restoration process may take longer when compression is enabled, leading to an increased RTO. This can migrated by enabling parallelization.

    hashtag
    Server-Side Encryption with Customer-Provided Keys (SSE-C) For S3

    When using S3-compatible storage, you can enable server-side encryption using your own encryption key (SSE-C) by providing a reference to a Secret containing a 32-byte (256-bit) key encoded in base64:

    circle-exclamation

    When using SSE-C, you are responsible for managing and securely storing the encryption key. If you lose the key, you will not be able to decrypt your binary logs. Ensure you have proper key management procedures in place.

    circle-info

    When replaying SSE-C encrypted binary logs via bootstrapFrom, the same key must be provided in the S3 configuration.

    hashtag
    Parallelization

    Several tasks during both archival an restoration process can take a significant amount of time, specially when managing large data volumes. These tasks include compressing and uploading binary logs during archival, and downloading and decompressing binary logs during restoration. This can lead to longer archival and restoration times, which can impact the RTO.

    To mitigate this, the operator supports parallelization of these tasks by using multiple workers. The maximum number of workers can be configured via the maxParallel field in the PointInTimeRecovery configuration:

    This will create up to 4 workers, each of them responsible for the operations related to a single binary log, which means that up to 4 binary logs can be processed in parallel. This can significantly reduce the archival and restoration times, specially when compression is enabled.

    Parallelization is disabled by default (maxParallel: 1), and there are some important considerations to be taken into account when enabling it:

    • During archival, the workers will be spawn in the agent sidecar container, sharing storage with the primary database Pod. Using an elevated number of workers can exhaust IOPS and/or CPU resources of the primary Pod, which can impact the performance of the database.

    • During both archival and restoration, using an elevated number of workers can saturate the network bandwidth when pulling/pushing multiple binary logs in parallel, something that can degrade the performance of the database.

    hashtag
    Retention policy

    Binary logs can grow significantly in size, especially in write-heavy environments, which can lead to increased storage costs. To mitigate this, the operator supports automatic purging of binary logs based on a retention policy defined by the maxRetention field in the PointInTimeRecovery configuration:

    The binary logs that exceed the defined retention will be automatically deleted from the object storage after each archival cycle.

    By default, binary logs are never purged from object storage, and there are few considerations regarding configuring a retention policy:

    • The date of the last event in the binary logs is used to determine its age, and therefore whether it should be purged or not.

    • The maxRetention field should not be set to a value lower than the archiveInterval, as it can lead to situations where binary logs are purged before they can be archived.

    hashtag
    Binlog inventory

    The operator maintains an inventory of the archived binary logs in an index.yaml file located at the root of the configured object storage. This file contains a list of all the archived binary logs per each server, along with their GTIDs and other metadata utilized internally. Here is an example of the index.yaml file:

    This file is used internally by the operator to keep track of the archived binary logs, and it is updated after each successful archival. It should not be modified manually, as it can lead to inconsistencies between the actual archived binary logs and the inventory.

    When it comes to point-in-time restoration, this file serves as a source of truth to compute the binlog timeline and the last recoverable time.

    hashtag
    Binlog timeline and last recoverable time

    Taking into account the last completed physical backup GTID and the archived binlogs in the inventory, the operator computes a timeline of binary logs that can replayed and its corresponding last recoverable time. The last recoverable time is the latest timestamp that the MariaDB instance can be restored to. This information is crucial for understanding the RPO of the system and for making informed decisions during a recovery process.

    You can easily check the last recoverable time by looking at the status of the PointInTimeRecovery object:

    Then, you may provide exactly this timestamp, or an earlier one, as target recovery time when bootstrapping a new MariaDB instance, as described in the point-in-time restoration section.

    hashtag
    Point-in-time restoration

    In order to perform a point-in-time restoration, you can create a new MariaDB instance with a reference to the PointInTimeRecovery object in the bootstrapFrom field, along with the targetRecoveryTime field indicating the desired point-in-time to restore to.

    For setting the targetRecoveryTime, it is recommended to check the last recoverable time first in the PointInTimeRecovery object:

    • pointInTimeRecoveryRef: Reference to the PointInTimeRecovery object that contains the configuration for the point-in-time recovery.

    • targetRecoveryTime: The desired point in time to restore to. It should be in RFC3339 format. If not provided, the current time will be used as target recovery time, which means restoring up to the last recoverable time.

    • restoreJob: Compute resources and metadata configuration for the restoration job. To reduce RTO, it is recommended to properly tune compute resources.

    • logLevel: Log level for the operator container, part of the restoration job.

    The restoration process will match the closest physical backup before or at the targetRecoveryTime, and then it will replay the archived binary logs from the backup GTID position up until the targetRecoveryTime:

    As you can see, the restoration process includes the following steps:

    1. Perform a rolling restore of the full base backup, one Pod at a time.

    2. Configure replication in the MariaDB instance.

    3. Get the base backup GTID, to be used as the starting point for replaying the binary logs.

    4. Schedule the point-in-time restoration job, which will:

      1. Build the based on the base backup GTID and the .

      2. Pull the binary logs in the timeline into a .

      3. Replay the binary logs using from the GTID position of the base backup up to the targetRecoveryTime

    After having completed the restoration process, the following status conditions will be available for you to inspect the restoration process:

    hashtag
    Strict mode

    The strict mode controls whether the target recovery time provided during the bootstrap process should be strictly met or not. This is configured via the strictMode field in the PointInTimeRecovery configuration, and it is disabled by default:

    When strict mode is enabled (recommended), if the target recovery time cannot be met, the initialization process will return an error early, and the MariaDB instance will not be created. This can happen, for example, if the target recovery time is later than the last recoverable time. Let's assume strict mode is enabled and the last recoverable time is:

    If we attempt to provision the following MariaDB instance:

    The following errors will be returned, as the target recovery time 2026-02-28T20:10:42Z is later than the last recoverable time 2026-02-27T20:10:42Z:

    When strict mode is disabled (default), and the target recovery time cannot be met, the MariaDB provisioning will proceed and the last recoverable time will be used. This would mean that, the MariaDB instance will be provisioned with a recovery time of 2026-02-27T20:10:42Z, which is the last recoverable time:

    After setting strictMode=false, if we attempt to create the same MariaDB instance as before, it will be successfully provisioned, but with a recovery time of 2026-02-27T20:10:42Z will be used instead of the requested 2026-02-28T20:10:42Z.

    It is important to note that the last recoverable time is stored in the status field of the PointInTimeRecovery object, therefore if this object is deleted and recreated, the last recoverable time metadata will be lost, and it will not be available until recomputed. When it comes to restore, this implies that the error will be returned later in the process, when computing the binary log timeline, but the strict mode behaviour still applies. This is the error returned for that scenario:

    hashtag
    Staging storage

    The operator uses a staging area to temporarily store the binary logs during the restoration process. By default, the staging area is an emptyDir volumearrow-up-right attached to the restoration job, which means that the binary logs are kept in the node storage where the job has been scheduled. This may not be suitable for large binary logs, as it can lead to exhausting the node's storage, resulting the restoration process to fail and potentially impacting other workloads running in the same node.

    You are able to configure an alternative staging area using the stagingStorage field under the bootstrapFrom section in the MariaDB resource:

    This will provision a PVC and attach it to the restoration job to be used as staging area.

    hashtag
    Limitations

    • A PointInTimeRecovery object can only be referred by a single MariaDB object via the pointInTimeRecoveryRef field.

    • A combination object storage bucket + prefix can only be utilizied by a single MariaDB instance to archive binary logs.

    hashtag
    Troubleshooting

    The operator tracks the current archival status under the MariaDB status subresource. This status is updated after each archival cycle, and it contains metadata about the binary logs that have been archived, along with other useful information for troubleshooting:

    Additionally, also under the status subresource, the operator sets status conditions whenever a specific state of the binlog archival or point-in-time restoration process is reached:

    The operator also emits Kubernetes events during both archival and restoration process, to either report an outstanding event or error:

    hashtag
    Common errors

    Unable to start archival process

    The following error will be returned if the archival process is configured pointing to a non-empty object storage, as the operator expects to start from a clean state:

    To solve this, you can update the PointInTimeRecovery configuration pointing to another object storage bucket or prefix that is empty:

    After updating the PointInTimeRecovery configuration, the error will be cleared in the next archival cycle, and a new archival operation will be attempted.

    Alternatively, you can also consider deleting the existing binary logs and index.yaml inventory file, only after having double checked that they are not needed for recovery.

    Target recovery time is after latest recoverable time

    This error is returned in the MariaDB init process, when the targetRecoveryTime provided to bootstrap is later than the last recoverable time reported by the PointInTimeRecovery status.

    For example, if you have configured the bootstrapFrom.targetRecoveryTime field with the value 2026-02-28T20:10:42Z, the following error will be returned:

    There are two ways to solve this issue:

    • Update the targetRecoveryTime in the MariaDB resource to be earlier than or equal to the last recoverable time, which in this case is 2026-02-27T20:10:42Z.

    • Disable strictMode in the PointInTimeRecovery configuration, allowing to restore up until the latest recoverable time, in this case 2026-02-27T20:10:42Z.

    Invalid binary log timeline: error getting binlog timeline between GTID and target time: timeline did not reach target time

    This error is returned when computing the binary log timeline during the restoration process, and it means that the operator could not build a timeline that reaches the targetRecoveryTime provided in the bootstrapFrom field of the MariaDB resource.

    For example, if you have the following binary log inventory:

    And your targetRecoveryTime is 2026-02-28T20:10:42Z, the following error will be returned:

    There are two ways to solve this issue:

    • Update the targetRecoveryTime in the MariaDB resource to be earlier than or equal to the last recoverable time, which in this case is 2026-02-27T16:04:15Z.

    • Disable strictMode in the PointInTimeRecovery configuration, allowing to restore up until the latest recoverable time, in this case 2026-02-27T16:04:15Z.

    mariadb-binlogarrow-up-right
    --start-positionarrow-up-right
    helm repo add mariadb-enterprise-operator https://operator.mariadb.com
    helm install mariadb-enterprise-operator-crds mariadb-enterprise-operator/mariadb-enterprise-operator-crds
    imagePullSecrets:
      - name: mariadb-enterprise
    
    webhook:
      imagePullSecrets:
          - name: mariadb-enterprise
    
    certController:
      imagePullSecrets:
        - name: mariadb-enterprise
    helm repo add mariadb-enterprise-operator https://operator.mariadb.com
    helm install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator \
      -f values.yaml
    helm repo add mariadb-enterprise-operator https://operator.mariadb.com
    helm install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator \
      -f values.yaml \
      --set metrics.enabled=true --set webhook.cert.certManager.enabled=true
    helm install --version "25.10.*" mariadb-enterprise-operator-crds mariadb-enterprise-operator/mariadb-enterprise-operator-crds
    helm install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator \
      -f values.yaml \
      --version "25.10.*"
    helm repo add mariadb-enterprise-operator https://operator.mariadb.com
    helm install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator
    helm repo add mariadb-enterprise-operator https://operator.mariadb.com
    helm install mariadb-enterprise-operator \
      -n databases --create-namespace \
      -f values.yaml \
      --set currentNamespaceOnly=true \
      mariadb-enterprise-operator/mariadb-enterprise-operator
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator-crds \
      --version <new-version> \
      mariadb-enterprise-operator/mariadb-enterprise-operator-crds
    helm repo update mariadb-enterprise-operator
    helm upgrade --install mariadb-enterprise-operator \
      --version <new-version> \
      mariadb-enterprise-operator/mariadb-enterprise-operator
    ha:
      enabled: true
      replicas: 3
    
    affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: app.kubernetes.io/name
              operator: In
              values:
              - mariadb-enterprise-operator
            - key: app.kubernetes.io/instance
              operator: In
              values:
              - mariadb-enterprise-operator
          topologyKey: kubernetes.io/hostname
    
    pdb:
      enabled: true
      maxUnavailable: 1
    helm uninstall mariadb-enterprise-operator
    helm uninstall mariadb-enterprise-operator-crds
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup-daily
    spec:
      mariaDbRef:
        name: mariadb-repl
      schedule:
        cron: "0 0 * * *"
        suspend: false
        immediate: true
      compression: bzip2
      maxRetention: 720h 
      storage:
        s3:
          bucket: physicalbackups
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          region: us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      physicalBackupRef:
        name: physicalbackup-daily
      storage:
        s3:
          bucket: binlogs
          prefix: mariadb
          endpoint: minio.minio.svc.cluster.local:9000
          region: us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
      compression: gzip
      archiveTimeout: 1h
      archiveInterval: 1m
      maxParallel: 4
      maxRetention: 720h # 30 days
      strictMode: false
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      storage:
        size: 1Gi
      replicas: 3
      replication:
        enabled: true
      # sidecar agent will archive binary logs to the configured storage.
      pointInTimeRecoveryRef:
        name: pitr
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      storage:
        size: 1Gi
      replicas: 3
      replication:
        enabled: true
      # bootstrap the instance from PITR: restore closest physical backup and replay binary logs up to targetRecoveryTime.
      bootstrapFrom:
        pointInTimeRecoveryRef:
          name: pitr
        targetRecoveryTime: 2026-02-20T18:00:04Z
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      schedule:
        onPrimaryChange: true 
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PhysicalBackup
    metadata:
      name: physicalbackup
    spec:
      schedule:
        cron: "0 0 * * *"
        onDemand: "1"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      archiveTimeout: 1h
      archiveInterval: 1m
    kubectl logs -l enterprise.mariadb.com/role=primary -c agent --tail 20
    {"level":"info","ts":1772208238.0152433,"logger":"binlog-archival","msg":"Archiving binary logs"}
    {"level":"info","ts":1772208238.437027,"logger":"binlog-archival.uploader","msg":"Uploading binary log","binlog":"mariadb-repl-bin.000003","object":"server-10/mariadb-repl-bin.000003.gz","start-time":"2026-02-27T16:03:58Z"}
    {"level":"info","ts":1772208238.4371545,"logger":"binlog-archival.uploader","msg":"Compressing binary log","binlog":"mariadb-repl-bin.000003","object":"server-10/mariadb-repl-bin.000003.gz","start-time":"2026-02-27T16:03:58Z"}
    {"level":"info","ts":1772208260.8291402,"logger":"binlog-archival.uploader","msg":"Binary log uploaded","binlog":"mariadb-repl-bin.000003","object":"server-10/mariadb-repl-bin.000003.gz","start-time":"2026-02-27T16:03:58Z","total-time":"22.392211226s"}
    {"level":"info","ts":1772208260.8621385,"logger":"binlog-archival","msg":"Binary log mariadb-repl-bin.000003 archived"}
    {"level":"info","ts":1772208260.8622391,"logger":"binlog-archival","msg":"Binlog archival done"}
    {"level":"info","ts":1772208261.2485638,"logger":"binlog-archival","msg":"Purging binary logs","max-retention":"720h0m0s"}
    {"level":"info","ts":1772208261.2599053,"logger":"binlog-archival","msg":"Binary logs purged","max-retention":"720h0m0s"}
    {"level":"info","ts":1772208268.0053742,"logger":"binlog-archival","msg":"Archiving binary logs"}
    {"level":"info","ts":1772208268.0907545,"logger":"binlog-archival.uploader","msg":"Uploading binary log","binlog":"mariadb-repl-bin.000004","object":"server-10/mariadb-repl-bin.000004.gz","start-time":"2026-02-27T16:04:28Z"}
    {"level":"info","ts":1772208268.0908031,"logger":"binlog-archival.uploader","msg":"Compressing binary log","binlog":"mariadb-repl-bin.000004","object":"server-10/mariadb-repl-bin.000004.gz","start-time":"2026-02-27T16:04:28Z"}
    {"level":"info","ts":1772208279.7613757,"logger":"binlog-archival.uploader","msg":"Binary log uploaded","binlog":"mariadb-repl-bin.000004","object":"server-10/mariadb-repl-bin.000004.gz","start-time":"2026-02-27T16:04:28Z","total-time":"11.670631252s"}
    {"level":"info","ts":1772208279.7794006,"logger":"binlog-archival","msg":"Binary log mariadb-repl-bin.000004 archived"}
    {"level":"info","ts":1772208279.7794523,"logger":"binlog-archival","msg":"Binlog archival done"}
    
    kubectl get events --field-selector involvedObject.name=mariadb-repl
    LAST SEEN   TYPE     REASON           OBJECT                 MESSAGE
    4m3s        Normal   BinlogArchived   MariaDB/mariadb-repl   Binary log mariadb-repl-bin.000001 archived
    2m36s       Normal   BinlogArchived   MariaDB/mariadb-repl   Binary log mariadb-repl-bin.000002 archived
    2m11s       Normal   BinlogArchived   MariaDB/mariadb-repl   Binary log mariadb-repl-bin.000003 archived
    112s        Normal   BinlogArchived   MariaDB/mariadb-repl   Binary log mariadb-repl-bin.000004 archived
    
    kubectl get mariadb mariadb-repl -o jsonpath='{.status.pointInTimeRecovery}' | jq
    {
      "lastArchivedBinaryLog": "mariadb-repl-bin.000004",
      "lastArchivedGtid": "0-10-1559",
      "lastArchivedPosition": 268506819,
      "lastArchivedTime": "2026-02-27T16:04:15Z",
      "serverId": 10,
      "storageReadyForArchival": true
    }
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      compression: gzip
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: ssec-key
    stringData:
      # 32-byte key encoded in base64 (use: openssl rand -base64 32)
      customer-key: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      physicalBackupRef:
        name: physicalbackup-daily
      storage:
        s3:
          bucket: binlogs
          endpoint: minio.minio.svc.cluster.local:9000
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
          ssec:
            customerKeySecretKeyRef:
              name: ssec-key
              key: customer-key
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      maxParallel: 4
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      maxRetention: 720h # 30 days
    apiVersion: v1
    binlogs:
      server-10:
      ...
      - binlogFilename: mariadb-repl-bin.000003
        binlogVersion: 4
        firstGtid: 0-10-527
        firstTime: "2026-02-27T16:03:22Z"
        lastGtid: 0-10-1041
        lastTime: "2026-02-27T16:03:50Z"
        logPosition: 268493636
        previousGtids:
        - 0-10-526
        rotateEvent: true
        serverId: 10
        serverVersion: 11.8.5-2-MariaDB-enterprise-log
        stopEvent: false
      - binlogFilename: mariadb-repl-bin.000004
        binlogVersion: 4
        firstGtid: 0-10-1042
        firstTime: "2026-02-27T16:03:50Z"
        lastGtid: 0-10-1559
        lastTime: "2026-02-27T16:04:15Z"
        logPosition: 268506819
        previousGtids:
        - 0-10-1041
        rotateEvent: true
        serverId: 10
        serverVersion: 11.8.5-2-MariaDB-enterprise-log
        stopEvent: false
    kubectl get pitr
    NAME   PHYSICAL BACKUP        LAST RECOVERABLE TIME   STRICT MODE   AGE
    pitr   physicalbackup-daily   2026-02-27T20:10:42Z    true          43h
    kubectl get pitr
    NAME   PHYSICAL BACKUP        LAST RECOVERABLE TIME   STRICT MODE   AGE
    pitr   physicalbackup-daily   2026-02-27T20:10:42Z    true          43h
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
      storage:
        size: 1Gi
      replicas: 3
      replication:
        enabled: true
      # bootstrap the instance from PITR: restore closest physical backup and replay binary logs up to targetRecoveryTime.
      bootstrapFrom:
        pointInTimeRecoveryRef:
          name: pitr
        targetRecoveryTime: 2026-02-20T18:00:04Z
        restoreJob:
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              memory: 1Gi
        logLevel: debug
    kubectl apply -f mariadb_replication_pitr_s3.yaml
    mariadb.enterprise.mariadb.com/mariadb-repl created
    
    kubectl get mariadb
    NAME           READY   STATUS         PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Initializing   mariadb-repl-0   ReplicasFirstPrimaryLast   40s
    
    kubectl get pods
    NAME                           READY   STATUS      RESTARTS       AGE
    mariadb-repl-0                 2/2     Running     0              36s
    mariadb-repl-0-pb-init-gp4gl   0/1     Completed   0              45s
    mariadb-repl-1                 1/2     Running     0              15s
    mariadb-repl-1-pb-init-z44d7   0/1     Completed   0              27s
    mariadb-repl-2-pb-init-qmkcv   0/1     Completed   0              8s
    
    kubectl get mariadb
    NAME           READY   STATUS              PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Replaying binlogs   mariadb-repl-0   ReplicasFirstPrimaryLast   93s
    
    kubectl get pods
    NAME                          READY   STATUS      RESTARTS       AGE
    mariadb-repl-0                2/2     Running     0              84s
    mariadb-repl-1                2/2     Running     0              58s
    mariadb-repl-2                2/2     Running     0              38s
    mariadb-repl-pitr-pj6fr       0/1     Init:0/1    0              8s
    
    kubectl logs mariadb-repl-pitr-pj6fr -c mariadb-enterprise-operator
    {"level":"info","ts":1772294432.9904623,"msg":"Starting point-in-time recovery"}
    {"level":"info","ts":1772294432.9907954,"msg":"Getting binlog index from object storage"}
    {"level":"info","ts":1772294432.9951825,"msg":"Building binlog timeline"}
    {"level":"info","ts":1772294432.9952044,"logger":"binlog-timeline","msg":"Building binlog timeline","num-binlogs":0,"start-gtid":"0-10-4","target-time":"2026-02-27T21:10:42+01:00","strict-mode":false,"server":"server-10"}
    {"level":"info","ts":1772294432.9952517,"msg":"Got binlog timeline","path":["server-10/mariadb-repl-bin.000002","server-10/mariadb-repl-bin.000003","server-10/mariadb-repl-bin.000004","server-10/mariadb-repl-bin.000005"]}
    {"level":"info","ts":1772294432.9952574,"msg":"Pulling binlogs into staging area","staging-path":"/binlogs","compression":"gzip"}
    {"level":"info","ts":1772294432.9952772,"logger":"storage","msg":"Pulling binlog","binlog":"server-10/mariadb-repl-bin.000005","start-time":"2026-02-28T16:00:32Z"}
    {"level":"info","ts":1772294432.9967375,"logger":"storage","msg":"Decompressing binlog","binlog":"server-10/mariadb-repl-bin.000005","start-time":"2026-02-28T16:00:32Z","compressed-file":"server-10/mariadb-repl-bin.000005.gz","decompressed-file":"/binlogs/server-10/mariadb-repl-bin.000005","compression":"gzip"}
    {"level":"info","ts":1772294437.3718772,"msg":"Binlogs pulled into staging area","staging-path":"/binlogs","compression":"gzip"}
    {"level":"info","ts":1772294437.3719199,"msg":"Writing target file","file-path":"/binlogs/0-binlog-target.txt"}
    kubectl get mariadb mariadb-repl -o jsonpath='{.status.conditions}' | jq
    [
      {
        "lastTransitionTime": "2026-03-01T12:15:06Z",
        "message": "Initialized",
        "reason": "Initialized",
        "status": "True",
        "type": "Initialized"
      },
      {
        "lastTransitionTime": "2026-03-01T12:15:06Z",
        "message": "Restored physical backup",
        "reason": "RestorePhysicalBackup",
        "status": "True",
        "type": "BackupRestored"
      },
      {
        "lastTransitionTime": "2026-03-01T12:15:06Z",
        "message": "Replication configured",
        "reason": "ReplicationConfigured",
        "status": "True",
        "type": "ReplicationConfigured"
      },
      {
        "lastTransitionTime": "2026-03-01T12:16:40Z",
        "message": "Replayed binlogs",
        "reason": "ReplayBinlogs",
        "status": "True",
        "type": "BinlogsReplayed"
      },
    ]
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      strictMode: true
    kubectl get pitr
    NAME   PHYSICAL BACKUP        LAST RECOVERABLE TIME   STRICT MODE   AGE
    pitr   physicalbackup-daily   2026-02-27T20:10:42Z    true          43h
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
      storage:
        size: 1Gi
      replicas: 3
      replication:
        enabled: true
      bootstrapFrom:
        pointInTimeRecoveryRef:
          name: pitr
        targetRecoveryTime: 2026-02-28T20:10:42Z
    kubectl get events --field-selector involvedObject.name=mariadb-repl
    LAST SEEN   TYPE      REASON                 OBJECT                     MESSAGE
    41s         Warning   MariaDBInitError       mariadb/mariadb-repl       Unable to init MariaDB: target recovery time 2026-02-28 21:10:42 +0100 CET is after latest recoverable time 2026-02-27 20:10:42 +0000 UTC
    
    kubectl get mariadb
    NAME           READY   STATUS                                                                                                                          PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Init error: target recovery time 2026-02-28 21:10:42 +0100 CET is after latest recoverable time 2026-02-27 20:10:42 +0000 UTC   mariadb-repl-0   ReplicasFirstPrimaryLast   65s
    kubectl get pitr
    NAME   PHYSICAL BACKUP        LAST RECOVERABLE TIME   STRICT MODE   AGE
    pitr   physicalbackup-daily   2026-02-27T20:10:42Z    false         43h
    kubectl get events --field-selector involvedObject.name=mariadb-repl
    LAST SEEN   TYPE      REASON                 OBJECT                     MESSAGE
    12s         Warning   BinlogTimelineInvalid   mariadb/mariadb-repl      Invalid binary log timeline: error getting binlog timeline between GTID 0-10-4 and target time 2026-02-28T21:10:42+01:00: timeline did not reach target time: 2026-02-28T21:10:42+01:00, last recoverable time: 2026-02-27T21:10:42+01:00
    
    kubectl get mariadb
    NAME           READY   STATUS                                                                                                                                                                                                                                                               PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Error replaying binlogs: Invalid binary log timeline: error getting binlog timeline between GTID 0-10-4 and target time 2026-02-28T21:10:42+01:00: timeline did not reach target time: 2026-02-28T21:10:42+01:00, last recoverable time: 2026-02-27T21:10:42+01:00   mariadb-repl-0   ReplicasFirstPrimaryLast   3m28s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-repl
    spec:
      bootstrapFrom:
        stagingStorage:
          persistentVolumeClaim:
            storageClassName: my-storage-class
            resources:
              requests:
                storage: 10Gi
            accessModes:
              - ReadWriteOnce
    kubectl get mariadb mariadb-repl -o jsonpath='{.status.pointInTimeRecovery}' | jq
    {
      "lastArchivedBinaryLog": "mariadb-repl-bin.000001",
      "lastArchivedPosition": 358,
      "lastArchivedTime": "2026-03-02T11:14:00Z",
      "serverId": 10,
      "storageReadyForArchival": true
    }
    kubectl get mariadb mariadb-repl -o jsonpath="{.status.conditions}" | jq
    [
      {
        "lastTransitionTime": "2026-03-02T11:33:58Z",
        "message": "Archived binlogs",
        "reason": "ArchiveBinlogs",
        "status": "True",
        "type": "BinlogsArchived"
      },
      {
        "lastTransitionTime": "2026-03-01T12:16:40Z",
        "message": "Replayed binlogs",
        "reason": "ReplayBinlogs",
        "status": "True",
        "type": "BinlogsReplayed"
      },
    ]
    kubectl get events --field-selector involvedObject.name=mariadb-repl --sort-by='.lastTimestamp'
    
    24m         Warning   BinlogArchivalError    mariadb/mariadb-repl               Error archiving binary logs: 1 error occurred:...
    23m         Normal    BinlogArchived         mariadb/mariadb-repl               Binary log mariadb-repl-bin.000001 archived
    41s         Warning   MariaDBInitError       mariadb/mariadb-repl       Unable to init MariaDB: target recovery time 2026-02-28 21:10:42 +0100 CET is after latest recoverable time 2026-02-27 20:10:42 +0000 UTC
    12s         Warning   BinlogTimelineInvalid   mariadb/mariadb-repl      Invalid binary log timeline: error getting binlog timeline between GTID 0-10-4 and target time 2026-02-28T21:10:42+01:00: timeline did not reach target time: 2026-02-28T21:10:42+01:00, last recoverable time: 2026-02-27T21:10:42+01:00
    kubectl get mariadb mariadb-repl -o jsonpath="{.status}" | jq
    {
      "conditions": [
        {
          "lastTransitionTime": "2026-03-02T11:14:58Z",
          "message": "Error archiving binlogs: 1 error occurred:\n\t* binary log storage is not ready for archival. Archival must start from a clean state\n\n",
          "reason": "ArchiveBinlogsError",
          "status": "False",
          "type": "Ready"
        },
        {
          "lastTransitionTime": "2026-03-02T11:14:58Z",
          "message": "Error archiving binlogs: 1 error occurred:\n\t* binary log storage is not ready for archival. Archival must start from a clean state\n\n",
          "reason": "ArchiveBinlogsError",
          "status": "False",
          "type": "BinlogsArchived"
        }
      ],
    }
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: PointInTimeRecovery
    metadata:
      name: pitr
    spec:
      physicalBackupRef:
        name: physicalbackup-daily
      storage:
        s3:
          bucket: binlogs
          prefix: mariadb-v2 # previously it was "mariadb"
          endpoint: minio.minio.svc.cluster.local:9000
          region: us-east-1
          accessKeyIdSecretKeyRef:
            name: minio
            key: access-key-id
          secretAccessKeySecretKeyRef:
            name: minio
            key: secret-access-key
          tls:
            enabled: true
            caSecretKeyRef:
              name: minio-ca
              key: ca.crt
    kubectl get pitr
    NAME   PHYSICAL BACKUP        LAST RECOVERABLE TIME   STRICT MODE   AGE
    pitr   physicalbackup-daily   2026-02-27T20:10:42Z    true          43h
    
    kubectl get mariadb
    NAME           READY   STATUS                                                                                                                          PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Init error: target recovery time 2026-02-28 21:10:42 +0100 CET is after latest recoverable time 2026-02-27 20:10:42 +0000 UTC   mariadb-repl-0   ReplicasFirstPrimaryLast   65s
    apiVersion: v1
    binlogs:
      server-10:
      ...
      - binlogFilename: mariadb-repl-bin.000003
        binlogVersion: 4
        firstGtid: 0-10-527
        firstTime: "2026-02-27T16:03:22Z"
        lastGtid: 0-10-1041
        lastTime: "2026-02-27T16:03:50Z"
        logPosition: 268493636
        previousGtids:
        - 0-10-526
        rotateEvent: true
        serverId: 10
        serverVersion: 11.8.5-2-MariaDB-enterprise-log
        stopEvent: false
      - binlogFilename: mariadb-repl-bin.000004
        binlogVersion: 4
        firstGtid: 0-10-1042
        firstTime: "2026-02-27T16:03:50Z"
        lastGtid: 0-10-1559
        lastTime: "2026-02-27T16:04:15Z"
        logPosition: 268506819
        previousGtids:
        - 0-10-1041
        rotateEvent: true
        serverId: 10
        serverVersion: 11.8.5-2-MariaDB-enterprise-log
        stopEvent: false
    kubectl get mariadb
    NAME           READY   STATUS                                                                                                                                                                                                                                                          PRIMARY          UPDATES                    AGE
    mariadb-repl   False   Error replaying binlogs: Invalid binary log timeline: error getting binlog timeline between GTID 0-10-4 and target time 2026-02-28T21:10:42+01:00: timeline did not reach target time: 2026-02-28T21:10:42+01:00, last recoverable time: 2026-02-27T16:04:15Z   mariadb-repl-0   ReplicasFirstPrimaryLast   3m28s
    .
    compression
    archival
    parallelization
    retention policy
    strict mode
    binlog_expire_logs_secondsarrow-up-right
    PURGE BINARY LOGSarrow-up-right
    FLUSH BINARY LOGSarrow-up-right
    binlog timeline
    archived binary log inventory
    staging area
    mariadb-binlogarrow-up-right

    TLS

    Guide to securing database traffic with TLS/SSL certificates, covering internal communication between nodes and external client connections.

    MariaDB Enterprise Kubernetes Operator supports issuing, configuring and rotating TLS certificates for both your MariaDB and MaxScale resources. It aims to be secure by default; for this reason, TLS certificates are issued and configured by the operator as a default behaviour.

    hashtag
    MariaDB configuration

    circle-info

    This section covers TLS configuration in new instances. If you are looking to migrate an existing instance to use TLS, please refer to instead.

    TLS can be configured in MariaDB resources by setting tls.enabled=true:

    As a result, the operator will generate a Certificate Authority (CA) and use it to issue the leaf certificates mounted by the instance. It is important to note that the TLS connections are not enforced in this case i.e. both TLS and non-TLS connections will be accepted. This is the default behaviour when no tls field is specified.

    If you want to enforce TLS connections, you can set tls.required=true:

    This approach ensures that any unencrypted connection will fail, effectively enforcing security best practices.

    If you want to fully opt-out from TLS, you can set tls.enabled=false:

    This will disable certificate issuance, resulting in all connections being unencrypted.

    Refer to further sections for a more advanced TLS configuration.

    hashtag
    MaxScale configuration

    circle-info

    This section covers TLS configuration in new instances. If you are looking to migrate an existing instance to use TLS, please refer to instead.

    TLS will be automatically enabled in MaxScale when the referred MariaDB (via mariaDbRef) has TLS enabled and enforced. Alternatively, you can explicitly enable TLS by setting tls.enabled=true:

    As a result, the operator will generate a Certificate Authority (CA) and use it to issue the leaf certificates mounted by the instance. It is important to note that, unlike MariaDB, MaxScale does not support TLS and non-TLS connections simultaneously (see ). Therefore, TLS connections will be enforced in this case i.e. unencrypted connections will fail, ensuring security best practises.

    If you want to fully opt-out from TLS, you can set tls.enabled=false. This should only be done when MariaDB TLS is not enforced or disabled:

    This will disable certificate issuance, resulting in all connections being unencrypted.

    Refer to further sections for a more advanced TLS configuration.

    hashtag
    MariaDB certificate specification

    The MariaDB TLS setup consists of the following certificates:

    • Certificate Authority (CA) keypair to issue the server certificate.

    • Server leaf certificate used to encrypt server connections.

    • Certificate Authority (CA) keypair to issue the client certificate.

    As a default behaviour, the operator generates a single CA to be used for issuing both the server and client certificates, but the user can decide to use dedicated CAs for each case. Root CAs, and in some cases, are supported, see for further detail.

    The server certificate contains the following Subject Alternative Names (SANs):

    • <mariadb-name>.<namespace>.svc.<cluster-name>

    • <mariadb-name>.<namespace>.svc

    • <mariadb-name>.<namespace>

    Whereas the client certificate is only valid for the <mariadb-name>-client SAN.

    hashtag
    MaxScale certificate specification

    The MaxScale TLS setup consists of the following certificates:

    • Certificate Authority (CA) keypair to issue the admin certificate.

    • Admin leaf certificate used to encrypt the administrative REST API and GUI.

    • Certificate Authority (CA) keypair to issue the listener certificate.

    As a default behaviour, the operator generates a single CA to be used for issuing both the admin and the listener certificates, but the user can decide to use dedicated CAs for each case. Client certificate and CA bundle configured in the referred MariaDB are used as server certificates by default, but the user is able to provide its own certificates. Root CAs, and in some cases, are supported, see for further detail.

    Both the admin and listener certificates contain the following Subject Alternative Names (SANs):

    • <maxscale-name>.<namespace>.svc.<clusername>

    • <maxscale-name>.<namespace>.svc

    • <maxscale-name>.<namespace>

    For details about the server certificate, see .

    hashtag
    CA bundle

    As you could appreciate in and , the TLS setup involves multiple CAs. In order to establish trust in a more convenient way, the operator groups the CAs together in a CA bundle that will need to be specified when . Every MariaDB and MaxScale resources have a dedicated bundle of its own available in a Secret named <instance-name>-ca-bundle.

    These trust bundles contain non expired CAs needed to connect to the instances. New CAs are automatically added to the bundle after , whilst old CAs are removed after they expire. It is important to note that both the new and old CAs remain in the bundle for a while to ensure a smooth update when the new certificates are issued by the new CA.

    hashtag
    Issue certificates with the operator

    By setting tls.enabled=true, the operator will generate a root CA for each instance, which will be used to issue the certificates described in the and sections:

    To establish trust with the instances, the CA's public key will be added to the . If you need a different trust chain, please refer to the section.

    The advantage of this approach is that the operator fully manages the Secrets that contain the certificates without depending on any third party dependency. Also, since the operator fully controls the renewal process, it is able to pause a leaf certificate renewal if the CA is being updated at that moment, as described in the section.

    hashtag
    Issue certificates with cert-manager

    circle-exclamation

    must be previously installed in the cluster in order to use this feature.

    cert-manager is the de-facto standard for managing certificates in Kubernetes. It is a Kubernetes native certificate management controller that allows you to automatically provision, manage and renew certificates. It supports multiple (in-cluster, Hashicorp Vault...) which are configured as Issuer or ClusterIssuer resources.

    As an example, we are going to setup an in-cluster root CA ClusterIssuer:

    Then, you can reference the ClusterIssuer in the MariaDB and MaxScale resources:

    The operator will create cert-manager's for each certificate, and will mount the resulting in the instances. These Secrets containing the certificates will be managed by cert-manager as well as its renewal process.

    To establish trust with the instances, the in the Secret will be added to the . If you need a different trust chain, please refer to the section.

    The advantage of this approach is that you can use any of the , such as the in-cluster CA or HashiCorp Vault, and potentially reuse the same Issuer/ClusterIssuer with multiple instances.

    hashtag
    Provide your own certificates

    Providing your own certificates is as simple as creating the Secrets with the appropriate structure and referencing them in the MariaDB and MaxScale resources. The certificates must be compliant with the and .

    The CA certificate must be provided as a Secret with the following structure:

    The ca.key field is only required if you want to the operator to automatically re-issue certificates with this CA, see for further detail. In other words, if only ca.crt is provided, the operator will trust this CA by adding it to the , but no certificates will be issued with it, the user will responsible for upating the certificate Secret manually with renewed certificates.

    The enterprise.mariadb.com/watch label is required only if you want the operator to automatically trigger an update when the CA is renewed, see for more detail.

    The leaf certificate must match the previous CA's public key, and it should provided as a with the following structure:

    The enterprise.mariadb.com/watch label is required only if you want the operator to automatically trigger an update when the certificate is renewed, see for more detail.

    Once the certificate Secrets are available in the cluster, you can create the MariaDB and MaxScale resources referencing them:

    hashtag
    Bring your own CA

    If you already have a CA setup outside of Kubernetes, you can use it with the operator by providing the CA certificate as a Secret with the following structure:

    Just by providing a reference to this Secret, the operator will use it to issue leaf certificates instead of generating a new CA:

    hashtag
    Intermediate CAs

    Intermediate CAs are supported by the operator with . Leaf certificates issued by the intermediate CAs are slightly different, and include the intermediate CA public key as part of the certificate, in the following order: Leaf certificate -> Intermediate CA. This is a common practise to easily establish trust in complex PKI setups, where multiple CA are involved.

    Many applications support this Leaf certificate -> Intermediate CA structure as a valid leaf certificate, and are able to establish trust with the intermediate CA. Normally, the intermediate CA will not be directly trusted, but used as a path to the root CA, which should be trusted by the application. If not trusted already, you can add the root CA to the by using a .

    hashtag
    Custom trust

    You are able to provide a set of CA public keys to be added to the by creating a Secret with the following structure:

    And referencing it in the MariaDB and MaxScale resources, for instance:

    This is specially useful when issuing certificates with an intermediate CA, see section for further detail.

    hashtag
    Distributing trust

    Distributing the to your application namespace is out of the scope of this operator, the bundles will remain in the same namespace as the MariaDB and MaxScale instances.

    If your application is in a different namespace, you can copy the CA bundle to the application namespace. Projects like can help you to automate this process and continously reconcile bundle changes.

    hashtag
    TLS version configuration

    You may configure the supported TLS versions in MariaDB by setting:

    If not specified, the MariaDB's default TLS versions will be used. See .

    Regarding MaxScale, you can also configure the supported TLS versions, both for the Admin REST API and MariaDB servers:

    If not specified, the MaxScale's default TLS versions will be used. See MaxScale docs:

    hashtag
    Certificate lifetime configuration

    By default, CA certificates are valid for 3 years, while leaf certificates have a validity of 3 months. This lifetime can be customized in both MariaDB and MaxScale resources through the certificate configuration fields. For example:

    When issuing certificates with cert-manager, you can specify the certificate configuration field alongside the issuer reference:

    hashtag
    Private key configuration

    By default, private keys are generated with the ECDSA algorithm and a size of 256. You can customize the private key configuration in both MariaDB and MaxScale resources through the certificate configuration fields. For example:

    When issuing certificates with cert-manager, you can specify the private key configuration field alongside the issuer reference:

    The following set of algorithms and sizes are supported:

    Algorithm
    Key Sizes

    hashtag
    CA renewal

    Depending on the setup, CAs can be managed and renewed by either MariaDB Enterprise Kubernetes Operator or cert-manager.

    When managed by the operator, CAs have a lifetime of 3 years by default, and are marked for renewal after 66% of its lifetime has passed i.e. ~2 years. After being renewed, the operator will trigger an update of the instances to include the new CA in the bundle.

    When managed by cert-manager, the renewal process is fully controlled by cert-manager, but the operator will also update the CA bundle after the CA is renewed.

    You may choose any of the available to control the instance update process.

    hashtag
    Certificate renewal

    Depending on the setup, certificates can be managed and renewed by the operator or cert-manager. In either case, certificates have a lifetime of 90 days by default, and marked for renewal after 66% of its lifetime has passed i.e. ~60 days.

    When the , the operator is able to pause a leaf certificate renewal if the CA is being updated at that same moment. This approach ensures a smooth update by avoiding the simultaneous rollout of the new CA and its associated certificates. Rolling them out together could be problematic, as all Pods need to trust the new CA before its issued certificates can be utilized.

    When the , the renewal process is fully managed by cert-manager, and the operator will not interfere with it. The operator will only update the instances whenever the CA or the certificates get renewed.

    You may choose any of the available to control the instance update process.

    hashtag
    Certificate status

    To have a high level picture of the certificates status, you can check the status.tls field of the MariaDB and MaxScale resources:

    hashtag
    TLS requirements for Users

    You are able to declaratively manage access to your MariaDB instances by creating . In particular, when TLS is enabled, you can provide additional requirements for the user when connecting over TLS.

    For instance, if you want to require a valid x509 certificate for the user to be able o connect:

    In order to restrict which subject the user certificate should have and/or require a particular issuer, you may set:

    When any of these TLS requirements are not met, the user will not be able to connect to the instance.

    See and the for further detail.

    hashtag
    Galera Enterprise SSL modes

    MariaDB Enterprise Cluster (Galera) supports multiple SSL modes to secure the communication between the nodes. For configuring the SSL enforcement level on the server i.e. WSREP, you can set:

    The following values are supported: SERVER_X509, SERVER and PROVIDER. Refer to the for further detail about these modes.

    You may also configure the SSL enforcement level used during Snapshot State Transfers(SST) by setting:

    The following values are supported: VERIFY_IDENTITY, VERIFY, REQUIRED and DISABLED. Refer to the for further detail about these modes.

    If you are willing to increase the enforcement level in an existing instance, make sure you follow the migration guide provided in the section.

    hashtag
    Secure application connections with TLS

    In this guide, we will configure TLS for an application running in the app namespace to connect with MariaDB and MaxScale instances deployed in the default namespace. We assume that the following resources are already present in the default namespace with TLS enabled:

    The first step is to create a User resource and grant the necessary permissions:

    The app user will be able to connect to the MariaDB instance from the app namespace by providing a certificate with subject mariadb-galera-client and issued by the mariadb-galera-ca CA.

    With the permissions in place, the next step is to prepare the certificates required for the application to connect:

    • CA Bundle: The trust bundle for MariaDB and MaxScale is available as a Secret named <instance-name>-ca-bundle in the default namespace. For more details, refer to the sections on and .

    • Client Certificate: MariaDB

    In this example, we assume that the following Secrets are available in the app namespace:

    • mariadb-bundle: CA bundle for the MariaDB and MaxScale instances.

    • mariadb-galera-client-cert: Client certificate required to connect to the MariaDB instance.

    With these Secrets in place, we can proceed to define our application:

    The application will connect to the MariaDB instance using the app user, and will execute a simple query to check the connection status. The --ssl-ca, --ssl-cert, --ssl-key and --ssl-verify-server-cert flags are used to provide the CA bundle, client certificate and key, and to verify the server certificate respectively.

    If the connection is successful, the output should be:

    You can also point the application to the MaxScale instance by updating the host to maxscale-galera.default.svc.cluster.local:

    If successful, the expected output is:

    hashtag
    Test TLS certificates with Connections

    In order to validate your TLS setup, and to ensure that you TLS certificates are correctly issued and configured, you can use the Connection resource to test the connection to both your MariaDB and MaxScale instances:

    If successful, the Connection resource will be in a Ready state, which means that your TLS setup is correctly configured:

    This could be specially useful when and issuing certificates for your applications.

    hashtag
    Limitations

    hashtag
    Galera and intermediate CAs

    Leaf certificates issued by are not supported by Galera, see . This implies that a root CA must be used to issue the MariaDB certificates.

    This doesn't affect MaxScale, as it is able to establish trust with intermediate CAs, and therefore you can still issue your application facing certificates (MaxScale listeners) with an intermediate CA, giving you more flexibility in your PKI setup.

    hashtag
    MaxScale

    • Unlike MariaDB, TLS and non-TLS connections on the same port are not supported simultaneously.

    • TLS encryption must be enabled for listeners when they are created. For servers, the TLS can be enabled after creation but it cannot be disabled or altered.

    Refer to the for further details.

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    Client leaf certificate used to encrypt and authenticate client connections.

    <mariadb-name>

  • *.<mariadb-name>-internal.<namespace>.svc.<cluster-name>

  • *.<mariadb-name>-internal.<namespace>.svc

  • *.<mariadb-name>-internal.<namespace>

  • *.<mariadb-name>-internal

  • <mariadb-name>-primary.<namespace>.svc.<cluster-name>

  • <mariadb-name>-primary.<namespace>.svc

  • <mariadb-name>-primary.<namespace>

  • <mariadb-name>-primary

  • <mariadb-name>-secondary.<namespace>.svc.<cluster-name>

  • <mariadb-name>-secondary.<namespace>.svc

  • <mariadb-name>-secondary.<namespace>

  • <mariadb-name>-secondary

  • localhost

  • Listener leaf certificate used to encrypt database connections to the listener.
  • Server CA bundle used to establish trust with the MariaDB server.

  • Server leaf certificate used to connect to the MariaDB server.

  • <maxscale-name>

  • <maxscale-name>-gui.<namespace>.svc.<clusername>

  • <maxscale-name>-gui.<namespace>.svc

  • <maxscale-name>-gui.<namespace>

  • <maxscale-name>-gui

  • *.<maxscale-name>-internal.<namespace>.svc.<clusername>

  • *.<maxscale-name>-internal.<namespace>.svc

  • *.<maxscale-name>-internal.<namespace>

  • *.<maxscale-name>-internal

  • provides a default client certificate stored in a
    Secret
    named
    <mariadb-name>-client-cert
    in the
    default
    namespace. You can either use this
    Secret
    or generate a new one with the subject
    mariadb-galera-client
    , issued by the
    mariadb-galera-ca
    CA. While issuing client certificates for applications falls outside the scope of this operator, you can
    .

    RSA

    2048, 3072, 4096

    ECDSA

    256, 384, 521

    Enabling TLS in existing instances
    Enabling TLS in existing instances
    limitations
    intermedicate CAs
    limitations
    intermedicate CAs
    limitations
    MariaDB certificate specification
    MariaDB certificate specification
    MaxScale certificate specification
    securely connecting from your applications
    renewal
    MariaDB cert spec
    MaxScale cert spec
    CA bundle
    custom trust
    cert renewal
    cert-managerarrow-up-right
    certificate backendsarrow-up-right
    Certificate resourcesarrow-up-right
    TLS Secretsarrow-up-right
    ca.crt field provided by cert-managedarrow-up-right
    CA bundle
    custom trust
    cert-manager's certificate backendsarrow-up-right
    MariaDB cert spec
    MaxScale cert spec
    bring your own CA
    CA bundle
    CA renewal
    TLS Secretarrow-up-right
    cert renewal
    some limitations
    CA bundle
    custom trust
    CA bundle
    intermediate CAs
    CA bundle
    trust-managerarrow-up-right
    Admin TLS versionarrow-up-right
    Server TLS versionarrow-up-right
    update strategies
    certificates are issued by the operator
    certificates are issued by cert-manager
    update strategies
    User SQL resources
    API reference
    MariaDB Enterprise Cluster documentationarrow-up-right
    MariaDB Enterprise Cluster documentationarrow-up-right
    Enabling TLS in existing instances
    CA bundle
    distributing trust
    providing your own certificates
    intermediate CAs
    MDEV-35812arrow-up-right
    MaxScale documentation
    spinner
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tls:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tls:
        enabled: true
        required: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tls:
        enabled: false
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      ...
      mariaDbRef:
        name: mariadb-galera
      tls:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      ...
      mariaDbRef:
        name: mariadb-galera
      tls:
        enabled: false
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
      ...
      tls:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale
    spec:
      ...
      tls:
        enabled: true
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: selfsigned
    spec:
      selfSigned: {}
    ---
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: root-ca
      namespace: default
    spec:
      duration: 52596h # 6 years
      commonName: root-ca
      usages:
      - digital signature
      - key encipherment
      - cert sign
      issuerRef:
        name: selfsigned
        kind: ClusterIssuer
      isCA: true
      privateKey:
        encoding: PKCS1
        algorithm: ECDSA
        size: 256
      secretTemplate:
        labels:
          enterprise.mariadb.com/watch: ""
      secretName: root-ca
      revisionHistoryLimit: 10
    ---
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: root-ca
    spec:
      ca:
        secretName: root-ca
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tls:
        enabled: true
        serverCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        clientCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      ...
      tls:
        enabled: true
        adminCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        listenerCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: mariadb-galera-server-ca
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      ca.crt:
      -----BEGIN CERTIFICATE-----
      <public-key>
      -----END CERTIFICATE-----
      ca.key:
      -----BEGIN EC PRIVATE KEY-----
      <private-key>
      -----END EC PRIVATE KEY-----
    apiVersion: v1
    kind: Secret
    type: kubernetes.io/tls  
    metadata:
      name: mariadb-galera-server-tls 
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      tls.crt:
      -----BEGIN CERTIFICATE-----
      <public-key>
      -----END CERTIFICATE-----
      tls.key:
      -----BEGIN EC PRIVATE KEY-----
      <private-key>
      -----END EC PRIVATE KEY-----
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tls:
        enabled: true
        serverCASecretRef:
          name: mariadb-server-ca
        serverCertSecretRef:
          name: mariadb-galera-server-tls
        clientCASecretRef:
          name: mariadb-client-ca
        clientCertSecretRef:
          name: mariadb-galera-client-tls
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      ...
      tls:
        enabled: true
        adminCASecretRef:
          name: maxscale-admin-ca
        adminCertSecretRef:
          name: maxscale-galera-admin-tls
        listenerCASecretRef:
          name: maxscale-listener-ca
        listenerCertSecretRef:
          name: maxscale-galera-listener-tls
        serverCASecretRef:
          name: mariadb-galera-ca-bundle
        serverCertSecretRef:
          name: mariadb-galera-client-tls
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: mariadb-ca
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      ca.crt:
      -----BEGIN CERTIFICATE-----
      <public-key>
      -----END CERTIFICATE-----
      ca.key:
      -----BEGIN EC PRIVATE KEY-----
      <private-key>
      -----END EC PRIVATE KEY-----
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      ...
      tls:
        enabled: true
        serverCASecretRef:
          name: mariadb-server-ca
        clientCASecretRef:
          name: mariadb-client-ca
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: custom-trust
      labels:
        enterprise.mariadb.com/watch: ""
    data:
      ca.crt:
      -----BEGIN CERTIFICATE-----
      <my-org-root-ca>
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      <root-ca>
      -----END CERTIFICATE-----
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      ...
      tls:
        enabled: true
        adminCASecretRef:
          name: custom-trust
        adminCertIssuerRef:
          name: my-org-intermediate-ca
          kind: ClusterIssuer
        listenerCASecretRef:
          name: custom-trust
        listenerCertIssuerRef:
          name: intermediate-ca
          kind: ClusterIssuer
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        versions:
          - TLSv1.3
          - TLSv1.2
          - TLSv1.1
          - TLSv1.0
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      ...
      tls:
        adminVersions:
          - TLSv13
          - TLSv12
          - TLSv11
          - TLSv10
        serverVersions:
          - TLSv13
          - TLSv12
          - TLSv11
          - TLSv10
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        enabled: true
        required: true
        serverCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 720h # 1 month
        clientCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 720h # 1 month
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      tls:
        enabled: true
        adminCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 1h # 1 month
        listenerCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 720h # 1 month
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        enabled: true
        required: true
        serverCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        serverCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 720h # 1 month
        clientCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        clientCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 720h # 1 month
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      tls:
        enabled: true
        adminCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        adminCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 1h # 1 month
        listenerCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        listenerCertConfig:
          caLifetime: 8766h # 1 year
          certLifetime: 720h # 1 month
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        enabled: true
        required: true
        serverCertConfig:
          privateKeyAlgorithm: RSA
          privateKeySize: 2048
        clientCertConfig:
          privateKeyAlgorithm: RSA
          privateKeySize: 2048
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      tls:
        enabled: true
        adminCertConfig:
          privateKeyAlgorithm: RSA
          privateKeySize: 2048
        listenerCertConfig:
          privateKeyAlgorithm: RSA
          privateKeySize: 2048
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        enabled: true
        required: true
        serverCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        serverCertConfig:
          privateKeyAlgorithm: ECDSA
          privateKeySize: 256
        clientCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        clientCertConfig:
          privateKeyAlgorithm: ECDSA
          privateKeySize: 256
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      tls:
        enabled: true
        adminCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        adminCertConfig:
          privateKeyAlgorithm: ECDSA
          privateKeySize: 256
        listenerCertIssuerRef:
          name: root-ca
          kind: ClusterIssuer
        listenerCertConfig:
          privateKeyAlgorithm: ECDSA
          privateKeySize: 256
    kubectl get mariadb mariadb-galera -o jsonpath="{.status.tls}" | jq
    {
      "caBundle": [
        {
          "issuer": "CN=mariadb-galera-ca",
          "notAfter": "2028-01-20T14:26:50Z",
          "notBefore": "2025-01-20T13:26:50Z",
          "subject": "CN=mariadb-galera-ca"
        }
      ],
      "clientCert": {
        "issuer": "CN=mariadb-galera-ca",
        "notAfter": "2025-04-20T14:26:50Z",
        "notBefore": "2025-01-20T13:26:50Z",
        "subject": "CN=mariadb-galera-client"
      },
      "serverCert": {
        "issuer": "CN=mariadb-galera-ca",
        "notAfter": "2025-04-20T14:26:50Z",
        "notBefore": "2025-01-20T13:26:50Z",
        "subject": "CN=mariadb-galera.default.svc.cluster.local"
      }
    }
    kubectl get maxscale maxscale-galera -o jsonpath="{.status.tls}" | jq
    {
      "adminCert": {
        "issuer": "CN=maxscale-galera-ca",
        "notAfter": "2025-04-20T14:33:09Z",
        "notBefore": "2025-01-20T13:33:09Z",
        "subject": "CN=maxscale-galera.default.svc.cluster.local"
      },
      "caBundle": [
        {
          "issuer": "CN=maxscale-galera-ca",
          "notAfter": "2028-01-20T14:33:09Z",
          "notBefore": "2025-01-20T13:33:09Z",
          "subject": "CN=maxscale-galera-ca"
        },
        {
          "issuer": "CN=mariadb-galera-ca",
          "notAfter": "2028-01-20T14:28:46Z",
          "notBefore": "2025-01-20T13:28:46Z",
          "subject": "CN=mariadb-galera-ca"
        }
      ],
      "listenerCert": {
        "issuer": "CN=maxscale-galera-ca",
        "notAfter": "2025-04-20T14:33:09Z",
        "notBefore": "2025-01-20T13:33:09Z",
        "subject": "CN=maxscale-galera.default.svc.cluster.local"
      },
      "serverCert": {
        "issuer": "CN=mariadb-galera-ca",
        "notAfter": "2025-04-20T14:28:46Z",
        "notBefore": "2025-01-20T13:28:46Z",
        "subject": "CN=mariadb-galera-client"
      }
    }
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user
    spec:
      ...
      require:
        x509: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: user
    spec:
      ...
      require:
        issuer: "/CN=mariadb-galera-ca"
        subject: "/CN=mariadb-galera-client"
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        enabled: true
        galeraServerSSLMode: SERVER_X509
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      tls:
        enabled: true
        galeraSSTEnabled: true
        galeraClientSSLMode: VERIFY_IDENTITY
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb-galera
    spec:
      rootPasswordSecretKeyRef:
        name: mariadb
        key: root-password
      storage:
        size: 1Gi
      replicas: 3
      galera:
        enabled: true
      tls:
        enabled: true
        required: true
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale-galera
    spec:
      replicas: 2
      mariaDbRef:
        name: mariadb-galera
      tls:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: User
    metadata:
      name: app
      namespace: app
    spec:
      mariaDbRef:
        name: mariadb-galera
        namespace: default
      require:
        issuer: "/CN=mariadb-galera-ca"
        subject: "/CN=mariadb-galera-client"
      host: "%"
    ---
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Grant
    metadata:
      name: grant-app
      namespace: app
    spec:
      mariaDbRef:
        name: mariadb-galera
        namespace: default
      privileges:
        - "ALL PRIVILEGES"
      database: "*"
      table: "*"
      username: app
      host: "%"
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: mariadb-client
      namespace: app
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: mariadb-client
                image: mariadb:11.4.4
                command:
                  - bash
                args:
                  - -c
                  - >
                    mariadb -u app -h mariadb-galera-primary.default.svc.cluster.local
                    --ssl-ca=/etc/pki/ca.crt --ssl-cert=/etc/pki/tls.crt
                    --ssl-key=/etc/pki/tls.key --ssl-verify-server-cert
                    -e "SELECT 'MariaDB connection successful!' AS Status;" -t
                volumeMounts:
                - name: pki
                  mountPath: /etc/pki
                  readOnly: true
              volumes:
              - name: pki
                projected:
                  sources:
                  - secret:
                      name: mariadb-bundle
                      items:
                      - key: ca.crt
                        path: ca.crt
                  - secret:
                      name: mariadb-galera-client-cert
                      items:
                      - key: tls.crt
                        path: tls.crt
                      - key: tls.key
                        path: tls.key
              restartPolicy: Never
    +---------------------------------+
    | Status                          |
    +---------------------------------+
    | MariaDB connection successful!  |
    +---------------------------------+
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: maxscale-client
      namespace: app
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: maxscale-client
                image: mariadb:11.4.4
                command:
                  - bash
                args:
                  - -c
                  - >
                    mariadb -u app -h maxscale-galera.default.svc.cluster.local
                    --ssl-ca=/etc/pki/ca.crt --ssl-cert=/etc/pki/tls.crt
                    --ssl-key=/etc/pki/tls.key --ssl-verify-server-cert
                    -e "SELECT 'MaxScale connection successful!' AS Status;" -t
                volumeMounts:
                - name: pki
                  mountPath: /etc/pki
                  readOnly: true
              volumes:
              - name: pki
                projected:
                  sources:
                  - secret:
                      name: mariadb-bundle
                      items:
                      - key: ca.crt
                        path: ca.crt
                  - secret:
                      name: mariadb-galera-client-cert
                      items:
                      - key: tls.crt
                        path: tls.crt
                      - key: tls.key
                        path: tls.key
              restartPolicy: Never
    +---------------------------------+
    | Status                          |
    +---------------------------------+
    | MaxScale connection successful! |
    +---------------------------------+
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection
    spec:
      mariaDbRef:
        name: mariadb-galera
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      tlsClientCertSecretRef:
        name: mariadb-galera-client-cert
      database: mariadb
      healthCheck:
        interval: 30s
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: Connection
    metadata:
      name: connection-maxscale
    spec:
      maxScaleRef:
        name: maxscale-galera
      username: mariadb
      passwordSecretKeyRef:
        name: mariadb
        key: password
      tlsClientCertSecretRef:
        name: mariadb-galera-client-cert
      database: mariadb
      healthCheck:
        interval: 30s
    kubectl get connections
    NAME                         READY   STATUS    SECRET                AGE
    connection                   True    Healthy   connection            2m8s
    connection-maxscale          True    Healthy   connection-maxscale   97s
    test them using Connection resources
    MaxScale UI
    server reference
    service reference
    listener reference
    MaxScale reference
    MaxScale docs
    MaxScale REST API

    Metrics

    Information on how to enable and collect performance metrics from managed database instances for monitoring with tools like Prometheus and Grafana.

    MariaDB Enterprise Kubernetes Operator is able to configure Prometheus operatorarrow-up-right resources to scrape metrics from MariaDB and MaxScale instances. These metrics can be used later on to build Grafana dashboards or trigger Alertmanagerarrow-up-right alerts.

    hashtag
    Operator metrics

    In order to expose the operator internal metrics, you can install the operator Helm chart passing the metrics.enabled = true value. Refer to the Helm documentation for further detail.

    hashtag
    Exporters

    The operator configures exporters to query MariaDB and MaxScale, exposing metrics in Prometheus format through an HTTP endpoint.

    It is important to note that these exporters run as standalone Deployments rather than as sidecars for each data-plane replica. Since they can communicate with all replicas of MariaDB and MaxScale, there is no need to run a separate exporter for each replica.

    As a result, the lifecycle of MariaDB and MaxScale remains independent from the exporters, allowing for upgrades without impacting the availability of either component.

    hashtag
    ServiceMonitor

    Once the exporter Deployment is ready, the operator creates a object that will be eventually reconciled by the , resulting in the Prometheus instance being configured to scrape the exporter endpoint.

    As you scale MariaDB and MaxScale by adjusting the number of replicas, the operator will reconcile the ServiceMonitor to dynamically add or remove targets corresponding to the updated instances.

    hashtag
    Configuration

    The easiest way to setup metrics in your MariaDB and MaxScale instances is just by setting spec.metrics.enabled = true:

    The rest of the fields are defaulted by the operator. If you need a more fine grained configuration, refer to the and the following examples:

    hashtag
    Grafana dashboards

    The following community dashboards available on are compatible with the , and therefore they can be used to monitor MariaDB instances:

    hashtag
    MariaDB metrics

    The following metrics are available for MariaDB instances:

    Metric Name
    Description
    Type

    hashtag
    MaxScale metrics

    The following metrics are available for MaxScale instances:

    Metric Name
    Description
    Type

    This page is: Copyright © 2025 MariaDB. All rights reserved.

    mysql_galera_evs_repl_latency_max_seconds

    PXC/Galera group communication latency. Max value.

    GAUGE

    mysql_galera_evs_repl_latency_min_seconds

    PXC/Galera group communication latency. Min value.

    GAUGE

    mysql_galera_evs_repl_latency_sample_size

    PXC/Galera group communication latency. Sample Size.

    GAUGE

    mysql_galera_evs_repl_latency_stdev

    PXC/Galera group communication latency. Standard Deviation.

    GAUGE

    mysql_galera_gcache_size_bytes

    PXC/Galera gcache size.

    GAUGE

    mysql_galera_status_info

    PXC/Galera status information.

    GAUGE

    mysql_galera_variables_info

    PXC/Galera variables information.

    GAUGE

    mysql_global_status_aborted_clients

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aborted_connects

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aborted_connects_preauth

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_access_denied_errors

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_column_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_database_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_function_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_package_body_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_package_spec_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_procedure_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_proxy_users

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_role_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_roles

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_table_grants

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_acl_users

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_blocks_not_flushed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_blocks_unused

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_blocks_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_read_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_reads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_write_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_pagecache_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_aria_transaction_log_syncs

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_bytes_written

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_cache_disk_use

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_cache_use

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_commits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_disk_use

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_group_commit_trigger_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_group_commit_trigger_lock_wait

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_group_commit_trigger_timeout

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_group_commits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_gtid_index_hit

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_gtid_index_miss

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_snapshot_position

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_stmt_cache_disk_use

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_binlog_stmt_cache_use

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_buffer_pool_dirty_pages

    Innodb buffer pool dirty pages.

    GAUGE

    mysql_global_status_buffer_pool_page_changes_total

    Innodb buffer pool page state changes.

    COUNTER

    mysql_global_status_buffer_pool_pages

    Innodb buffer pool pages by state.

    GAUGE

    mysql_global_status_busy_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_bytes_received

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_bytes_sent

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_column_compressions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_column_decompressions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_commands_total

    Total number of executed MySQL commands.

    COUNTER

    mysql_global_status_compression

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_connection_errors_total

    Total number of MySQL connection errors.

    COUNTER

    mysql_global_status_connections

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_cpu_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_created_tmp_disk_tables

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_created_tmp_files

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_created_tmp_tables

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_delayed_errors

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_delayed_insert_threads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_delayed_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_delete_scan

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_empty_queries

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_executed_events

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_executed_triggers

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_application_time_periods

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_check_constraint

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_custom_aggregate_functions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_delay_key_write

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_dynamic_columns

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_fulltext

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_gis

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_insert_returning

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_into_outfile

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_into_variable

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_invisible_columns

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_json

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_locale

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_subquery

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_system_versioning

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_timezone

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_trigger

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_window_functions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_feature_xml

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_handlers_total

    Total number of executed MySQL handlers.

    COUNTER

    mysql_global_status_innodb_adaptive_hash_hash_searches

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_adaptive_hash_non_hash_searches

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_available_undo_logs

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_background_log_sync

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_bytes_data

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_bytes_dirty

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_load_incomplete

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_read_ahead

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_read_ahead_evicted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_read_ahead_rnd

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_read_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_reads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_wait_free

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_buffer_pool_write_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_bulk_operations

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_checkpoint_age

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_checkpoint_max_age

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_fsyncs

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_pending_fsyncs

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_pending_reads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_pending_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_read

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_reads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_data_written

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_dblwr_pages_written

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_dblwr_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_deadlocks

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_n_merge_blocks_decrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_n_merge_blocks_encrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_n_rowlog_blocks_decrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_n_rowlog_blocks_encrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_n_temp_blocks_decrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_n_temp_blocks_encrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_num_key_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_rotation_estimated_iops

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_rotation_pages_flushed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_rotation_pages_modified

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_rotation_pages_read_from_cache

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_encryption_rotation_pages_read_from_disk

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_have_bzip2

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_have_lz4

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_have_lzma

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_have_lzo

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_have_punch_hole

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_have_snappy

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_history_list_length

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_instant_alter_column

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_log_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_log_write_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_log_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_lsn_current

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_lsn_flushed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_lsn_last_checkpoint

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_master_thread_active_loops

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_master_thread_idle_loops

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_max_trx_id

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_mem_adaptive_hash

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_mem_dictionary

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_open_files

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_page_compressed_trim_op

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_pages_decrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_pages_encrypted

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_pages_page_compressed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_pages_page_compression_error

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_num_pages_page_decompressed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_onlineddl_pct_progress

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_onlineddl_rowlog_pct_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_onlineddl_rowlog_rows

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_os_log_written

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_page_compression_saved

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_page_size

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_pages_created

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_pages_read

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_pages_written

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_row_lock_current_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_row_lock_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_row_lock_time_avg

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_row_lock_time_max

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_row_lock_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_truncated_status_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_innodb_undo_truncations

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_blocks_not_flushed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_blocks_unused

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_blocks_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_blocks_warm

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_read_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_reads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_write_requests

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_key_writes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_last_query_cost

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_master_gtid_wait_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_master_gtid_wait_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_master_gtid_wait_timeouts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_max_statement_time_exceeded

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_max_tmp_space_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_max_used_connections

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_max_used_connections_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_memory_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_memory_used_initial

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_not_flushed_delayed_rows

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_open_files

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_open_streams

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_open_table_definitions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_open_tables

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_opened_files

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_opened_plugin_libraries

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_opened_table_definitions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_opened_tables

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_opened_views

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_optimizer_join_prefixes_check_calls

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_performance_schema_lost_total

    Total number of MySQL instrumentations that could not be loaded or created due to memory constraints.

    COUNTER

    mysql_global_status_prepared_stmt_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_free_blocks

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_free_memory

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_hits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_inserts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_lowmem_prunes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_not_cached

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_queries_in_cache

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_qcache_total_blocks

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_queries

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_questions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_resultset_metadata_skipped

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rows_read

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rows_sent

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rows_tmp_read

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_clients

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_get_ack

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_net_avg_wait_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_net_wait_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_net_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_no_times

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_no_tx

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_request_ack

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_status

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_timefunc_failures

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_tx_avg_wait_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_tx_wait_time

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_tx_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_wait_pos_backtraverse

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_wait_sessions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_master_yes_tx

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_slave_send_ack

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_semi_sync_slave_status

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_rpl_transactions_multi_engine

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_select_full_join

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_select_full_range_join

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_select_range

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_select_range_check

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_select_scan

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_server_audit_active

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_server_audit_writes_failed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_connections

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_heartbeat_period

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_open_temp_tables

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_received_heartbeats

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_retried_transactions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_running

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slave_skipped_errors

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slaves_connected

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slaves_running

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slow_launch_threads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_slow_queries

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_sort_merge_passes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_sort_priority_queue_sorts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_sort_range

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_sort_rows

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_sort_scan

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_accept_renegotiates

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_accepts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_callback_cache_hits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_client_connects

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_connect_renegotiates

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_ctx_verify_depth

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_ctx_verify_mode

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_default_timeout

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_finished_accepts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_finished_connects

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_session_cache_hits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_session_cache_misses

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_session_cache_overflows

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_session_cache_size

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_session_cache_timeouts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_sessions_reused

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_used_session_cache_entries

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_verify_depth

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_ssl_verify_mode

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_subquery_cache_hit

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_subquery_cache_miss

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_syncs

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_table_locks_immediate

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_table_locks_waited

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_table_open_cache_active_instances

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_table_open_cache_hits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_table_open_cache_misses

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_table_open_cache_overflows

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_tc_log_max_pages_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_tc_log_page_size

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_tc_log_page_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_threadpool_idle_threads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_threadpool_threads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_threads_cached

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_threads_connected

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_threads_created

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_threads_running

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_tmp_space_used

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_transactions_gtid_foreign_engine

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_transactions_multi_engine

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_update_scan

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_uptime

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_uptime_since_flush_status

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_applier_thread_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_apply_oooe

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_apply_oool

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_apply_waits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_apply_window

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_causal_reads

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cert_deps_distance

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cert_index_size

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cert_interval

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cluster_conf_id

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cluster_size

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cluster_status

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_cluster_weight

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_commit_oooe

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_commit_oool

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_commit_window

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_connected

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_desync_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_flow_control_paused

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_flow_control_paused_ns

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_flow_control_recv

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_flow_control_sent

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_gmcast_segment

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_last_committed

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_bf_aborts

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_cached_downto

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_cert_failures

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_commits

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_index

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_recv_queue

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_recv_queue_avg

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_recv_queue_max

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_recv_queue_min

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_replays

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_send_queue

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_send_queue_avg

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_send_queue_max

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_send_queue_min

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_local_state

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_open_connections

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_open_transactions

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_protocol_version

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_ready

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_received

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_received_bytes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_repl_data_bytes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_repl_keys

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_repl_keys_bytes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_repl_other_bytes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_replicated

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_replicated_bytes

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_rollbacker_thread_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_status_wsrep_thread_count

    Generic metric from SHOW GLOBAL STATUS.

    UNTYPED

    mysql_global_variables_allow_suspicious_udfs

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_analyze_sample_percentage

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_block_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_checkpoint_interval

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_checkpoint_log_activity

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_encrypt_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_force_start_after_recovery_failures

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_group_commit_interval

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_log_file_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_max_sort_file_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_page_checksum

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_pagecache_age_threshold

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_pagecache_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_pagecache_division_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_pagecache_file_hash_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_repair_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_sort_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_aria_used_for_temp_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_auto_increment_increment

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_auto_increment_offset

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_autocommit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_automatic_sp_privileges

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_back_log

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_big_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_alter_two_phase

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_annotate_row_events

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_commit_wait_count

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_commit_wait_usec

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_direct_non_transactional_updates

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_expire_logs_seconds

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_file_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_gtid_index

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_gtid_index_page_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_gtid_index_span_min

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_legacy_event_pos

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_optimize_thread_scheduling

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_row_event_max_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_space_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_binlog_stmt_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_bulk_insert_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_check_constraint_checks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_column_compression_threshold

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_column_compression_zlib_level

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_column_compression_zlib_wrap

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_connect_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_core_file

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_deadlock_search_depth_long

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_deadlock_search_depth_short

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_deadlock_timeout_long

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_deadlock_timeout_short

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_default_password_lifetime

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_default_week_format

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_delay_key_write

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_delayed_insert_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_delayed_insert_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_delayed_queue_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_disconnect_on_expired_password

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_div_precision_increment

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_encrypt_binlog

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_encrypt_tmp_disk_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_encrypt_tmp_files

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_eq_range_index_dive_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_event_scheduler

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_expensive_subquery_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_expire_logs_days

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_explicit_defaults_for_timestamp

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_extra_max_connections

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_extra_port

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_flush

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_flush_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_foreign_key_checks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_ft_max_word_len

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_ft_min_word_len

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_ft_query_expansion_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_general_log

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_group_concat_max_len

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_gtid_cleanup_batch_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_gtid_domain_id

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_gtid_ignore_duplicates

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_gtid_strict_mode

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_compress

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_crypt

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_dynamic_loading

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_geometry

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_openssl

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_profiling

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_query_cache

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_rtree_keys

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_ssl

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_have_symlink

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_histogram_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_host_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_idle_readonly_transaction_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_idle_transaction_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_idle_write_transaction_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_ignore_builtin_innodb

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_in_predicate_conversion_threshold

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_adaptive_flushing

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_adaptive_flushing_lwm

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_adaptive_hash_index

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_adaptive_hash_index_parts

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_alter_copy_bulk

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_autoextend_increment

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_autoinc_lock_mode

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buf_dump_status_frequency

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_chunk_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_dump_at_shutdown

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_dump_now

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_dump_pct

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_load_abort

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_load_at_startup

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_load_now

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_buffer_pool_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_cmp_per_index_enabled

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_compression_default

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_compression_failure_threshold_pct

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_compression_level

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_compression_pad_pct_max

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_data_file_buffering

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_data_file_write_through

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_deadlock_detect

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_default_encryption_key_id

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_disable_sort_file_cache

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_doublewrite

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_encrypt_log

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_encrypt_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_encrypt_temporary_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_encryption_rotate_key_age

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_encryption_rotation_iops

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_encryption_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_fast_shutdown

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_fatal_semaphore_wait_threshold

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_file_per_table

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_fill_factor

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_flush_log_at_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_flush_log_at_trx_commit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_flush_neighbors

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_flush_sync

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_flushing_avg_loops

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_force_primary_key

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_force_recovery

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_enable_diag_print

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_enable_stopword

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_max_token_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_min_token_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_num_word_optimize

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_result_cache_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_sort_pll_degree

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_ft_total_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_immediate_scrub_data_uncompressed

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_io_capacity

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_io_capacity_max

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_lock_wait_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_file_buffering

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_file_mmap

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_file_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_file_write_through

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_spin_wait_delay

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_log_write_ahead_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_lru_flush_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_lru_scan_depth

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_max_dirty_pages_pct

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_max_dirty_pages_pct_lwm

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_max_purge_lag

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_max_purge_lag_delay

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_max_purge_lag_wait

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_max_undo_log_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_old_blocks_pct

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_old_blocks_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_online_alter_log_max_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_open_files

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_optimize_fulltext_only

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_page_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_prefix_index_cluster_optimization

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_print_all_deadlocks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_purge_batch_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_purge_rseg_truncate_frequency

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_purge_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_random_read_ahead

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_read_ahead_threshold

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_read_io_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_read_only

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_read_only_compressed

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_rollback_on_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_snapshot_isolation

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_sort_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_spin_wait_delay

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_auto_recalc

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_include_delete_marked

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_modified_counter

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_on_metadata

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_persistent

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_persistent_sample_pages

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_traditional

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_stats_transient_sample_pages

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_status_output

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_status_output_locks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_strict_mode

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_sync_spin_loops

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_table_locks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_truncate_temporary_tablespace_now

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_undo_log_truncate

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_undo_tablespaces

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_use_atomic_writes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_use_native_aio

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_innodb_write_io_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_interactive_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_join_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_join_buffer_space_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_join_cache_level

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_keep_files_on_create

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_key_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_key_cache_age_threshold

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_key_cache_block_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_key_cache_division_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_key_cache_file_hash_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_key_cache_segments

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_large_files_support

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_large_page_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_large_pages

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_local_infile

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_lock_wait_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_locked_in_memory

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_bin

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_bin_compress

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_bin_compress_min_len

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_bin_trust_function_creators

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_queries_not_using_indexes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slave_updates

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_admin_statements

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_max_warnings

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_min_examined_row_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_query

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_query_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_rate_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_slow_slave_statements

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_tc_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_log_warnings

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_long_query_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_low_priority_updates

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_lower_case_file_system

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_lower_case_table_names

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_master_verify_checksum

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_allowed_packet

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_binlog_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_binlog_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_binlog_stmt_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_binlog_total_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_connect_errors

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_connections

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_delayed_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_digest_length

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_error_count

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_heap_table_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_insert_delayed_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_join_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_length_for_sort_data

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_password_errors

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_prepared_stmt_count

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_recursive_iterations

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_relay_log_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_rowid_filter_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_seeks_for_key

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_session_mem_used

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_sort_length

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_sp_recursion_depth

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_statement_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_tmp_session_space_usage

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_tmp_total_space_usage

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_user_connections

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_max_write_lock_count

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_metadata_locks_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_metadata_locks_hash_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_min_examined_row_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_mrr_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_block_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_data_pointer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_max_sort_file_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_mmap_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_repair_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_sort_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_myisam_use_mmap

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_mysql56_temporal_format

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_net_buffer_length

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_net_read_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_net_retry_count

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_net_write_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_old

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_old_passwords

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_open_files_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_adjust_secondary_key_costs

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_disk_read_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_disk_read_ratio

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_extra_pruning_depth

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_index_block_copy_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_join_limit_pref_ratio

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_key_compare_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_key_copy_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_key_lookup_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_key_next_find_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_max_sel_arg_weight

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_max_sel_args

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_prune_level

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_row_copy_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_row_lookup_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_row_next_find_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_rowid_compare_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_rowid_copy_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_scan_setup_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_search_depth

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_selectivity_sampling_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_trace_max_mem_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_use_condition_selectivity

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_optimizer_where_cost

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_accounts_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_digests_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_stages_history_long_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_stages_history_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_statements_history_long_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_statements_history_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_transactions_history_long_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_transactions_history_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_waits_history_long_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_events_waits_history_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_hosts_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_cond_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_cond_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_digest_length

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_file_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_file_handles

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_file_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_index_stat

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_memory_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_metadata_locks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_mutex_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_mutex_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_prepared_statements_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_program_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_rwlock_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_rwlock_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_socket_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_socket_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_sql_text_length

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_stage_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_statement_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_statement_stack

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_table_handles

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_table_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_table_lock_stat

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_thread_classes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_max_thread_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_session_connect_attrs_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_setup_actors_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_setup_objects_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_performance_schema_users_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_port

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_preload_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_profiling

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_profiling_history_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_progress_report_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_protocol_version

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_alloc_block_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_cache_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_cache_min_res_unit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_cache_strip_comments

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_cache_type

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_cache_wlock_invalidate

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_query_prealloc_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_range_alloc_block_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_read_binlog_speed_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_read_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_read_only

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_read_rnd_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_relay_log_purge

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_relay_log_recovery

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_relay_log_space_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_replicate_annotate_row_events

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_report_port

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_require_secure_transport

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rowid_merge_buff_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_master_enabled

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_master_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_master_trace_level

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_master_wait_no_slave

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_slave_delay_master

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_slave_enabled

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_slave_kill_conn_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_rpl_semi_sync_slave_trace_level

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_secure_auth

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_secure_timestamp

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_file_rotate_now

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_file_rotate_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_file_rotations

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_load_on_error

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_logging

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_mode

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_query_log_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_audit_reload_filters

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_server_id

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_session_track_schema

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_session_track_state_change

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_session_track_transaction_info

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_shutdown_wait_for_slaves

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_simple_password_check_digits

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_simple_password_check_letters_same_case

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_simple_password_check_minimal_length

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_simple_password_check_other_characters

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_skip_external_locking

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_skip_grant_tables

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_skip_name_resolve

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_skip_networking

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_skip_show_database

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_compressed_protocol

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_connections_needed_for_purge

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_domain_parallel_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_max_allowed_packet

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_max_statement_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_net_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_parallel_max_queued

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_parallel_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_parallel_workers

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_run_triggers_for_rbr

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_skip_errors

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_sql_verify_checksum

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_transaction_retries

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slave_transaction_retry_interval

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slow_launch_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_slow_query_log

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sort_buffer_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_auto_is_null

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_big_selects

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_buffer_result

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_if_exists

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_log_bin

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_log_off

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_notes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_quote_show_create

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_safe_updates

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_select_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_slave_skip_counter

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sql_warnings

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_standard_compliant_cte

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_stored_program_cache

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_strict_password_validation

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sync_binlog

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sync_frm

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sync_master_info

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sync_relay_log

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_sync_relay_log_info

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_system_versioning_insert_history

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_table_definition_cache

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_table_open_cache

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_table_open_cache_instances

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tcp_keepalive_interval

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tcp_keepalive_probes

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tcp_keepalive_time

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tcp_nodelay

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_cache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_dedicated_listener

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_exact_stats

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_idle_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_max_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_oversubscribe

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_prio_kickup_timer

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_reshuffle_group_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_pool_stall_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_thread_stack

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tmp_disk_table_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tmp_memory_table_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tmp_table_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_transaction_alloc_block_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_transaction_prealloc_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_transaction_read_only

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_tx_read_only

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_unique_checks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_updatable_views_with_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_userstat

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wait_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_auto_increment_control

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_black_box_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_certificate_expiration_hours_warning

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_certify_nonpk

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_convert_lock_to_trx

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_desync

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_dirty_reads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_drupal_282555_workaround

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_gtid_domain_id

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_gtid_mode

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_ignore_apply_errors

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_load_data_splitting

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_log_conflicts

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_max_ws_rows

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_max_ws_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_mysql_replication_bundle

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_on

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_base_port

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_cert_log_conflicts

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_cert_optimistic_pa

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_debug

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_auto_evict

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_causal_keepalive_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_delay_margin

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_delayed_keep_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_inactive_check_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_inactive_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_info_log_mask

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_install_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_join_retrans_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_keepalive_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_max_install_timeouts

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_send_window

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_stats_report_period

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_suspect_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_use_aggregate

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_user_send_window

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_version

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_evs_view_forget_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcache_keep_pages_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcache_keep_plaintext_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcache_mem_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcache_page_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcache_recover

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcache_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_fc_debug

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_fc_factor

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_fc_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_fc_master_slave

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_fc_single_primary

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_max_packet_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_max_throttle

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_recv_q_hard_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_recv_q_soft_limit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_sync_donor

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gcs_vote_policy

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gmcast_mcast_ttl

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gmcast_peer_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gmcast_segment

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gmcast_time_wait

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_gmcast_version

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_announce_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_bootstrap

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_checksum

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_ignore_quorum

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_ignore_sb

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_linger

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_npvo

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_recovery

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_version

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_wait_prim

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_wait_prim_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_pc_weight

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_protonet_version

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_repl_causal_read_timeout

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_repl_commit_order

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_repl_max_ws_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_repl_proto_max

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_socket_checksum

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_socket_dynamic

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_socket_ssl

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_socket_ssl_cipher

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_socket_ssl_compression

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_provider_socket_ssl_reload

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_recover

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_restart_slave

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_retry_autocommit

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_slave_fk_checks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_slave_threads

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_slave_uk_checks

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_sst_donor_rejects_queries

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_sync_wait

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_global_variables_wsrep_trx_fragment_size

    Generic gauge metric from SHOW GLOBAL VARIABLES.

    GAUGE

    mysql_info_schema_innodb_cmp_compress_ops_ok_total

    Number of times a B-tree page of the size PAGE_SIZE has been successfully compressed.

    COUNTER

    mysql_info_schema_innodb_cmp_compress_ops_total

    Number of times a B-tree page of the size PAGE_SIZE has been compressed.

    COUNTER

    mysql_info_schema_innodb_cmp_compress_time_seconds_total

    Total time in seconds spent in attempts to compress B-tree pages.

    COUNTER

    mysql_info_schema_innodb_cmp_uncompress_ops_total

    Number of times a B-tree page of the size PAGE_SIZE has been uncompressed.

    COUNTER

    mysql_info_schema_innodb_cmp_uncompress_time_seconds_total

    Total time in seconds spent in uncompressing B-tree pages.

    COUNTER

    mysql_info_schema_innodb_cmpmem_pages_free_total

    Number of blocks of the size PAGE_SIZE that are currently available for allocation.

    COUNTER

    mysql_info_schema_innodb_cmpmem_pages_used_total

    Number of blocks of the size PAGE_SIZE that are currently in use.

    COUNTER

    mysql_info_schema_innodb_cmpmem_relocation_ops_total

    Number of times a block of the size PAGE_SIZE has been relocated.

    COUNTER

    mysql_info_schema_innodb_cmpmem_relocation_time_seconds_total

    Total time in seconds spent in relocating blocks.

    COUNTER

    mysql_transaction_isolation

    MySQL transaction isolation.

    GAUGE

    mysql_up

    Whether the MySQL server is up.

    GAUGE

    mysql_version_info

    MySQL version and distribution.

    GAUGE

    maxscale_logging_level

    The current logging levels active.

    GAUGE

    maxscale_logging_maxlog

    Whether maxlog is active.

    GAUGE

    maxscale_logging_syslog

    Whether syslog is active.

    GAUGE

    maxscale_logging_throttling_count

    The number of logging throttling.

    GAUGE

    maxscale_logging_throttling_suppress_milliseconds

    The value of throttling suppress_ms.

    GAUGE

    maxscale_logging_throttling_suppress_window_milliseconds

    The value of throttling window_ms.

    GAUGE

    maxscale_modules

    Maxscale modules currently enabled.

    GAUGE

    maxscale_monitor

    Maxscale Monitor.

    GAUGE

    maxscale_server_active_operations

    The number of active operations.

    GAUGE

    maxscale_server_adaptive_avg_select_time

    The adaptive average select time. This is always zero.

    GAUGE

    maxscale_server_connection_pool_empty

    The current connection pool empty

    GAUGE

    maxscale_server_connections

    The current number of connections to the server.

    GAUGE

    maxscale_server_max_connections

    The max number of connections.

    GAUGE

    maxscale_server_max_pool_size

    The current max pool size,

    GAUGE

    maxscale_server_persistent_connections

    The number of persistent connections to the server.

    GAUGE

    maxscale_server_reused_connections

    The number of Re-used Connections by the server.

    GAUGE

    maxscale_server_routed_packets

    The number of routed packets to the server,

    GAUGE

    maxscale_server_state

    The current state of the server.

    GAUGE

    maxscale_server_total_connections

    The total number of connections to the server.

    COUNTER

    maxscale_service_active_connections

    The total number of active operations to the service.

    GAUGE

    maxscale_service_connections

    The current number of connections to the server.

    GAUGE

    maxscale_service_state

    The current state of each service.

    GAUGE

    maxscale_service_statistics_connections

    The total number of connections to the service.

    GAUGE

    maxscale_service_statistics_failed_auths

    The total number of failed authentications to the service.

    COUNTER

    maxscale_service_statistics_max_connections

    The max number of connections to the service.

    GAUGE

    maxscale_service_statistics_routed_packets

    The total number of routed packets to the service.

    GAUGE

    maxscale_service_statistics_total_connections

    The total number of connections to the service.

    COUNTER

    maxscale_service_total_connections

    The total number of connections to the server.

    COUNTER

    maxscale_threads_accepts

    The number of accept events.

    COUNTER

    maxscale_threads_blocking_polls

    The number of non-blocking poll cycles that will be done before a blocking poll takes place.

    GAUGE

    maxscale_threads_count

    The number of threads

    GAUGE

    maxscale_threads_current_descriptors

    The current number of descriptors handled by each thread.

    GAUGE

    maxscale_threads_errors

    The number of error events.

    COUNTER

    maxscale_threads_event_queue_length

    The amount of I/O events returned by one call to epoll_wait().

    GAUGE

    maxscale_threads_hangups

    The number of hangup events.

    COUNTER

    maxscale_threads_load_last_hour

    The load during the last 60m.

    GAUGE

    maxscale_threads_load_last_minute

    The load during the last 60s.

    GAUGE

    maxscale_threads_load_last_second

    The load during the last second.

    GAUGE

    maxscale_threads_max_event_queue_length

    The maximum amount of I/O events returned by one call to epoll_wait().

    GAUGE

    maxscale_threads_max_exec_time

    The maximum time it took to process an I/O event.

    GAUGE

    maxscale_threads_max_queue_time

    The maximum time it took before an I/O event became ready for processing (ms).

    GAUGE

    maxscale_threads_reads

    The number of read events.

    COUNTER

    maxscale_threads_stack_size

    The stack size of each worker.

    GAUGE

    maxscale_threads_total_descriptors

    The total number of descriptors handled by each thread since MaxScale startup.

    GAUGE

    maxscale_threads_writes

    The number of write events.

    COUNTER

    maxscale_up

    Whether the Maxscale server is up.

    GAUGE

    maxscale_uptime_seconds

    Maxscale uptime in seconds

    GAUGE

    maxscale_version

    Maxscale Version

    GAUGE

    Metric Name

    Description

    Type

    mysql_exporter_collector_duration_seconds

    Collector time duration.

    GAUGE

    mysql_exporter_collector_success

    mysqld_exporter: Whether a collector succeeded.

    GAUGE

    mysql_galera_evs_repl_latency_avg_seconds

    PXC/Galera group communication latency. Avg value.

    GAUGE

    maxscale_exporter_collector_duration_seconds

    Collector time duration.

    GAUGE

    maxscale_exporter_last_scrape_error

    Whether the last scrape of metrics from MariaDB resulted in an error (1 for error, 0 for success).

    GAUGE

    maxscale_exporter_scrapes_total

    Total number of times MariaDB was scraped for metrics.

    COUNTER

    maxscale_logging_high_precision

    Whether high precision logging is active.

    GAUGE

    ServiceMonitorarrow-up-right
    Prometheus operatorarrow-up-right
    API reference
    grafana.comarrow-up-right
    MariaDB metrics
    MySQL Overviewarrow-up-right
    MySQL Exporter Quickstart and Dashboardarrow-up-right
    MySQL Replicationarrow-up-right
    Galera/MariaDB - Overviewarrow-up-right
    spinner
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
    ...
      metrics:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale
    spec:
    ...
      metrics:
        enabled: true
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MariaDB
    metadata:
      name: mariadb
    spec:
    ...
      metrics:
        enabled: true
        exporter:
          image: mariadb/mariadb-prometheus-exporter-ubi:v0.0.2
          resources:
            requests:
              cpu: 50m
              memory: 64Mi
            limits:
              cpu: 300m
              memory: 512Mi
          port: 9104
        serviceMonitor:
          prometheusRelease: kube-prometheus-stack
          jobLabel: mariadb-monitoring
          interval: 10s
          scrapeTimeout: 10s
        username: monitoring
        passwordSecretKeyRef:
          name: mariadb
          key: password
    apiVersion: enterprise.mariadb.com/v1alpha1
    kind: MaxScale
    metadata:
      name: maxscale
    spec:
    ...
      auth:
        metricsUsername: metrics
        metricsPasswordSecretKeyRef:
          key: password
          name: maxscale-galera-metrics
      metrics:
        enabled: true
        exporter:
          image: mariadb/maxscale-prometheus-exporter-ubi:v0.0.2
          resources:
            requests:
              cpu: 50m
              memory: 64Mi
            limits:
              cpu: 300m
              memory: 512Mi
          port: 9105
        serviceMonitor:
          prometheusRelease: kube-prometheus-stack
          jobLabel: mariadb-monitoring
          interval: 10s
          scrapeTimeout: 10s
    release notes
    release notes

    API Reference

    Technical documentation of the Custom Resource Definitions (CRDs) and API fields used to configure the MariaDB Enterprise Kubernetes Operator.

    hashtag
    Packages

    • enterprise.mariadb.com/v1alpha1

    hashtag
    enterprise.mariadb.com/v1alpha1

    Package v1alpha1 contains API Schema definitions for the v1alpha1 API group

    hashtag
    Resource Types

    hashtag
    Affinity

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#affinity-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    AffinityConfig

    AffinityConfig defines policies to schedule Pods in Nodes.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Agent

    Agent is a sidecar agent that co-operates with mariadb-enterprise-operator.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    AzureBlob

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Backup

    Backup is the Schema for the backups API. It is used to define backup jobs and its storage.

    Field
    Description
    Default
    Validation

    hashtag
    BackupContentType

    Underlying type: string

    BackupContentType defines the backup content type.

    Appears in:

    Field
    Description

    hashtag
    BackupSpec

    BackupSpec defines the desired state of Backup

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    BackupStorage

    BackupStorage defines the final storage for backups.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    BasicAuth

    BasicAuth refers to the basic authentication mechanism utilized for establishing a connection from the operator to the agent.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    BootstrapFrom

    BootstrapFrom defines a source to bootstrap MariaDB from.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    CSIVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#csivolumesource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    CertConfig

    CertConfig defines parameters to configure a certificate.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    CleanupPolicy

    Underlying type: string

    CleanupPolicy defines the behavior for cleaning up a resource.

    Appears in:

    Field
    Description

    hashtag
    CompressAlgorithm

    Underlying type: string

    CompressAlgorithm defines the compression algorithm for a Backup resource.

    Appears in:

    Field
    Description

    hashtag
    ConfigMapKeySelector

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#configmapkeyselector-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ConfigMapVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#configmapvolumesource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Connection

    Connection is the Schema for the connections API. It is used to configure connection strings for the applications connecting to MariaDB.

    Field
    Description
    Default
    Validation

    hashtag
    ConnectionSpec

    ConnectionSpec defines the desired state of Connection

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ConnectionTemplate

    ConnectionTemplate defines a template to customize Connection objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Container

    Container object definition.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ContainerTemplate

    ContainerTemplate defines a template to configure Container objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    CooperativeMonitoring

    Underlying type: string

    CooperativeMonitoring enables coordination between multiple MaxScale instances running monitors. See: https://mariadb.com/docs/server/architecture/components/maxscale/monitors/mariadbmon/use-cooperative-locking-ha-maxscale-mariadb-monitor/

    Appears in:

    Field
    Description

    hashtag
    CronJobTemplate

    CronJobTemplate defines parameters for configuring CronJob objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Database

    Database is the Schema for the databases API. It is used to define a logical database as if you were running a 'CREATE DATABASE' statement.

    Field
    Description
    Default
    Validation

    hashtag
    DatabaseSpec

    DatabaseSpec defines the desired state of Database

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    EmptyDirVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#emptydirvolumesource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    EnvFromSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#envfromsource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    EnvVar

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#envvarsource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    EnvVarSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#envvarsource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ExecAction

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#execaction-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Exporter

    Exporter defines a metrics exporter container.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ExternalMariaDB

    ExternalMariaDB is the Schema for the external MariaDBs API. It is used to define external MariaDB server.

    Field
    Description
    Default
    Validation

    hashtag
    ExternalMariaDBSpec

    ExternalMariaDBSpec defines the desired state of an External MariaDB

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ExternalTLS

    ExternalTLS defines the TLS configuration for external MariaDB instances.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Galera

    Galera allows you to enable multi-master HA via Galera in your MariaDB cluster.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    GaleraConfig

    GaleraConfig defines storage options for the Galera configuration files.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    GaleraInitJob

    GaleraInitJob defines a Job used to be used to initialize the Galera cluster.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    GaleraRecovery

    GaleraRecovery is the recovery process performed by the operator whenever the Galera cluster is not healthy. More info: https://galeracluster.com/library/documentation/crash-recovery.html.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    GaleraRecoveryJob

    GaleraRecoveryJob defines a Job used to be used to recover the Galera cluster.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    GaleraSpec

    GaleraSpec is the Galera desired state specification.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    GeneratedSecretKeyRef

    GeneratedSecretKeyRef defines a reference to a Secret that can be automatically generated by mariadb-enterprise-operator if needed.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Grant

    Grant is the Schema for the grants API. It is used to define grants as if you were running a 'GRANT' statement.

    Field
    Description
    Default
    Validation

    hashtag
    GrantSpec

    GrantSpec defines the desired state of Grant

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Gtid

    Underlying type: string

    Gtid indicates which Global Transaction ID (GTID) position mode should be used when connecting a replica to the master. See: https://mariadb.com/kb/en/gtid/#using-current_pos-vs-slave_pos.

    Appears in:

    Field
    Description

    hashtag
    HTTPGetAction

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#httpgetaction-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    HealthCheck

    HealthCheck defines intervals for performing health checks.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    HostPathVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#hostpathvolumesource-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    InitContainer

    InitContainer is an init container that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Job

    Job defines a Job used to be used with MariaDB.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    JobContainerTemplate

    JobContainerTemplate defines a template to configure Container objects that run in a Job.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    JobPodTemplate

    JobPodTemplate defines a template to configure Container objects that run in a Job.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    KubernetesAuth

    KubernetesAuth refers to the Kubernetes authentication mechanism utilized for establishing a connection from the operator to the agent. The agent validates the legitimacy of the service account token provided as an Authorization header by creating a TokenReview resource.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    LabelSelector

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#labelselector-v1-meta

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    LabelSelectorRequirement

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#labelselectorrequirement-v1-meta

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    LocalObjectReference

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#localobjectreference-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MariaDB

    MariaDB is the Schema for the mariadbs API. It is used to define MariaDB clusters.

    Field
    Description
    Default
    Validation

    hashtag
    MariaDBRef

    MariaDBRef is a reference to a MariaDB object.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MariaDBSpec

    MariaDBSpec defines the desired state of MariaDB

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MariadbMetrics

    MariadbMetrics defines the metrics for a MariaDB.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScale

    MaxScale is the Schema for the maxscales API. It is used to define MaxScale clusters.

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleAdmin

    MaxScaleAdmin configures the admin REST API and GUI.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleAuth

    MaxScaleAuth defines the credentials required for MaxScale to connect to MariaDB.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleConfig

    MaxScaleConfig defines the MaxScale configuration.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleConfigSync

    MaxScaleConfigSync defines how the config changes are replicated across replicas.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleListener

    MaxScaleListener defines how the MaxScale server will listen for connections.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleMetrics

    MaxScaleMetrics defines the metrics for a Maxscale.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleMonitor

    MaxScaleMonitor monitors MariaDB server instances

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScalePodTemplate

    MaxScalePodTemplate defines a template for MaxScale Pods.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleServer

    MaxScaleServer defines a MariaDB server to forward traffic to.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleService

    Services define how the traffic is forwarded to the MariaDB servers.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleSpec

    MaxScaleSpec defines the desired state of MaxScale.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MaxScaleTLS

    TLS defines the PKI to be used with MaxScale.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Metadata

    Metadata defines the metadata to added to resources.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    MonitorModule

    Underlying type: string

    MonitorModule defines the type of monitor module

    Appears in:

    Field
    Description

    hashtag
    NFSVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#nfsvolumesource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    NodeAffinity

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#nodeaffinity-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    NodeSelector

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#nodeselector-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    NodeSelectorRequirement

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#nodeselectorrequirement-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    NodeSelectorTerm

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#nodeselectorterm-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ObjectFieldSelector

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#objectfieldselector-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ObjectReference

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#objectreference-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PasswordPlugin

    PasswordPlugin defines the password plugin and its arguments.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PersistentVolumeClaimRetentionPolicyType

    Underlying type: string

    PersistentVolumeClaimRetentionPolicyType describes the lifecycle of persistent volume claims. Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#statefulsetpersistentvolumeclaimretentionpolicy-v1-apps.

    Appears in:

    Field
    Description

    hashtag
    PersistentVolumeClaimSpec

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#persistentvolumeclaimspec-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PersistentVolumeClaimVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#persistentvolumeclaimvolumesource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PhysicalBackup

    PhysicalBackup is the Schema for the physicalbackups API. It is used to define physical backup jobs and its storage.

    Field
    Description
    Default
    Validation

    hashtag
    PhysicalBackupPodTemplate

    PhysicalBackupPodTemplate defines a template to configure Container objects that run in a PhysicalBackup.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PhysicalBackupSchedule

    PhysicalBackupSchedule defines when the PhysicalBackup will be taken.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PhysicalBackupSpec

    PhysicalBackupSpec defines the desired state of PhysicalBackup.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PhysicalBackupStorage

    PhysicalBackupStorage defines the storage for physical backups.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PhysicalBackupTarget

    Underlying type: string

    PhysicalBackupTarget defines in which Pod the physical backups will be taken.

    Appears in:

    Field
    Description

    hashtag
    PhysicalBackupVolumeSnapshot

    PhysicalBackupVolumeSnapshot defines parameters for the VolumeSnapshots used as physical backups.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PodAffinityTerm

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#podaffinityterm-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PodAntiAffinity

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#podantiaffinity-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PodDisruptionBudget

    PodDisruptionBudget is the Pod availability bundget for a MariaDB

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PodSecurityContext

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#podsecuritycontext-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PodTemplate

    PodTemplate defines a template to configure Container objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PointInTimeRecovery

    PointInTimeRecovery is the Schema for the pointintimerecoveries API. It contains binlog archival and point-in-time restoration settings.

    Field
    Description
    Default
    Validation

    hashtag
    PointInTimeRecoverySpec

    PointInTimeRecoverySpec defines the desired state of PointInTimeRecovery. It contains binlog archive and point-in-time restoration settings.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PointInTimeRecoveryStorage

    PointInTimeRecoveryStorage stores the different storage options for PITR

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PreferredSchedulingTerm

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#preferredschedulingterm-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PrimaryGalera

    PrimaryGalera is the Galera configuration for the primary node.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    PrimaryReplication

    PrimaryReplication is the replication configuration and operation parameters for the primary.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Probe

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#probe-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ProbeHandler

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#probe-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ReplicaBootstrapFrom

    ReplicaBootstrapFrom defines the sources for bootstrapping new relicas.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ReplicaRecovery

    ReplicaRecovery defines how the replicas should be recovered after they enter an error state.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ReplicaReplication

    ReplicaReplication is the replication configuration and operation parameters for the replicas.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Replication

    Replication defines replication configuration for a MariaDB cluster.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ReplicationSpec

    ReplicationSpec is the replication desired state.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ResourceRequirements

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#resourcerequirements-v1-core.

    Appears in:

    hashtag
    Restore

    Restore is the Schema for the restores API. It is used to define restore jobs and its restoration source.

    Field
    Description
    Default
    Validation

    hashtag
    RestoreSource

    RestoreSource defines a source for restoring a logical backup.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    RestoreSpec

    RestoreSpec defines the desired state of restore

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    S3

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SQLTemplate

    SQLTemplate defines a template to customize SQL objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SSECConfig

    SSECConfig defines the configuration for SSE-C (Server-Side Encryption with Customer-Provided Keys).

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SST

    Underlying type: string

    SST is the Snapshot State Transfer used when new Pods join the cluster. More info: https://galeracluster.com/library/documentation/sst.html.

    Appears in:

    Field
    Description

    hashtag
    Schedule

    Schedule contains parameters to define a schedule

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SecretKeySelector

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#secretkeyselector-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SecretTemplate

    SecretTemplate defines a template to customize Secret objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SecretVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#secretvolumesource-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SecurityContext

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#securitycontext-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ServiceMonitor

    ServiceMonitor defines a prometheus ServiceMonitor object.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ServicePort

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#serviceport-v1-core

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    ServiceRouter

    Underlying type: string

    ServiceRouter defines the type of service router.

    Appears in:

    Field
    Description

    hashtag
    ServiceTemplate

    ServiceTemplate defines a template to customize Service objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SqlJob

    SqlJob is the Schema for the sqljobs API. It is used to run sql scripts as jobs.

    Field
    Description
    Default
    Validation

    hashtag
    SqlJobSpec

    SqlJobSpec defines the desired state of SqlJob

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    StagingStorage

    StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    StatefulSetPersistentVolumeClaimRetentionPolicy

    StatefulSetPersistentVolumeClaimRetentionPolicy describes the lifecycle of PVCs created from volumeClaimTemplates. Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#statefulsetpersistentvolumeclaimretentionpolicy-v1-apps.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Storage

    Storage defines the storage options to be used for provisioning the PVCs mounted by MariaDB.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    StorageVolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#volume-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    SuspendTemplate

    SuspendTemplate indicates whether the current resource should be suspended or not.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    TCPSocketAction

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#tcpsocketaction-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    TLS

    TLS defines the PKI to be used with MariaDB.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    TLSConfig

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    TLSRequirements

    TLSRequirements specifies TLS requirements for the user to connect. See: https://mariadb.com/kb/en/securing-connections-for-client-and-server/#requiring-tls.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    TopologySpreadConstraint

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#topologyspreadconstraint-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    TypedLocalObjectReference

    TypedLocalObjectReference is a reference to a specific object type.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    UpdateStrategy

    UpdateStrategy defines how a MariaDB resource is updated.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    UpdateType

    Underlying type: string

    UpdateType defines the type of update for a MariaDB resource.

    Appears in:

    Field
    Description

    hashtag
    User

    User is the Schema for the users API. It is used to define grants as if you were running a 'CREATE USER' statement.

    Field
    Description
    Default
    Validation

    hashtag
    UserSpec

    UserSpec defines the desired state of User

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    Volume

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#volume-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    VolumeClaimTemplate

    VolumeClaimTemplate defines a template to customize PVC objects.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    VolumeMount

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#volumemount-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    VolumeSource

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#volume-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation

    hashtag
    WaitPoint

    Underlying type: string

    WaitPoint defines whether the transaction should wait for ACK before committing to the storage engine. More info: https://mariadb.com/kb/en/semisynchronous-replication/#rpl_semi_sync_master_wait_point.

    Appears in:

    Field
    Description

    hashtag
    WeightedPodAffinityTerm

    Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#weightedpodaffinityterm-v1-core.

    Appears in:

    Field
    Description
    Default
    Validation
    ExternalMariaDB
  • Grant

  • MariaDB

  • MaxScale

  • PhysicalBackup

  • PointInTimeRecovery

  • Restore

  • SqlJob

  • User

  • JobPodTemplate
  • MariaDBSpec

  • MaxScalePodTemplate

  • MaxScaleSpec

  • PodTemplate

  • RestoreSpec

  • SqlJobSpec

  • ReplicationSpec

    envFrom array

    EnvFrom represents the references (via ConfigMap and Secrets) to environment variables to be injected in the container.

    volumeMounts array

    VolumeMounts to be used in the Container.

    livenessProbe

    LivenessProbe to be used in the Container.

    readinessProbe

    ReadinessProbe to be used in the Container.

    startupProbe

    StartupProbe to be used in the Container.

    resources

    Resources describes the compute resource requirements.

    securityContext

    SecurityContext holds security configuration that will be applied to a container.

    image string

    Image name to be used by the MariaDB instances. The supported format is <image>:<tag>.

    imagePullPolicy

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    Enum: [Always Never IfNotPresent]

    port integer

    Port where the agent will be listening for API connections.

    probePort integer

    Port where the agent will be listening for probe connections.

    kubernetesAuth

    KubernetesAuth to be used by the agent container

    basicAuth

    BasicAuth to be used by the agent container

    gracefulShutdownTimeout

    GracefulShutdownTimeout is the time we give to the agent container in order to gracefully terminate in-flight requests.

    storageAccountName string

    StorageAccountName is the name of the storage account. Pairs with StorageAccountKey for static credential authentication

    storageAccountKey

    StorageAccountKey is a reference to a Secret key containing the Azure Blob Storage Storage account Key. Pairs with StorageAccountKey for static credential authentication

    tls

    TLS provides the configuration required to establish TLS connections with Azure Blob Storage.

    spec

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    successfulJobsHistoryLimit integer

    SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed.

    Minimum: 0

    failedJobsHistoryLimit integer

    FailedJobsHistoryLimit defines the maximum number of failed Jobs to be displayed.

    Minimum: 0

    timeZone string

    TimeZone defines the timezone associated with the cron expression.

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    compression

    Compression algorithm to be used in the Backup.

    Enum: [none bzip2 gzip]

    stagingStorage

    StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed. It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Backup Job is scheduled. The staging area gets cleaned up after each backup is completed, consider this for sizing it appropriately.

    storage

    Storage defines the final storage for backups.

    Required: {}

    schedule

    Schedule defines when the Backup will be taken.

    maxRetention

    MaxRetention defines the retention policy for backups. Old backups will be cleaned up by the Backup Job. It defaults to 30 days.

    databases string array

    Databases defines the logical databases to be backed up. If not provided, all databases are backed up.

    ignoreGlobalPriv boolean

    IgnoreGlobalPriv indicates to ignore the mysql.global_priv in backups. If not provided, it will default to true when the referred MariaDB instance has Galera enabled and otherwise to false.

    logLevel string

    LogLevel to be used in the Backup Job. It defaults to 'info'.

    info

    Enum: [debug info warn error dpanic panic fatal]

    backoffLimit integer

    BackoffLimit defines the maximum number of attempts to successfully take a Backup.

    restartPolicy

    RestartPolicy to be added to the Backup Pod.

    OnFailure

    Enum: [Always OnFailure Never]

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    backupContentType

    BackupContentType is the backup content type available in the source to bootstrap from. It is inferred based on the BackupRef and VolumeSnapshotRef fields. If inference is not possible, it defaults to Logical. Set this field explicitly when using physical backups from S3 or Volume sources.

    Enum: [Logical Physical]

    s3

    S3 defines the configuration to restore backups from a S3 compatible storage. This field takes precedence over the Volume source.

    azureBlob

    AzureBlob defines the configuration to restore from Azure Blob compatible storage. This field takes precedence over the Volume source.

    volume

    Volume is a Kubernetes Volume object that contains a backup.

    targetRecoveryTime

    TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective. It is used to determine the closest restoration source in time.

    stagingStorage

    StagingStorage defines the temporary storage used to keep external backups and binary logs (i.e. S3) while they are being processed. It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Job is scheduled.

    restoreJob

    RestoreJob defines additional properties for the restoration Job.

    logLevel string

    LogLevel to be used in the mariadb-enterprise-operator container of the restoration Job. It defaults to 'info'.

    info

    Enum: [debug info warn error dpanic panic fatal]

    volumeAttributes object (keys:string, values:string)

    nodePublishSecretRef

    privateKeySize integer

    PrivateKeyAlgorithm is the key size to be used for the CA and leaf certificate private keys. Supported values: ECDSA(256, 384, 521), RSA(2048, 3072, 4096)

    SQLTemplate
  • UserSpec

  • spec

    params object (keys:string, values:string)

    Params to be used in the Connection.

    serviceName string

    ServiceName to be used in the Connection.

    port integer

    Port to connect to. If not provided, it defaults to the MariaDB port or to the first MaxScale listener.

    mariaDbRef

    MariaDBRef is a reference to the MariaDB to connect to. Either MariaDBRef or MaxScaleRef must be provided.

    maxScaleRef

    MaxScaleRef is a reference to the MaxScale to connect to. Either MariaDBRef or MaxScaleRef must be provided.

    username string

    Username to use for configuring the Connection.

    Required: {}

    passwordSecretKeyRef

    PasswordSecretKeyRef is a reference to the password to use for configuring the Connection. Either passwordSecretKeyRef or tlsClientCertSecretRef must be provided as client credentials. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    tlsClientCertSecretRef

    TLSClientCertSecretRef is a reference to a Kubernetes TLS Secret used as authentication when checking the connection health. Either passwordSecretKeyRef or tlsClientCertSecretRef must be provided as client credentials. If not provided, the client certificate provided by the referred MariaDB is used if TLS is enabled. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the client certificate.

    host string

    Host to connect to. If not provided, it defaults to the MariaDB host or to the MaxScale host.

    database string

    Database to use when configuring the Connection.

    MaxScaleSpec

    params object (keys:string, values:string)

    Params to be used in the Connection.

    serviceName string

    ServiceName to be used in the Connection.

    port integer

    Port to connect to. If not provided, it defaults to the MariaDB port or to the first MaxScale listener.

    command string array

    Command to be used in the Container.

    args string array

    Args to be used in the Container.

    env array

    Env represents the environment variables to be injected in a container.

    volumeMounts array

    VolumeMounts to be used in the Container.

    resources

    Resources describes the compute resource requirements.

    MaxScaleSpec

    envFrom array

    EnvFrom represents the references (via ConfigMap and Secrets) to environment variables to be injected in the container.

    volumeMounts array

    VolumeMounts to be used in the Container.

    livenessProbe

    LivenessProbe to be used in the Container.

    readinessProbe

    ReadinessProbe to be used in the Container.

    startupProbe

    StartupProbe to be used in the Container.

    resources

    Resources describes the compute resource requirements.

    securityContext

    SecurityContext holds security configuration that will be applied to a container.

    spec

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    characterSet string

    CharacterSet to use in the Database.

    utf8

    collate string

    Collate to use in the Database.

    utf8_general_ci

    name string

    Name overrides the default Database name provided by metadata.name.

    MaxLength: 80

    MariaDBSpec
  • MaxScaleSpec

  • InitContainer
  • MariaDBSpec

  • MaxScaleSpec

  • args string array

    Args to be used in the Container.

    port integer

    Port where the exporter will be listening for connections.

    resources

    Resources describes the compute resource requirements.

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    securityContext

    SecurityContext holds container-level security attributes.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    spec

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    host string

    Hostname of the external MariaDB.

    Required: {}

    port integer

    Port of the external MariaDB.

    3306

    username string

    Username is the username to connect to the external MariaDB.

    Required: {}

    passwordSecretKeyRef

    PasswordSecretKeyRef is a reference to the password to connect to the external MariaDB.

    tls

    TLS defines the PKI to be used with the external MariaDB.

    connection

    Connection defines a template to configure a Connection for the external MariaDB.

    serverCASecretRef

    ServerCASecretRef is a reference to a Secret containing the server certificate authority keypair. It is used to establish trust and issue server certificates. One of: - Secret containing both the 'ca.crt' and 'ca.key' keys. This allows you to bring your own CA to Kubernetes to issue certificates. - Secret containing only the 'ca.crt' in order to establish trust. In this case, either serverCertSecretRef or serverCertIssuerRef must be provided. If not provided, a self-signed CA will be provisioned to issue the server certificate.

    serverCertSecretRef

    ServerCertSecretRef is a reference to a TLS Secret containing the server certificate. It is mutually exclusive with serverCertIssuerRef.

    serverCertIssuerRef

    ServerCertIssuerRef is a reference to a cert-manager issuer object used to issue the server certificate. cert-manager must be installed previously in the cluster. It is mutually exclusive with serverCertSecretRef. By default, the Secret field 'ca.crt' provisioned by cert-manager will be added to the trust chain. A custom trust bundle may be specified via serverCASecretRef.

    serverCertConfig

    ServerCertConfig allows configuring the server certificates, either issued by the operator or cert-manager. If not set, the default settings will be used.

    clientCASecretRef

    ClientCASecretRef is a reference to a Secret containing the client certificate authority keypair. It is used to establish trust and issue client certificates. One of: - Secret containing both the 'ca.crt' and 'ca.key' keys. This allows you to bring your own CA to Kubernetes to issue certificates. - Secret containing only the 'ca.crt' in order to establish trust. In this case, either clientCertSecretRef or clientCertIssuerRef fields must be provided. If not provided, a self-signed CA will be provisioned to issue the client certificate.

    clientCertSecretRef

    ClientCertSecretRef is a reference to a TLS Secret containing the client certificate. It is mutually exclusive with clientCertIssuerRef.

    clientCertIssuerRef

    ClientCertIssuerRef is a reference to a cert-manager issuer object used to issue the client certificate. cert-manager must be installed previously in the cluster. It is mutually exclusive with clientCertSecretRef. By default, the Secret field 'ca.crt' provisioned by cert-manager will be added to the trust chain. A custom trust bundle may be specified via clientCASecretRef.

    clientCertConfig

    ClientCertConfig allows configuring the client certificates, either issued by the operator or cert-manager. If not set, the default settings will be used.

    galeraSSTEnabled boolean

    GaleraSSTEnabled determines whether Galera SST connections should use TLS. It disabled by default.

    galeraServerSSLMode string

    GaleraServerSSLMode defines the server SSL mode for a Galera Enterprise cluster. This field is only supported and applicable for Galera Enterprise >= 10.6 instances. Refer to the MariaDB Enterprise docs for more detail: https://mariadb.com/docs/galera-cluster/galera-security/mariadb-enterprise-cluster-security#wsrep-tls-modes

    Enum: [PROVIDER SERVER SERVER_X509]

    galeraClientSSLMode string

    GaleraClientSSLMode defines the client SSL mode for a Galera Enterprise cluster. This field is only supported and applicable for Galera Enterprise >= 10.6 instances. Refer to the MariaDB Enterprise docs for more detail: https://mariadb.com/docs/galera-cluster/galera-security/mariadb-enterprise-cluster-security#sst-tls-modes

    Enum: [DISABLED REQUIRED VERIFY_CA VERIFY_IDENTITY]

    mutual boolean

    Mutual specifies whether TLS must be mutual between server and client for external connections. When set to false, the client certificate will not be sent during the TLS handshake. It is enabled by default.

    galeraLibPath string

    GaleraLibPath is a path inside the MariaDB image to the wsrep provider plugin. It is defaulted if not provided. More info: https://galeracluster.com/library/documentation/mysql-wsrep-options.html#wsrep-provider.

    replicaThreads integer

    ReplicaThreads is the number of replica threads used to apply Galera write sets in parallel. More info: https://mariadb.com/kb/en/galera-cluster-system-variables/#wsrep_slave_threads.

    providerOptions object (keys:string, values:string)

    ProviderOptions is map of Galera configuration parameters. More info: https://mariadb.com/kb/en/galera-cluster-system-variables/#wsrep_provider_options.

    agent

    Agent is a sidecar agent that co-operates with mariadb-enterprise-operator.

    recovery

    GaleraRecovery is the recovery process performed by the operator whenever the Galera cluster is not healthy. More info: https://galeracluster.com/library/documentation/crash-recovery.html.

    initContainer

    InitContainer is an init container that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    initJob

    InitJob defines a Job that co-operates with mariadb-enterprise-operator by performing initialization tasks.

    config

    GaleraConfig defines storage options for the Galera configuration files.

    clusterName string

    ClusterName is the name of the cluster to be used in the Galera config file.

    enabled boolean

    Enabled is a flag to enable Galera.

    clusterHealthyTimeout

    ClusterHealthyTimeout represents the duration at which a Galera cluster, that consistently failed health checks, is considered unhealthy, and consequently the Galera recovery process will be initiated by the operator.

    clusterBootstrapTimeout

    ClusterBootstrapTimeout is the time limit for bootstrapping a cluster. Once this timeout is reached, the Galera recovery state is reset and a new cluster bootstrap will be attempted.

    clusterUpscaleTimeout

    ClusterUpscaleTimeout represents the maximum duration for upscaling the cluster's StatefulSet during the recovery process.

    clusterDownscaleTimeout

    ClusterDownscaleTimeout represents the maximum duration for downscaling the cluster's StatefulSet during the recovery process.

    podRecoveryTimeout

    PodRecoveryTimeout is the time limit for recevorying the sequence of a Pod during the cluster recovery.

    podSyncTimeout

    PodSyncTimeout is the time limit for a Pod to join the cluster after having performed a cluster bootstrap during the cluster recovery.

    forceClusterBootstrapInPod string

    ForceClusterBootstrapInPod allows you to manually initiate the bootstrap process in a specific Pod. IMPORTANT: Use this option only in exceptional circumstances. Not selecting the Pod with the highest sequence number may result in data loss. IMPORTANT: Ensure you unset this field after completing the bootstrap to allow the operator to choose the appropriate Pod to bootstrap from in an event of cluster recovery.

    job

    Job defines a Job that co-operates with mariadb-enterprise-operator by performing the Galera cluster recovery .

    galeraLibPath string

    GaleraLibPath is a path inside the MariaDB image to the wsrep provider plugin. It is defaulted if not provided. More info: https://galeracluster.com/library/documentation/mysql-wsrep-options.html#wsrep-provider.

    replicaThreads integer

    ReplicaThreads is the number of replica threads used to apply Galera write sets in parallel. More info: https://mariadb.com/kb/en/galera-cluster-system-variables/#wsrep_slave_threads.

    providerOptions object (keys:string, values:string)

    ProviderOptions is map of Galera configuration parameters. More info: https://mariadb.com/kb/en/galera-cluster-system-variables/#wsrep_provider_options.

    agent

    Agent is a sidecar agent that co-operates with mariadb-enterprise-operator.

    recovery

    GaleraRecovery is the recovery process performed by the operator whenever the Galera cluster is not healthy. More info: https://galeracluster.com/library/documentation/crash-recovery.html.

    initContainer

    InitContainer is an init container that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    initJob

    InitJob defines a Job that co-operates with mariadb-enterprise-operator by performing initialization tasks.

    config

    GaleraConfig defines storage options for the Galera configuration files.

    clusterName string

    ClusterName is the name of the cluster to be used in the Galera config file.

    MaxScaleAuth
  • ReplicaReplication

  • spec

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    privileges string array

    Privileges to use in the Grant.

    MinItems: 1 Required: {}

    database string

    Database to use in the Grant.

    *

    table string

    Table to use in the Grant.

    *

    username string

    Username to use in the Grant.

    Required: {}

    host string

    Host to use in the Grant. It can be localhost, an IP or '%'.

    grantOption boolean

    GrantOption to use in the Grant.

    false

    scheme

    ReplicationSpec

    envFrom array

    EnvFrom represents the references (via ConfigMap and Secrets) to environment variables to be injected in the container.

    volumeMounts array

    VolumeMounts to be used in the Container.

    livenessProbe

    LivenessProbe to be used in the Container.

    readinessProbe

    ReadinessProbe to be used in the Container.

    startupProbe

    StartupProbe to be used in the Container.

    resources

    Resources describes the compute resource requirements.

    securityContext

    SecurityContext holds security configuration that will be applied to a container.

    image string

    Image name to be used by the MariaDB instances. The supported format is <image>:<tag>.

    Required: {}

    imagePullPolicy

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    Enum: [Always Never IfNotPresent]

    tolerations array

    Tolerations to be used in the Pod.

    resources

    Resources describes the compute resource requirements.

    args string array

    Args to be used in the Container.

    SqlJobSpec

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    ConfigMapKeySelector
  • ConfigMapVolumeSource

  • ConnectionSpec

  • EnvFromSource

  • Exporter

  • ExternalMariaDBSpec

  • ExternalTLS

  • GeneratedSecretKeyRef

  • JobPodTemplate

  • MariaDBSpec

  • MaxScalePodTemplate

  • MaxScaleSpec

  • MaxScaleTLS

  • PhysicalBackupPodTemplate

  • PhysicalBackupSpec

  • PodTemplate

  • PointInTimeRecoverySpec

  • ReplicaBootstrapFrom

  • RestoreSource

  • RestoreSpec

  • SecretKeySelector

  • SqlJobSpec

  • TLS

  • spec

    GrantSpec
  • MaxScaleSpec

  • PhysicalBackupSpec

  • RestoreSpec

  • SqlJobSpec

  • UserSpec

  • waitForIt boolean

    WaitForIt indicates whether the controller using this reference should wait for MariaDB to be ready.

    true

    envFrom array

    EnvFrom represents the references (via ConfigMap and Secrets) to environment variables to be injected in the container.

    volumeMounts array

    VolumeMounts to be used in the Container.

    livenessProbe

    LivenessProbe to be used in the Container.

    readinessProbe

    ReadinessProbe to be used in the Container.

    startupProbe

    StartupProbe to be used in the Container.

    resources

    Resources describes the compute resource requirements.

    securityContext

    SecurityContext holds security configuration that will be applied to a container.

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    initContainers array

    InitContainers to be used in the Pod.

    sidecarContainers array

    SidecarContainers to be used in the Pod.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    volumes array

    Volumes to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    topologySpreadConstraints array

    TopologySpreadConstraints to be used in the Pod.

    suspend boolean

    Suspend indicates whether the current resource should be suspended or not. This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities.

    false

    image string

    Image name to be used by the MariaDB instances. The supported format is <image>:<tag>. Only MariaDB official images are supported.

    imagePullPolicy

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    Enum: [Always Never IfNotPresent]

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    rootPasswordSecretKeyRef

    RootPasswordSecretKeyRef is a reference to a Secret key containing the root password.

    rootEmptyPassword boolean

    RootEmptyPassword indicates if the root password should be empty. Don't use this feature in production, it is only intended for development and test environments.

    database string

    Database is the name of the initial Database.

    username string

    Username is the initial username to be created by the operator once MariaDB is ready. The initial User will have ALL PRIVILEGES in the initial Database.

    passwordSecretKeyRef

    PasswordSecretKeyRef is a reference to a Secret that contains the password to be used by the initial User. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    passwordHashSecretKeyRef

    PasswordHashSecretKeyRef is a reference to the password hash to be used by the initial User. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password hash. It requires the 'strict-password-validation=false' option to be set. See: https://mariadb.com/docs/server/server-management/variables-and-modes/server-system-variables#strict_password_validation.

    passwordPlugin

    PasswordPlugin is a reference to the password plugin and arguments to be used by the initial User. It requires the 'strict-password-validation=false' option to be set. See: https://mariadb.com/docs/server/server-management/variables-and-modes/server-system-variables#strict_password_validation.

    cleanupPolicy

    CleanupPolicy defines the behavior for cleaning up the initial User, Database, and Grant created by the operator.

    Enum: [Skip Delete]

    myCnf string

    MyCnf allows to specify the my.cnf file mounted by Mariadb. Updating this field will trigger an update to the Mariadb resource.

    myCnfConfigMapKeyRef

    MyCnfConfigMapKeyRef is a reference to the my.cnf config file provided via a ConfigMap. If not provided, it will be defaulted with a reference to a ConfigMap containing the MyCnf field. If the referred ConfigMap is labeled with "enterprise.mariadb.com/watch", an update to the Mariadb resource will be triggered when the ConfigMap is updated.

    timeZone string

    TimeZone sets the default timezone. If not provided, it defaults to SYSTEM and the timezone data is not loaded.

    bootstrapFrom

    BootstrapFrom defines a source to bootstrap from.

    storage

    Storage defines the storage options to be used for provisioning the PVCs mounted by MariaDB.

    metrics

    Metrics configures metrics and how to scrape them.

    tls

    TLS defines the PKI to be used with MariaDB.

    replication

    Replication configures high availability via replication. This feature is still in alpha, use Galera if you are looking for a more production-ready HA.

    galera

    Galera configures high availability via Galera.

    maxScaleRef

    MaxScaleRef is a reference to a MaxScale resource to be used with the current MariaDB. Providing this reference implies delegating high availability tasks such as primary failover to MaxScale.

    pointInTimeRecoveryRef

    PointInTimeRecoveryRef is a reference to a PointInTimeRecovery resource to be used with the current MariaDB. Providing this reference implies configuring binary logs in the MariaDB instance and binary log archival in the sidecar agent.

    replicas integer

    Replicas indicates the number of desired instances.

    1

    replicasAllowEvenNumber boolean

    disables the validation check for an odd number of replicas.

    false

    port integer

    Port where the instances will be listening for connections.

    3306

    servicePorts array

    ServicePorts is the list of additional named ports to be added to the Services created by the operator.

    podDisruptionBudget

    PodDisruptionBudget defines the budget for replica availability.

    updateStrategy

    UpdateStrategy defines how a MariaDB resource is updated.

    service

    Service defines a template to configure the general Service object. The network traffic of this Service will be routed to all Pods.

    connection

    Connection defines a template to configure the general Connection object. This Connection provides the initial User access to the initial Database. It will make use of the Service to route network traffic to all Pods.

    primaryService

    PrimaryService defines a template to configure the primary Service object. The network traffic of this Service will be routed to the primary Pod.

    primaryConnection

    PrimaryConnection defines a template to configure the primary Connection object. This Connection provides the initial User access to the initial Database. It will make use of the PrimaryService to route network traffic to the primary Pod.

    secondaryService

    SecondaryService defines a template to configure the secondary Service object. The network traffic of this Service will be routed to the secondary Pods.

    secondaryConnection

    SecondaryConnection defines a template to configure the secondary Connection object. This Connection provides the initial User access to the initial Database. It will make use of the SecondaryService to route network traffic to the secondary Pods.

    username string

    Username is the username of the monitoring user used by the exporter.

    passwordSecretKeyRef

    PasswordSecretKeyRef is a reference to the password of the monitoring user used by the exporter. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    spec

    deleteDefaultAdmin boolean

    DeleteDefaultAdmin determines whether the default admin user should be deleted after the initial configuration. If not provided, it defaults to true.

    metricsUsername string

    MetricsUsername is an metrics username to call the REST API. It is defaulted if metrics are enabled.

    metricsPasswordSecretKeyRef

    MetricsPasswordSecretKeyRef is Secret key reference to the metrics password to call the admib REST API. It is defaulted if metrics are enabled.

    clientUsername string

    ClientUsername is the user to connect to MaxScale. It is defaulted if not provided.

    clientPasswordSecretKeyRef

    ClientPasswordSecretKeyRef is Secret key reference to the password to connect to MaxScale. It is defaulted if not provided. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    clientMaxConnections integer

    ClientMaxConnections defines the maximum number of connections that the client can establish. If HA is enabled, make sure to increase this value, as more MaxScale replicas implies more connections. It defaults to 30 times the number of MaxScale replicas.

    serverUsername string

    ServerUsername is the user used by MaxScale to connect to MariaDB server. It is defaulted if not provided.

    serverPasswordSecretKeyRef

    ServerPasswordSecretKeyRef is Secret key reference to the password used by MaxScale to connect to MariaDB server. It is defaulted if not provided. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    serverMaxConnections integer

    ServerMaxConnections defines the maximum number of connections that the server can establish. If HA is enabled, make sure to increase this value, as more MaxScale replicas implies more connections. It defaults to 30 times the number of MaxScale replicas.

    monitorUsername string

    MonitorUsername is the user used by MaxScale monitor to connect to MariaDB server. It is defaulted if not provided.

    monitorPasswordSecretKeyRef

    MonitorPasswordSecretKeyRef is Secret key reference to the password used by MaxScale monitor to connect to MariaDB server. It is defaulted if not provided. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    monitorMaxConnections integer

    MonitorMaxConnections defines the maximum number of connections that the monitor can establish. If HA is enabled, make sure to increase this value, as more MaxScale replicas implies more connections. It defaults to 30 times the number of MaxScale replicas.

    syncUsername string

    MonitoSyncUsernamerUsername is the user used by MaxScale config sync to connect to MariaDB server. It is defaulted when HA is enabled.

    syncPasswordSecretKeyRef

    SyncPasswordSecretKeyRef is Secret key reference to the password used by MaxScale config to connect to MariaDB server. It is defaulted when HA is enabled. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    syncMaxConnections integer

    SyncMaxConnections defines the maximum number of connections that the sync can establish. If HA is enabled, make sure to increase this value, as more MaxScale replicas implies more connections. It defaults to 30 times the number of MaxScale replicas.

    protocol string

    Protocol is the MaxScale protocol to use when communicating with the client. If not provided, it defaults to MariaDBProtocol.

    params object (keys:string, values:string)

    Params defines extra parameters to pass to the listener. Any parameter supported by MaxScale may be specified here. See reference: https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-maxscale-configuration-guide/#listener_1.

    interval

    Interval used to monitor MariaDB servers. It is defaulted if not provided.

    cooperativeMonitoring

    CooperativeMonitoring enables coordination between multiple MaxScale instances running monitors. It is defaulted when HA is enabled.

    Enum: [majority_of_all majority_of_running]

    params object (keys:string, values:string)

    Params defines extra parameters to pass to the monitor. Any parameter supported by MaxScale may be specified here. See reference: https://mariadb.com/kb/en/mariadb-maxscale-2308-common-monitor-parameters/. Monitor specific parameter are also supported: https://mariadb.com/kb/en/mariadb-maxscale-2308-galera-monitor/#galera-monitor-optional-parameters. https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-monitor/#configuration.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    topologySpreadConstraints array

    TopologySpreadConstraints to be used in the Pod.

    protocol string

    Protocol is the MaxScale protocol to use when communicating with this MariaDB server. If not provided, it defaults to MariaDBBackend.

    maintenance boolean

    Maintenance indicates whether the server is in maintenance mode.

    params object (keys:string, values:string)

    Params defines extra parameters to pass to the server. Any parameter supported by MaxScale may be specified here. See reference: https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-maxscale-configuration-guide/#server_1.

    listener

    MaxScaleListener defines how the MaxScale server will listen for connections.

    Required: {}

    params object (keys:string, values:string)

    Params defines extra parameters to pass to the service. Any parameter supported by MaxScale may be specified here. See reference: https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-maxscale-configuration-guide/#service_1. Router specific parameter are also supported: https://mariadb.com/kb/en/mariadb-maxscale-2308-readwritesplit/#configuration. https://mariadb.com/kb/en/mariadb-maxscale-2308-readconnroute/#configuration.

    envFrom array

    EnvFrom represents the references (via ConfigMap and Secrets) to environment variables to be injected in the container.

    volumeMounts array

    VolumeMounts to be used in the Container.

    livenessProbe

    LivenessProbe to be used in the Container.

    readinessProbe

    ReadinessProbe to be used in the Container.

    startupProbe

    StartupProbe to be used in the Container.

    resources

    Resources describes the compute resource requirements.

    securityContext

    SecurityContext holds security configuration that will be applied to a container.

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    topologySpreadConstraints array

    TopologySpreadConstraints to be used in the Pod.

    suspend boolean

    Suspend indicates whether the current resource should be suspended or not. This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities.

    false

    mariaDbRef

    MariaDBRef is a reference to the MariaDB that MaxScale points to. It is used to initialize the servers field.

    primaryServer string

    PrimaryServer specifies the desired primary server. Setting this field triggers a switchover operation in MaxScale to the desired server. This option is only valid when using monitors that support switchover, currently limited to the MariaDB monitor.

    servers array

    Servers are the MariaDB servers to forward traffic to. It is required if 'spec.mariaDbRef' is not provided.

    image string

    Image name to be used by the MaxScale instances. The supported format is <image>:<tag>. Only MaxScale official images are supported.

    imagePullPolicy

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    Enum: [Always Never IfNotPresent]

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    services array

    Services define how the traffic is forwarded to the MariaDB servers. It is defaulted if not provided.

    monitor

    Monitor monitors MariaDB server instances. It is required if 'spec.mariaDbRef' is not provided.

    admin

    Admin configures the admin REST API and GUI.

    config

    Config defines the MaxScale configuration.

    auth

    Auth defines the credentials required for MaxScale to connect to MariaDB.

    metrics

    Metrics configures metrics and how to scrape them.

    tls

    TLS defines the PKI to be used with MaxScale.

    connection

    Connection provides a template to define the Connection for MaxScale.

    replicas integer

    Replicas indicates the number of desired instances.

    1

    podDisruptionBudget

    PodDisruptionBudget defines the budget for replica availability.

    updateStrategy

    UpdateStrategy defines the update strategy for the StatefulSet object.

    kubernetesService

    KubernetesService defines a template for a Kubernetes Service object to connect to MaxScale.

    guiKubernetesService

    GuiKubernetesService defines a template for a Kubernetes Service object to connect to MaxScale's GUI.

    requeueInterval

    RequeueInterval is used to perform requeue reconciliations. If not defined, it defaults to 10s.

    adminCASecretRef

    AdminCASecretRef is a reference to a Secret containing the admin certificate authority keypair. It is used to establish trust and issue certificates for the MaxScale's administrative REST API and GUI. One of: - Secret containing both the 'ca.crt' and 'ca.key' keys. This allows you to bring your own CA to Kubernetes to issue certificates. - Secret containing only the 'ca.crt' in order to establish trust. In this case, either adminCertSecretRef or adminCertIssuerRef fields must be provided. If not provided, a self-signed CA will be provisioned to issue the server certificate.

    adminCertSecretRef

    AdminCertSecretRef is a reference to a TLS Secret used by the MaxScale's administrative REST API and GUI.

    adminCertIssuerRef

    AdminCertIssuerRef is a reference to a cert-manager issuer object used to issue the MaxScale's administrative REST API and GUI certificate. cert-manager must be installed previously in the cluster. It is mutually exclusive with adminCertSecretRef. By default, the Secret field 'ca.crt' provisioned by cert-manager will be added to the trust chain. A custom trust bundle may be specified via adminCASecretRef.

    adminCertConfig

    AdminCertConfig allows configuring the admin certificates, either issued by the operator or cert-manager. If not set, the default settings will be used.

    listenerCASecretRef

    ListenerCASecretRef is a reference to a Secret containing the listener certificate authority keypair. It is used to establish trust and issue certificates for the MaxScale's listeners. One of: - Secret containing both the 'ca.crt' and 'ca.key' keys. This allows you to bring your own CA to Kubernetes to issue certificates. - Secret containing only the 'ca.crt' in order to establish trust. In this case, either listenerCertSecretRef or listenerCertIssuerRef fields must be provided. If not provided, a self-signed CA will be provisioned to issue the listener certificate.

    listenerCertSecretRef

    ListenerCertSecretRef is a reference to a TLS Secret used by the MaxScale's listeners.

    listenerCertIssuerRef

    ListenerCertIssuerRef is a reference to a cert-manager issuer object used to issue the MaxScale's listeners certificate. cert-manager must be installed previously in the cluster. It is mutually exclusive with listenerCertSecretRef. By default, the Secret field 'ca.crt' provisioned by cert-manager will be added to the trust chain. A custom trust bundle may be specified via listenerCASecretRef.

    listenerCertConfig

    ListenerCertConfig allows configuring the listener certificates, either issued by the operator or cert-manager. If not set, the default settings will be used.

    serverCASecretRef

    ServerCASecretRef is a reference to a Secret containing the MariaDB server CA certificates. It is used to establish trust with MariaDB servers. The Secret should contain a 'ca.crt' key in order to establish trust. If not provided, and the reference to a MariaDB resource is set (mariaDbRef), it will be defaulted to the referred MariaDB CA bundle.

    serverCertSecretRef

    ServerCertSecretRef is a reference to a TLS Secret used by MaxScale to connect to the MariaDB servers. If not provided, and the reference to a MariaDB resource is set (mariaDbRef), it will be defaulted to the referred MariaDB client certificate (clientCertSecretRef).

    verifyPeerCertificate boolean

    VerifyPeerCertificate specifies whether the peer certificate's signature should be validated against the CA. It is disabled by default.

    verifyPeerHost boolean

    VerifyPeerHost specifies whether the peer certificate's SANs should match the peer host. It is disabled by default.

    replicationSSLEnabled boolean

    ReplicationSSLEnabled specifies whether the replication SSL is enabled. If enabled, the SSL options will be added to the server configuration. It is enabled by default when the referred MariaDB instance (via mariaDbRef) has replication enabled. If the MariaDB servers are manually provided by the user via the 'servers' field, this must be set by the user as well.

    GaleraInitJob
  • GaleraRecoveryJob

  • Job

  • JobPodTemplate

  • MariaDBSpec

  • MaxScalePodTemplate

  • MaxScaleSpec

  • PhysicalBackupPodTemplate

  • PhysicalBackupSpec

  • PhysicalBackupVolumeSnapshot

  • PodTemplate

  • RestoreSpec

  • SecretTemplate

  • ServiceTemplate

  • SqlJobSpec

  • VolumeClaimTemplate

  • VolumeClaimTemplate

    storageClassName string

    spec

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    onDemand string

    OnDemand is an identifier used to trigger an on-demand backup. If the identifier is different than the one tracked under status.lastScheduleOnDemand, a new physical backup will be triggered.

    onPrimaryChange boolean

    OnPrimaryChange indicates whether a PhysicalBackup should be scheduled when the referred MariaDB has changed primary Pod.

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    target

    Target defines in which Pod the physical backups will be taken. It defaults to "Replica", meaning that the physical backups will only be taken in ready replicas.

    Enum: [Replica PreferReplica]

    compression

    Compression algorithm to be used in the Backup.

    Enum: [none bzip2 gzip]

    stagingStorage

    StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed. It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the PhysicalBackup Job is scheduled. The staging area gets cleaned up after each backup is completed, consider this for sizing it appropriately.

    storage

    Storage defines the final storage for backups.

    Required: {}

    schedule

    Schedule defines when the PhysicalBackup will be taken.

    maxRetention

    MaxRetention defines the retention policy for backups. Old backups will be cleaned up by the Backup Job. It defaults to 30 days.

    timeout

    Timeout defines the maximum duration of a PhysicalBackup job or snapshot. If this duration is exceeded, the job or snapshot is considered expired and is deleted by the operator. A new job or snapshot will then be created according to the schedule. It defaults to 1 hour.

    podAffinity boolean

    PodAffinity indicates whether the Jobs should run in the same Node as the MariaDB Pods to be able to attach the PVC. It defaults to true.

    backoffLimit integer

    BackoffLimit defines the maximum number of attempts to successfully take a PhysicalBackup.

    restartPolicy

    RestartPolicy to be added to the PhysicalBackup Pod.

    OnFailure

    Enum: [Always OnFailure Never]

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    successfulJobsHistoryLimit integer

    SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed. It defaults to 5.

    Minimum: 0

    logLevel string

    LogLevel to be used in the PhysicalBackup Job. It defaults to 'info'.

    info

    Enum: [debug info warn error dpanic panic fatal]

    volume

    Volume is a Kubernetes volume specification.

    volumeSnapshot

    VolumeSnapshot is a Kubernetes VolumeSnapshot specification.

    MariaDBSpec
  • MaxScalePodTemplate

  • MaxScaleSpec

  • PhysicalBackupPodTemplate

  • PhysicalBackupSpec

  • PodTemplate

  • RestoreSpec

  • SqlJobSpec

  • runAsNonRoot boolean

    supplementalGroups integer array

    fsGroup integer

    fsGroupChangePolicy

    seccompProfile

    appArmorProfile

    sidecarContainers array

    SidecarContainers to be used in the Pod.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    volumes array

    Volumes to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    topologySpreadConstraints array

    TopologySpreadConstraints to be used in the Pod.

    spec

    archiveTimeout

    ArchiveTimeout defines the maximum duration for the binary log archival. If this duration is exceeded, the sidecar agent will log an error and it will be retried in the next archive cycle. It defaults to 1 hour.

    1h

    strictMode boolean

    StrictMode controls the behavior when a point-in-time restoration cannot reach the exact target time: When enabled: Returns an error and avoids replaying binary logs if target time is not reached. When disabled (default): Replays available binary logs until the last recoverable time. It logs logs an error if target time is not reached.

    archiveInterval

    ArchiveInterval defines the time interval at which the binary logs will be archived. It defaults to 10 minutes.

    10m

    maxParallel integer

    MaxParallel defines the maximum number of parallel workers, both for archiving and restoring the binary logs. It defaults to 1.

    1

    Minimum: 1

    maxRetention

    MaxRetention defines the retention policy for binary logs. Binary logs older than this duration will be cleaned up when the archival is completed. It is not set by default, meaning that old binary logs will not be cleaned up. This field is immutable, it cannot be updated after creation.

    MariaDBSpec
  • MaxScaleSpec

  • initialDelaySeconds integer

    timeoutSeconds integer

    periodSeconds integer

    successThreshold integer

    failureThreshold integer

    maxLagSeconds integer

    MaxLagSeconds is the maximum number of seconds that replicas are allowed to lag behind the primary. If a replica exceeds this threshold, it is marked as not ready and read queries will no longer be forwarded to it. If not provided, it defaults to 0, which means that replicas are not allowed to lag behind the primary (recommended). Lagged replicas will not be taken into account as candidates for the new primary during failover, and they will block other operations, such as switchover and upgrade. This field is not taken into account by MaxScale, you can define the maximum lag as router parameters. See: https://mariadb.com/docs/maxscale/reference/maxscale-routers/maxscale-readwritesplit#max_replication_lag.

    syncTimeout

    SyncTimeout defines the timeout for the synchronization phase during switchover and failover operations. During switchover, all replicas must be synced with the current primary before promoting the new primary. During failover, the new primary must be synced before being promoted as primary. This implies processing all the events in the relay log. When the timeout is reached, the operator restarts the operation from the beginning. It defaults to 10s. See: https://mariadb.com/docs/server/reference/sql-functions/secondary-functions/miscellaneous-functions/master_gtid_wait

    bootstrapFrom

    ReplicaBootstrapFrom defines the data sources used to bootstrap new replicas. This will be used as part of the scaling out and recovery operations, when new replicas are created. If not provided, scale out and recovery operations will return an error.

    recovery

    ReplicaRecovery defines how the replicas should be recovered after they enter an error state. This process deletes data from faulty replicas and recreates them using the source defined in the bootstrapFrom field. It is disabled by default, and it requires the bootstrapFrom field to be set.

    semiSyncEnabled boolean

    SemiSyncEnabled determines whether semi-synchronous replication is enabled. Semi-synchronous replication requires that at least one replica should have sent an ACK to the primary node before committing the transaction back to the client. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/semisynchronous-replication It is enabled by default

    semiSyncAckTimeout

    SemiSyncAckTimeout for the replica to acknowledge transactions to the primary. It requires semi-synchronous replication to be enabled. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/semisynchronous-replication#rpl_semi_sync_master_timeout

    semiSyncWaitPoint

    SemiSyncWaitPoint determines whether the transaction should wait for an ACK after having synced the binlog (AfterSync) or after having committed to the storage engine (AfterCommit, the default). It requires semi-synchronous replication to be enabled. See: https://mariadb.com/kb/en/semisynchronous-replication/#rpl_semi_sync_master_wait_point.

    Enum: [AfterSync AfterCommit]

    syncBinlog integer

    SyncBinlog indicates after how many events the binary log is synchronized to the disk. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/replication-and-binary-log-system-variables#sync_binlog

    initContainer

    InitContainer is an init container that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    agent

    Agent is a sidecar agent that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    standaloneProbes boolean

    StandaloneProbes indicates whether to use the default non-HA startup and liveness probes. It is disabled by default

    enabled boolean

    Enabled is a flag to enable replication.

    semiSyncEnabled boolean

    SemiSyncEnabled determines whether semi-synchronous replication is enabled. Semi-synchronous replication requires that at least one replica should have sent an ACK to the primary node before committing the transaction back to the client. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/semisynchronous-replication It is enabled by default

    semiSyncAckTimeout

    SemiSyncAckTimeout for the replica to acknowledge transactions to the primary. It requires semi-synchronous replication to be enabled. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/semisynchronous-replication#rpl_semi_sync_master_timeout

    semiSyncWaitPoint

    SemiSyncWaitPoint determines whether the transaction should wait for an ACK after having synced the binlog (AfterSync) or after having committed to the storage engine (AfterCommit, the default). It requires semi-synchronous replication to be enabled. See: https://mariadb.com/kb/en/semisynchronous-replication/#rpl_semi_sync_master_wait_point.

    Enum: [AfterSync AfterCommit]

    syncBinlog integer

    SyncBinlog indicates after how many events the binary log is synchronized to the disk. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/replication-and-binary-log-system-variables#sync_binlog

    initContainer

    InitContainer is an init container that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    agent

    Agent is a sidecar agent that runs in the MariaDB Pod and co-operates with mariadb-enterprise-operator.

    standaloneProbes boolean

    StandaloneProbes indicates whether to use the default non-HA startup and liveness probes. It is disabled by default

    ContainerTemplate
  • Exporter

  • GaleraInitJob

  • GaleraRecoveryJob

  • InitContainer

  • Job

  • JobContainerTemplate

  • MariaDBSpec

  • MaxScaleSpec

  • PhysicalBackupSpec

  • RestoreSpec

  • SqlJobSpec

  • spec

    targetRecoveryTime

    TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective. It is used to determine the closest restoration source in time.

    stagingStorage

    StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed. It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Restore Job is scheduled.

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    backupRef

    BackupRef is a reference to a Backup object. It has priority over S3 and Volume.

    s3

    S3 defines the configuration to restore backups from a S3 compatible storage. It has priority over Volume.

    volume

    Volume is a Kubernetes Volume object that contains a backup.

    targetRecoveryTime

    TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective. It is used to determine the closest restoration source in time.

    stagingStorage

    StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed. It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Restore Job is scheduled.

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    database string

    Database defines the logical database to be restored. If not provided, all databases available in the backup are restored. IMPORTANT: The database must previously exist.

    logLevel string

    LogLevel to be used n the Backup Job. It defaults to 'info'.

    info

    Enum: [debug info warn error dpanic panic fatal]

    backoffLimit integer

    BackoffLimit defines the maximum number of attempts to successfully perform a Backup.

    5

    restartPolicy

    RestartPolicy to be added to the Backup Job.

    OnFailure

    Enum: [Always OnFailure Never]

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    PointInTimeRecoveryStorage
  • RestoreSource

  • RestoreSpec

  • prefix string

    Prefix indicates a folder/subfolder in the bucket. For example: mariadb/ or mariadb/backups. A trailing slash '/' is added if not provided.

    accessKeyIdSecretKeyRef

    AccessKeyIdSecretKeyRef is a reference to a Secret key containing the S3 access key id.

    secretAccessKeySecretKeyRef

    AccessKeyIdSecretKeyRef is a reference to a Secret key containing the S3 secret key.

    sessionTokenSecretKeyRef

    SessionTokenSecretKeyRef is a reference to a Secret key containing the S3 session token.

    tls

    TLS provides the configuration required to establish TLS connections with S3.

    ssec

    SSEC is a reference to a Secret containing the SSE-C (Server-Side Encryption with Customer-Provided Keys) key. The secret must contain a 32-byte key (256 bits) in the specified key. This enables server-side encryption where you provide and manage the encryption key.

    ExternalMariaDBSpec
  • GeneratedSecretKeyRef

  • MariaDBSpec

  • PasswordPlugin

  • S3

  • SSECConfig

  • SqlJobSpec

  • TLSConfig

  • UserSpec

  • usernameKey string

    UsernameKey to be used in the Secret.

    passwordKey string

    PasswordKey to be used in the Secret.

    hostKey string

    HostKey to be used in the Secret.

    portKey string

    PortKey to be used in the Secret.

    databaseKey string

    DatabaseKey to be used in the Secret.

    Exporter
  • InitContainer

  • JobContainerTemplate

  • MariaDBSpec

  • MaxScaleSpec

  • PhysicalBackupSpec

  • RestoreSpec

  • SqlJobSpec

  • runAsGroup integer

    runAsNonRoot boolean

    readOnlyRootFilesystem boolean

    allowPrivilegeEscalation boolean

    scrapeTimeout string

    ScrapeTimeout defines the timeout for scraping metrics.

    loadBalancerSourceRanges string array

    LoadBalancerSourceRanges Service field.

    externalTrafficPolicy

    ExternalTrafficPolicy Service field.

    sessionAffinity

    SessionAffinity Service field.

    allocateLoadBalancerNodePorts boolean

    AllocateLoadBalancerNodePorts Service field.

    loadBalancerClass string

    LoadBalancerClass Service field.

    spec

    podMetadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    serviceAccountName string

    ServiceAccountName is the name of the ServiceAccount to be used by the Pods.

    affinity

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    tolerations array

    Tolerations to be used in the Pod.

    priorityClassName string

    PriorityClassName to be used in the Pod.

    successfulJobsHistoryLimit integer

    SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed.

    Minimum: 0

    failedJobsHistoryLimit integer

    FailedJobsHistoryLimit defines the maximum number of failed Jobs to be displayed.

    Minimum: 0

    timeZone string

    TimeZone defines the timezone associated with the cron expression.

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    schedule

    Schedule defines when the SqlJob will be executed.

    username string

    Username to be impersonated when executing the SqlJob.

    Required: {}

    passwordSecretKeyRef

    UserPasswordSecretKeyRef is a reference to the impersonated user's password to be used when executing the SqlJob.

    Required: {}

    tlsCASecretRef

    TLSCACertSecretRef is a reference toa CA Secret used to establish trust when executing the SqlJob. If not provided, the CA bundle provided by the referred MariaDB is used.

    tlsClientCertSecretRef

    TLSClientCertSecretRef is a reference to a Kubernetes TLS Secret used as authentication when executing the SqlJob. If not provided, the client certificate provided by the referred MariaDB is used.

    database string

    Username to be used when executing the SqlJob.

    dependsOn array

    DependsOn defines dependencies with other SqlJob objectecs.

    sql string

    Sql is the script to be executed by the SqlJob.

    sqlConfigMapKeyRef

    SqlConfigMapKeyRef is a reference to a ConfigMap containing the Sql script. It is defaulted to a ConfigMap with the contents of the Sql field.

    backoffLimit integer

    BackoffLimit defines the maximum number of attempts to successfully execute a SqlJob.

    5

    restartPolicy

    RestartPolicy to be added to the SqlJob Pod.

    OnFailure

    Enum: [Always OnFailure Never]

    inheritMetadata

    InheritMetadata defines the metadata to be inherited by children resources.

    RestoreSource
  • RestoreSpec

  • resizeInUseVolumes boolean

    ResizeInUseVolumes indicates whether the PVCs can be resized. The 'StorageClassName' used should have 'allowVolumeExpansion' set to 'true' to allow resizing. It defaults to true.

    waitForVolumeResize boolean

    WaitForVolumeResize indicates whether to wait for the PVCs to be resized before marking the MariaDB object as ready. This will block other operations such as cluster recovery while the resize is in progress. It defaults to true.

    volumeClaimTemplate

    VolumeClaimTemplate provides a template to define the PVCs.

    pvcRetentionPolicy

    PersistentVolumeClaimRetentionPolicy describes the lifecycle of PVCs created from volumeClaimTemplates. By default, all persistent volume claims are created as needed and retained until manually deleted. This policy allows the lifecycle to be altered, for example by deleting PVCs when their statefulset is deleted, or when their pod is scaled down.

    RestoreSource
  • RestoreSpec

  • StagingStorage

  • Volume

  • VolumeSource

  • hostPath

    persistentVolumeClaim

    MaxScaleService
  • MaxScaleSpec

  • serverCASecretRef

    ServerCASecretRef is a reference to a Secret containing the server certificate authority keypair. It is used to establish trust and issue server certificates. One of: - Secret containing both the 'ca.crt' and 'ca.key' keys. This allows you to bring your own CA to Kubernetes to issue certificates. - Secret containing only the 'ca.crt' in order to establish trust. In this case, either serverCertSecretRef or serverCertIssuerRef must be provided. If not provided, a self-signed CA will be provisioned to issue the server certificate.

    serverCertSecretRef

    ServerCertSecretRef is a reference to a TLS Secret containing the server certificate. It is mutually exclusive with serverCertIssuerRef.

    serverCertIssuerRef

    ServerCertIssuerRef is a reference to a cert-manager issuer object used to issue the server certificate. cert-manager must be installed previously in the cluster. It is mutually exclusive with serverCertSecretRef. By default, the Secret field 'ca.crt' provisioned by cert-manager will be added to the trust chain. A custom trust bundle may be specified via serverCASecretRef.

    serverCertConfig

    ServerCertConfig allows configuring the server certificates, either issued by the operator or cert-manager. If not set, the default settings will be used.

    clientCASecretRef

    ClientCASecretRef is a reference to a Secret containing the client certificate authority keypair. It is used to establish trust and issue client certificates. One of: - Secret containing both the 'ca.crt' and 'ca.key' keys. This allows you to bring your own CA to Kubernetes to issue certificates. - Secret containing only the 'ca.crt' in order to establish trust. In this case, either clientCertSecretRef or clientCertIssuerRef fields must be provided. If not provided, a self-signed CA will be provisioned to issue the client certificate.

    clientCertSecretRef

    ClientCertSecretRef is a reference to a TLS Secret containing the client certificate. It is mutually exclusive with clientCertIssuerRef.

    clientCertIssuerRef

    ClientCertIssuerRef is a reference to a cert-manager issuer object used to issue the client certificate. cert-manager must be installed previously in the cluster. It is mutually exclusive with clientCertSecretRef. By default, the Secret field 'ca.crt' provisioned by cert-manager will be added to the trust chain. A custom trust bundle may be specified via clientCASecretRef.

    clientCertConfig

    ClientCertConfig allows configuring the client certificates, either issued by the operator or cert-manager. If not set, the default settings will be used.

    galeraSSTEnabled boolean

    GaleraSSTEnabled determines whether Galera SST connections should use TLS. It disabled by default.

    galeraServerSSLMode string

    GaleraServerSSLMode defines the server SSL mode for a Galera Enterprise cluster. This field is only supported and applicable for Galera Enterprise >= 10.6 instances. Refer to the MariaDB Enterprise docs for more detail: https://mariadb.com/docs/galera-cluster/galera-security/mariadb-enterprise-cluster-security#wsrep-tls-modes

    Enum: [PROVIDER SERVER SERVER_X509]

    galeraClientSSLMode string

    GaleraClientSSLMode defines the client SSL mode for a Galera Enterprise cluster. This field is only supported and applicable for Galera Enterprise >= 10.6 instances. Refer to the MariaDB Enterprise docs for more detail: https://mariadb.com/docs/galera-cluster/galera-security/mariadb-enterprise-cluster-security#sst-tls-modes

    Enum: [DISABLED REQUIRED VERIFY_CA VERIFY_IDENTITY]

    subject string

    Subject indicates that the TLS certificate provided by the user must have a specific subject.

    PodTemplate

    labelSelector

    minDomains integer

    nodeAffinityPolicy

    nodeTaintsPolicy

    matchLabelKeys string array

    spec

    mariaDbRef

    MariaDBRef is a reference to a MariaDB object.

    Required: {}

    passwordSecretKeyRef

    PasswordSecretKeyRef is a reference to the password to be used by the User. If not provided, the account will be locked and the password will expire. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password.

    passwordHashSecretKeyRef

    PasswordHashSecretKeyRef is a reference to the password hash to be used by the User. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password hash. It requires the 'strict-password-validation=false' option to be set. See: https://mariadb.com/docs/server/server-management/variables-and-modes/server-system-variables#strict_password_validation.

    passwordPlugin

    PasswordPlugin is a reference to the password plugin and arguments to be used by the User. It requires the 'strict-password-validation=false' option to be set. See: https://mariadb.com/docs/server/server-management/variables-and-modes/server-system-variables#strict_password_validation.

    require

    Require specifies TLS requirements for the user to connect. See: https://mariadb.com/kb/en/securing-connections-for-client-and-server/#requiring-tls.

    maxUserConnections integer

    MaxUserConnections defines the maximum number of simultaneous connections that the User can establish.

    10

    name string

    Name overrides the default name provided by metadata.name.

    MaxLength: 80

    host string

    Host related to the User.

    MaxLength: 255

    csi

    hostPath

    persistentVolumeClaim

    secret

    configMap

    storageClassName string

    metadata

    Refer to Kubernetes API documentation for fields of metadata.

    InitContainer
  • MariaDBSpec

  • MaxScaleSpec

  • subPath string

    hostPath

    persistentVolumeClaim

    secret

    configMap

    podAntiAffinity PodAntiAffinity

    nodeAffinity NodeAffinity

    podAntiAffinity PodAntiAffinity

    nodeAffinity NodeAffinity

    antiAffinityEnabled boolean

    AntiAffinityEnabled configures PodAntiAffinity so each Pod is scheduled in a different Node, enabling HA. Make sure you have at least as many Nodes available as the replicas to not end up with unscheduled Pods.

    command string array

    Command to be used in the Container.

    args string array

    Args to be used in the Container.

    env EnvVar array

    Env represents the environment variables to be injected in a container.

    containerName string

    ContainerName is the name of the storage container.

    Required: {}

    serviceURL string

    ServiceURL is the full URL for connecting to Azure, usually in the form: http(s)://.blob.core.windows.net/.

    Required: {}

    prefix string

    Prefix indicates a folder/subfolder in the container. For example: mariadb/ or mariadb/backups. A trailing slash '/' is added if not provided.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    Backup

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    Logical

    BackupContentTypeLogical represents a logical backup created using mariadb-dump.

    Physical

    BackupContentTypePhysical represents a physical backup created using mariadb-backup or a VolumeSnapshot.

    args string array

    Args to be used in the Container.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    securityContext SecurityContext

    SecurityContext holds security configuration that will be applied to a container.

    s3 S3

    S3 defines the configuration to store backups in a S3 compatible storage.

    persistentVolumeClaim PersistentVolumeClaimSpec

    PersistentVolumeClaim is a Kubernetes PVC specification.

    volume StorageVolumeSource

    Volume is a Kubernetes volume specification.

    enabled boolean

    Enabled is a flag to enable BasicAuth

    username string

    Username to be used for basic authentication

    passwordSecretKeyRef GeneratedSecretKeyRef

    PasswordSecretKeyRef to be used for basic authentication

    backupRef TypedLocalObjectReference

    BackupRef is reference to a backup object. If the Kind is not specified, a logical Backup is assumed. This field takes precedence over S3 and Volume sources.

    volumeSnapshotRef LocalObjectReference

    VolumeSnapshotRef is a reference to a VolumeSnapshot object. This field takes precedence over S3 and Volume sources.

    pointInTimeRecoveryRef LocalObjectReference

    PointInTimeRecoveryRef is a reference to a PointInTimeRecovery object. Providing this field implies restoring the PhysicalBackup referenced in the PointInTimeRecovery object and replaying the archived binary logs up to the point-in-time restoration target, defined by the targetRecoveryTime field.

    driver string

    readOnly boolean

    fsType string

    caLifetime Durationarrow-up-right

    CALifetime defines the CA certificate validity.

    certLifetime Durationarrow-up-right

    CertLifetime defines the certificate validity.

    privateKeyAlgorithm string

    PrivateKeyAlgorithm is the algorithm to be used for the CA and leaf certificate private keys. One of: ECDSA or RSA

    Skip

    CleanupPolicySkip indicates that the resource will NOT be deleted from the database after the CR is deleted.

    Delete

    CleanupPolicyDelete indicates that the resource will be deleted from the database after the CR is deleted.

    none

    No compression

    bzip2

    Bzip2 compression. Good compression ratio, but slower compression/decompression speed compared to gzip.

    gzip

    Gzip compression. Good compression/decompression speed, but worse compression ratio compared to bzip2.

    name string

    key string

    name string

    defaultMode integer

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    Connection

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    secretName string

    SecretName to be used in the Connection.

    secretTemplate SecretTemplate

    SecretTemplate to be used in the Connection.

    healthCheck HealthCheck

    HealthCheck to be used in the Connection.

    secretName string

    SecretName to be used in the Connection.

    secretTemplate SecretTemplate

    SecretTemplate to be used in the Connection.

    healthCheck HealthCheck

    HealthCheck to be used in the Connection.

    name string

    Name to be given to the container.

    image string

    Image name to be used by the container. The supported format is <image>:<tag>.

    Required: {}

    imagePullPolicy PullPolicyarrow-up-right

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    command string array

    Command to be used in the Container.

    args string array

    Args to be used in the Container.

    env EnvVar array

    Env represents the environment variables to be injected in a container.

    majority_of_all

    CooperativeMonitoringMajorityOfAll requires a lock from the majority of the MariaDB servers, even the ones that are down.

    majority_of_running

    CooperativeMonitoringMajorityOfRunning requires a lock from the majority of the MariaDB servers.

    successfulJobsHistoryLimit integer

    SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed.

    Minimum: 0

    failedJobsHistoryLimit integer

    FailedJobsHistoryLimit defines the maximum number of failed Jobs to be displayed.

    Minimum: 0

    timeZone string

    TimeZone defines the timezone associated with the cron expression.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    Database

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    requeueInterval Durationarrow-up-right

    RequeueInterval is used to perform requeue reconciliations.

    retryInterval Durationarrow-up-right

    RetryInterval is the interval used to perform retries.

    cleanupPolicy CleanupPolicy

    CleanupPolicy defines the behavior for cleaning up a SQL resource.

    medium StorageMediumarrow-up-right

    sizeLimit Quantityarrow-up-right

    prefix string

    configMapRef LocalObjectReference

    secretRef LocalObjectReference

    name string

    Name of the environment variable. Must be a C_IDENTIFIER.

    value string

    valueFrom EnvVarSource

    fieldRef ObjectFieldSelector

    configMapKeyRef ConfigMapKeySelector

    secretKeyRef SecretKeySelector

    command string array

    image string

    Image name to be used as metrics exporter. The supported format is <image>:<tag>.

    imagePullPolicy PullPolicyarrow-up-right

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    Enum: [Always Never IfNotPresent]

    imagePullSecrets LocalObjectReference array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    ExternalMariaDB

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    image string

    Image name to be used to perform operations on the external MariaDB, for example, for taking backups. The supported format is <image>:<tag>. Only MariaDB official images are supported. If not provided, the MariaDB image version be inferred by the operator in runtime. The default MariaDB image will be used in this case,

    imagePullPolicy PullPolicyarrow-up-right

    ImagePullPolicy is the image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent.

    Enum: [Always Never IfNotPresent]

    imagePullSecrets LocalObjectReference array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    enabled boolean

    Enabled indicates whether TLS is enabled, determining if certificates should be issued and mounted to the MariaDB instance. It is enabled by default.

    required boolean

    Required specifies whether TLS must be enforced for all connections. User TLS requirements take precedence over this. It disabled by default.

    versions string array

    Versions specifies the supported TLS versions for this MariaDB instance. By default, the MariaDB's default supported versions are used. See: https://mariadb.com/kb/en/ssltls-system-variables/#tls_version.

    primary PrimaryGalera

    Primary is the Galera configuration for the primary node.

    sst SST

    SST is the Snapshot State Transfer used when new Pods join the cluster. More info: https://galeracluster.com/library/documentation/sst.html.

    Enum: [rsync mariabackup mysqldump]

    availableWhenDonor boolean

    AvailableWhenDonor indicates whether a donor node should be responding to queries. It defaults to false.

    reuseStorageVolume boolean

    ReuseStorageVolume indicates that storage volume used by MariaDB should be reused to store the Galera configuration files. It defaults to false, which implies that a dedicated volume for the Galera configuration files is provisioned.

    volumeClaimTemplate VolumeClaimTemplate

    VolumeClaimTemplate is a template for the PVC that will contain the Galera configuration files shared between the InitContainer, Agent and MariaDB.

    metadata Metadata

    Refer to Kubernetes API documentation for fields of metadata.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    enabled boolean

    Enabled is a flag to enable GaleraRecovery.

    minClusterSize IntOrStringarrow-up-right

    MinClusterSize is the minimum number of replicas to consider the cluster healthy. It can be either a number of replicas (1) or a percentage (50%). If Galera consistently reports less replicas than this value for the given 'ClusterHealthyTimeout' interval, a cluster recovery is initiated. It defaults to '1' replica, and it is highly recommendeded to keep this value at '1' in most cases. If set to more than one replica, the cluster recovery process may restart the healthy replicas as well.

    clusterMonitorInterval Durationarrow-up-right

    ClusterMonitorInterval represents the interval used to monitor the Galera cluster health.

    metadata Metadata

    Refer to Kubernetes API documentation for fields of metadata.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    podAffinity boolean

    PodAffinity indicates whether the recovery Jobs should run in the same Node as the MariaDB Pods. It defaults to true.

    primary PrimaryGalera

    Primary is the Galera configuration for the primary node.

    sst SST

    SST is the Snapshot State Transfer used when new Pods join the cluster. More info: https://galeracluster.com/library/documentation/sst.html.

    Enum: [rsync mariabackup mysqldump]

    availableWhenDonor boolean

    AvailableWhenDonor indicates whether a donor node should be responding to queries. It defaults to false.

    name string

    key string

    generate boolean

    Generate indicates whether the Secret should be generated if the Secret referenced is not present.

    false

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    Grant

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    requeueInterval Durationarrow-up-right

    RequeueInterval is used to perform requeue reconciliations.

    retryInterval Durationarrow-up-right

    RetryInterval is the interval used to perform retries.

    cleanupPolicy CleanupPolicy

    CleanupPolicy defines the behavior for cleaning up a SQL resource.

    CurrentPos

    GtidCurrentPos indicates the union of gtid_binlog_pos and gtid_slave_pos will be used when replicating from master.

    SlavePos

    GtidSlavePos indicates that gtid_slave_pos will be used when replicating from master.

    path string

    port IntOrStringarrow-up-right

    host string

    interval Durationarrow-up-right

    Interval used to perform health checks.

    retryInterval Durationarrow-up-right

    RetryInterval is the interval used to perform health check retries.

    path string

    type string

    command string array

    Command to be used in the Container.

    args string array

    Args to be used in the Container.

    env EnvVar array

    Env represents the environment variables to be injected in a container.

    metadata Metadata

    Refer to Kubernetes API documentation for fields of metadata.

    affinity AffinityConfig

    Affinity to be used in the Pod.

    nodeSelector object (keys:string, values:string)

    NodeSelector to be used in the Pod.

    args string array

    Args to be used in the Container.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    securityContext SecurityContext

    SecurityContext holds security configuration that will be applied to a container.

    podMetadata Metadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets LocalObjectReference array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext PodSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    enabled boolean

    Enabled is a flag to enable KubernetesAuth

    authDelegatorRoleName string

    AuthDelegatorRoleName is the name of the ClusterRoleBinding that is associated with the "system:auth-delegator" ClusterRole. It is necessary for creating TokenReview objects in order for the agent to validate the service account token.

    matchLabels object (keys:string, values:string)

    matchExpressions LabelSelectorRequirement array

    key string

    operator LabelSelectorOperatorarrow-up-right

    values string array

    name string

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    MariaDB

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    name string

    namespace string

    kind string

    Kind of the referent.

    command string array

    Command to be used in the Container.

    args string array

    Args to be used in the Container.

    env EnvVar array

    Env represents the environment variables to be injected in a container.

    enabled boolean

    Enabled is a flag to enable Metrics

    exporter Exporter

    Exporter defines the metrics exporter container.

    serviceMonitor ServiceMonitor

    ServiceMonitor defines the ServiceMonior object.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    MaxScale

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    port integer

    Port where the admin REST API and GUI will be exposed.

    guiEnabled boolean

    GuiEnabled indicates whether the admin GUI should be enabled.

    generate boolean

    Generate defies whether the operator should generate users and grants for MaxScale to work. It only supports MariaDBs specified via spec.mariaDbRef.

    adminUsername string

    AdminUsername is an admin username to call the admin REST API. It is defaulted if not provided.

    adminPasswordSecretKeyRef GeneratedSecretKeyRef

    AdminPasswordSecretKeyRef is Secret key reference to the admin password to call the admin REST API. It is defaulted if not provided.

    params object (keys:string, values:string)

    Params is a key value pair of parameters to be used in the MaxScale static configuration file. Any parameter supported by MaxScale may be specified here. See reference: https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-maxscale-configuration-guide/#global-settings.

    volumeClaimTemplate VolumeClaimTemplate

    VolumeClaimTemplate provides a template to define the PVCs for storing MaxScale runtime configuration files. It is defaulted if not provided.

    sync MaxScaleConfigSync

    Sync defines how to replicate configuration across MaxScale replicas. It is defaulted when HA is enabled.

    database string

    Database is the MariaDB logical database where the 'maxscale_config' table will be created in order to persist and synchronize config changes. If not provided, it defaults to 'mysql'.

    interval Durationarrow-up-right

    Interval defines the config synchronization interval. It is defaulted if not provided.

    timeout Durationarrow-up-right

    Interval defines the config synchronization timeout. It is defaulted if not provided.

    suspend boolean

    Suspend indicates whether the current resource should be suspended or not. This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities.

    false

    name string

    Name is the identifier of the listener. It is defaulted if not provided

    port integer

    Port is the network port where the MaxScale server will listen.

    enabled boolean

    Enabled is a flag to enable Metrics

    exporter Exporter

    Exporter defines the metrics exporter container.

    serviceMonitor ServiceMonitor

    ServiceMonitor defines the ServiceMonior object.

    suspend boolean

    Suspend indicates whether the current resource should be suspended or not. This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities.

    false

    name string

    Name is the identifier of the monitor. It is defaulted if not provided.

    module MonitorModule

    Module is the module to use to monitor MariaDB servers. It is mandatory when no MariaDB reference is provided.

    podMetadata Metadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets LocalObjectReference array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext PodSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    name string

    Name is the identifier of the MariaDB server.

    Required: {}

    address string

    Address is the network address of the MariaDB server.

    Required: {}

    port integer

    Port is the network port of the MariaDB server. If not provided, it defaults to 3306.

    suspend boolean

    Suspend indicates whether the current resource should be suspended or not. This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities.

    false

    name string

    Name is the identifier of the MaxScale service.

    Required: {}

    router ServiceRouter

    Router is the type of router to use.

    command string array

    Command to be used in the Container.

    args string array

    Args to be used in the Container.

    env EnvVar array

    Env represents the environment variables to be injected in a container.

    enabled boolean

    Enabled indicates whether TLS is enabled, determining if certificates should be issued and mounted to the MaxScale instance. It is enabled by default when the referred MariaDB instance (via mariaDbRef) has TLS enabled and enforced.

    adminVersions string array

    Versions specifies the supported TLS versions in the MaxScale REST API. By default, the MaxScale's default supported versions are used. See: https://mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/#admin_ssl_version

    items:Enum: [TLSv10 TLSv11 TLSv12 TLSv13 MAX]

    serverVersions string array

    ServerVersions specifies the supported TLS versions in both the servers and listeners managed by this MaxScale instance. By default, the MaxScale's default supported versions are used. See: https://mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/#ssl_version.

    labels object (keys:string, values:string)

    Labels to be added to children resources.

    annotations object (keys:string, values:string)

    Annotations to be added to children resources.

    mariadbmon

    MonitorModuleMariadb is a monitor to be used with MariaDB servers.

    galeramon

    MonitorModuleGalera is a monitor to be used with Galera servers.

    server string

    path string

    readOnly boolean

    requiredDuringSchedulingIgnoredDuringExecution NodeSelector

    preferredDuringSchedulingIgnoredDuringExecution PreferredSchedulingTerm array

    nodeSelectorTerms NodeSelectorTerm array

    key string

    operator NodeSelectorOperatorarrow-up-right

    values string array

    matchExpressions NodeSelectorRequirement array

    matchFields NodeSelectorRequirement array

    apiVersion string

    fieldPath string

    name string

    namespace string

    pluginNameSecretKeyRef SecretKeySelector

    PluginNameSecretKeyRef is a reference to the authentication plugin to be used by the User. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the authentication plugin.

    pluginArgSecretKeyRef SecretKeySelector

    PluginArgSecretKeyRef is a reference to the arguments to be provided to the authentication plugin for the User. If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the authentication plugin arguments.

    Delete

    PersistentVolumeClaimRetentionPolicyDelete deletes PVCs when their owning pods or StatefulSet are deleted.

    Retain

    PersistentVolumeClaimRetentionPolicyRetain retains PVCs when their owning pods or StatefulSet are deleted.

    accessModes PersistentVolumeAccessModearrow-up-right array

    selector LabelSelectorarrow-up-right

    resources VolumeResourceRequirementsarrow-up-right

    claimName string

    readOnly boolean

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    PhysicalBackup

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    podMetadata Metadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets LocalObjectReference array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    podSecurityContext PodSecurityContext

    SecurityContext holds pod-level security attributes and common container settings.

    cron string

    Cron is a cron expression that defines the schedule.

    suspend boolean

    Suspend defines whether the schedule is active or not.

    false

    immediate boolean

    Immediate indicates whether the first backup should be taken immediately after creating the PhysicalBackup.

    args string array

    Args to be used in the Container.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    securityContext SecurityContext

    SecurityContext holds security configuration that will be applied to a container.

    s3 S3

    S3 defines the configuration to store backups in a S3 compatible storage.

    azureBlob AzureBlob

    AzureBlob defines the configuration to store backups in a AzureBlob compatible storage.

    persistentVolumeClaim PersistentVolumeClaimSpec

    PersistentVolumeClaim is a Kubernetes PVC specification.

    Replica

    PhysicalBackupTargetReplica indicates that the physical backup will be taken in a ready replica.

    PreferReplica

    PhysicalBackupTargetReplica indicates that the physical backup will preferably be taken in a ready replica. If no ready replicas are available, physical backups will be taken in the primary.

    metadata Metadata

    Refer to Kubernetes API documentation for fields of metadata.

    volumeSnapshotClassName string

    VolumeSnapshotClassName is the VolumeSnapshot class to be used to take snapshots.

    Required: {}

    labelSelector LabelSelector

    topologyKey string

    requiredDuringSchedulingIgnoredDuringExecution PodAffinityTerm array

    preferredDuringSchedulingIgnoredDuringExecution WeightedPodAffinityTerm array

    minAvailable IntOrStringarrow-up-right

    MinAvailable defines the number of minimum available Pods.

    maxUnavailable IntOrStringarrow-up-right

    MaxUnavailable defines the number of maximum unavailable Pods.

    seLinuxOptions SELinuxOptionsarrow-up-right

    runAsUser integer

    runAsGroup integer

    podMetadata Metadata

    PodMetadata defines extra metadata for the Pod.

    imagePullSecrets LocalObjectReference array

    ImagePullSecrets is the list of pull Secrets to be used to pull the image.

    initContainers Container array

    InitContainers to be used in the Pod.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    PointInTimeRecovery

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    physicalBackupRef LocalObjectReference

    PhysicalBackupRef is a reference to a PhysicalBackup object that will be used as base backup.

    Required: {}

    storage PointInTimeRecoveryStorage

    PointInTimeRecoveryStorage is the storage where the point in time recovery data will be stored

    Required: {}

    compression CompressAlgorithm

    Compression algorithm to be used for compressing the binary logs. This field is immutable, it cannot be updated after creation.

    s3 S3

    S3 is the S3-compatible storage where the binary logs will be kept.

    azureBlob AzureBlob

    AzureBlob is the Azure Blob Storage where the binary logs will be kept.

    weight integer

    preference NodeSelectorTerm

    podIndex integer

    PodIndex is the StatefulSet index of the primary node. The user may change this field to perform a manual switchover.

    autoFailover boolean

    AutoFailover indicates whether the operator should automatically update PodIndex to perform an automatic primary failover.

    podIndex integer

    PodIndex is the StatefulSet index of the primary node. The user may change this field to perform a manual switchover.

    autoFailover boolean

    AutoFailover indicates whether the operator should automatically update PodIndex to perform an automatic primary failover. It is enabled by default.

    autoFailoverDelay Durationarrow-up-right

    AutoFailoverDelay indicates the duration before performing an automatic primary failover. By default, no extra delay is added.

    exec ExecAction

    httpGet HTTPGetAction

    tcpSocket TCPSocketAction

    exec ExecAction

    httpGet HTTPGetAction

    tcpSocket TCPSocketAction

    physicalBackupTemplateRef LocalObjectReference

    PhysicalBackupTemplateRef is a reference to a PhysicalBackup object that will be used as template to create a new PhysicalBackup object used synchronize the data from an up to date replica to the new replica to be bootstrapped.

    Required: {}

    restoreJob Job

    RestoreJob defines additional properties for the Job used to perform the restoration.

    enabled boolean

    Enabled is a flag to enable replica recovery.

    Required: {}

    errorDurationThreshold Durationarrow-up-right

    ErrorDurationThreshold defines the time duration after which, if a replica continues to report errors, the operator will initiate the recovery process for that replica. This threshold applies only to error codes not identified as recoverable by the operator. Errors identified as recoverable will trigger the recovery process immediately. It defaults to 5 minutes.

    replPasswordSecretKeyRef GeneratedSecretKeyRef

    ReplPasswordSecretKeyRef provides a reference to the Secret to use as password for the replication user. By default, a random password will be generated.

    gtid Gtid

    Gtid indicates which Global Transaction ID (GTID) position mode should be used when connecting a replica to the master. By default, CurrentPos is used. See: https://mariadb.com/docs/server/reference/sql-statements/administrative-sql-statements/replication-statements/change-master-to#master_use_gtid.

    Enum: [CurrentPos SlavePos]

    connectionRetrySeconds integer

    ConnectionRetrySeconds is the number of seconds that the replica will wait between connection retries. See: https://mariadb.com/docs/server/reference/sql-statements/administrative-sql-statements/replication-statements/change-master-to#master_connect_retry.

    primary PrimaryReplication

    Primary is the replication configuration for the primary node.

    replica ReplicaReplication

    ReplicaReplication is the replication configuration for the replica nodes.

    gtidStrictMode boolean

    GtidStrictMode determines whether the GTID strict mode is enabled. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/gtid#gtid_strict_mode. It is enabled by default.

    primary PrimaryReplication

    Primary is the replication configuration for the primary node.

    replica ReplicaReplication

    ReplicaReplication is the replication configuration for the replica nodes.

    gtidStrictMode boolean

    GtidStrictMode determines whether the GTID strict mode is enabled. See: https://mariadb.com/docs/server/ha-and-performance/standard-replication/gtid#gtid_strict_mode. It is enabled by default.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    Restore

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    backupRef LocalObjectReference

    BackupRef is a reference to a Backup object. It has priority over S3 and Volume.

    s3 S3

    S3 defines the configuration to restore backups from a S3 compatible storage. It has priority over Volume.

    volume StorageVolumeSource

    Volume is a Kubernetes Volume object that contains a backup.

    args string array

    Args to be used in the Container.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    securityContext SecurityContext

    SecurityContext holds security configuration that will be applied to a container.

    bucket string

    Bucket is the name Name of the bucket to store backups.

    Required: {}

    endpoint string

    Endpoint is the S3 API endpoint without scheme.

    Required: {}

    region string

    Region is the S3 region name to use.

    requeueInterval Durationarrow-up-right

    RequeueInterval is used to perform requeue reconciliations.

    retryInterval Durationarrow-up-right

    RetryInterval is the interval used to perform retries.

    cleanupPolicy CleanupPolicy

    CleanupPolicy defines the behavior for cleaning up a SQL resource.

    customerKeySecretKeyRef SecretKeySelector

    CustomerKeySecretKeyRef is a reference to a Secret key containing the SSE-C customer-provided encryption key. The key must be a 32-byte (256-bit) key encoded in base64.

    Required: {}

    rsync

    SSTRsync is an SST based on rsync.

    mariabackup

    SSTMariaBackup is an SST based on mariabackup. It is the recommended SST.

    mysqldump

    SSTMysqldump is an SST based on mysqldump.

    cron string

    Cron is a cron expression that defines the schedule.

    Required: {}

    suspend boolean

    Suspend defines whether the schedule is active or not.

    false

    name string

    key string

    metadata Metadata

    Refer to Kubernetes API documentation for fields of metadata.

    key string

    Key to be used in the Secret.

    format string

    Format to be used in the Secret.

    secretName string

    defaultMode integer

    capabilities Capabilitiesarrow-up-right

    privileged boolean

    runAsUser integer

    prometheusRelease string

    PrometheusRelease is the release label to add to the ServiceMonitor object.

    jobLabel string

    JobLabel to add to the ServiceMonitor object.

    interval string

    Interval for scraping metrics.

    name string

    port integer

    readwritesplit

    ServiceRouterReadWriteSplit splits the load based on the queries. Write queries are performed on master and read queries on the replicas.

    readconnroute

    ServiceRouterReadConnRoute splits the load based on the connections. Each connection is assigned to a server.

    type ServiceTypearrow-up-right

    Type is the Service type. One of ClusterIP, NodePort or LoadBalancer. If not defined, it defaults to ClusterIP.

    ClusterIP

    Enum: [ClusterIP NodePort LoadBalancer]

    metadata Metadata

    Refer to Kubernetes API documentation for fields of metadata.

    loadBalancerIP string

    LoadBalancerIP Service field.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    SqlJob

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    args string array

    Args to be used in the Container.

    resources ResourceRequirements

    Resources describes the compute resource requirements.

    securityContext SecurityContext

    SecurityContext holds security configuration that will be applied to a container.

    persistentVolumeClaim PersistentVolumeClaimSpec

    PersistentVolumeClaim is a Kubernetes PVC specification.

    volume StorageVolumeSource

    Volume is a Kubernetes volume specification.

    whenDeleted PersistentVolumeClaimRetentionPolicyType

    whenScaled PersistentVolumeClaimRetentionPolicyType

    ephemeral boolean

    Ephemeral indicates whether to use ephemeral storage in the PVCs. It is only compatible with non HA MariaDBs.

    size Quantityarrow-up-right

    Size of the PVCs to be mounted by MariaDB. Required if not provided in 'VolumeClaimTemplate'. It supersedes the storage size specified in 'VolumeClaimTemplate'.

    storageClassName string

    StorageClassName to be used to provision the PVCS. It supersedes the 'StorageClassName' specified in 'VolumeClaimTemplate'. If not provided, the default 'StorageClass' configured in the cluster is used.

    emptyDir EmptyDirVolumeSource

    nfs NFSVolumeSource

    csi CSIVolumeSource

    suspend boolean

    Suspend indicates whether the current resource should be suspended or not. This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities.

    false

    port IntOrStringarrow-up-right

    host string

    enabled boolean

    Enabled indicates whether TLS is enabled, determining if certificates should be issued and mounted to the MariaDB instance. It is enabled by default.

    required boolean

    Required specifies whether TLS must be enforced for all connections. User TLS requirements take precedence over this. It disabled by default.

    versions string array

    Versions specifies the supported TLS versions for this MariaDB instance. By default, the MariaDB's default supported versions are used. See: https://mariadb.com/kb/en/ssltls-system-variables/#tls_version.

    enabled boolean

    Enabled is a flag to enable TLS.

    caSecretKeyRef SecretKeySelector

    CASecretKeyRef is a reference to a Secret key containing a CA bundle in PEM format used to establish TLS connections with S3. By default, the system trust chain will be used, but you can use this field to add more CAs to the bundle.

    ssl boolean

    SSL indicates that the user must connect via TLS.

    x509 boolean

    X509 indicates that the user must provide a valid x509 certificate to connect.

    issuer string

    Issuer indicates that the TLS certificate provided by the user must be issued by a specific issuer.

    maxSkew integer

    topologyKey string

    whenUnsatisfiable UnsatisfiableConstraintActionarrow-up-right

    name string

    Name of the referent.

    kind string

    Kind of the referent.

    type UpdateType

    Type defines the type of updates. One of ReplicasFirstPrimaryLast, RollingUpdate or OnDelete. If not defined, it defaults to ReplicasFirstPrimaryLast.

    ReplicasFirstPrimaryLast

    Enum: [ReplicasFirstPrimaryLast RollingUpdate OnDelete Never]

    rollingUpdate RollingUpdateStatefulSetStrategyarrow-up-right

    RollingUpdate defines parameters for the RollingUpdate type.

    autoUpdateDataPlane boolean

    AutoUpdateDataPlane indicates whether the Galera data-plane version (agent and init containers) should be automatically updated based on the operator version. It defaults to false. Updating the operator will trigger updates on all the MariaDB instances that have this flag set to true. Thus, it is recommended to progressively set this flag after having updated the operator.

    ReplicasFirstPrimaryLast

    ReplicasFirstPrimaryLastUpdateType indicates that the update will be applied to all replica Pods first and later on to the primary Pod. The updates are applied one by one waiting until each Pod passes the readiness probe i.e. the Pod gets synced and it is ready to receive traffic.

    RollingUpdate

    RollingUpdateUpdateType indicates that the update will be applied by the StatefulSet controller using the RollingUpdate strategy. This strategy is unaware of the roles that the Pod have (primary or replica) and it will perform the update following the StatefulSet ordinal, from higher to lower.

    OnDelete

    OnDeleteUpdateType indicates that the update will be applied by the StatefulSet controller using the OnDelete strategy. The update will be done when the Pods get manually deleted by the user.

    Never

    NeverUpdateType indicates that the StatefulSet will never be updated. This can be used to roll out updates progressively to a fleet of instances.

    apiVersion string

    enterprise.mariadb.com/v1alpha1

    kind string

    User

    metadata ObjectMetaarrow-up-right

    Refer to Kubernetes API documentation for fields of metadata.

    requeueInterval Durationarrow-up-right

    RequeueInterval is used to perform requeue reconciliations.

    retryInterval Durationarrow-up-right

    RetryInterval is the interval used to perform retries.

    cleanupPolicy CleanupPolicy

    CleanupPolicy defines the behavior for cleaning up a SQL resource.

    name string

    emptyDir EmptyDirVolumeSource

    nfs NFSVolumeSource

    accessModes PersistentVolumeAccessModearrow-up-right array

    selector LabelSelectorarrow-up-right

    resources VolumeResourceRequirementsarrow-up-right

    name string

    This must match the Name of a Volume.

    readOnly boolean

    mountPath string

    emptyDir EmptyDirVolumeSource

    nfs NFSVolumeSource

    csi CSIVolumeSource

    AfterSync

    WaitPointAfterSync indicates that the primary waits for the replica ACK before committing the transaction to the storage engine. It trades off performance for consistency.

    AfterCommit

    WaitPointAfterCommit indicates that the primary commits the transaction to the storage engine and waits for the replica ACK afterwards. It trades off consistency for performance.

    weight integer

    podAffinityTerm PodAffinityTerm

    Backup
    Connection
    Database
    AffinityConfig
    BackupSpec
    Exporter
    Job
    Galera
    GaleraSpec
    Replication
    BootstrapFrom
    PhysicalBackupStorage
    PointInTimeRecoveryStorage
    BootstrapFrom
    Backup
    BackupSpec
    Agent
    MariaDBSpec
    StorageVolumeSource
    Volume
    VolumeSource
    ExternalTLS
    MaxScaleTLS
    TLS
    DatabaseSpec
    GrantSpec
    MariaDBSpec
    BackupSpec
    PhysicalBackupSpec
    PointInTimeRecoverySpec
    EnvVarSource
    MariaDBSpec
    SqlJobSpec
    Volume
    VolumeSource
    Connection
    ConnectionSpec
    ExternalMariaDBSpec
    MariaDBSpec
    MariaDBSpec
    PodTemplate
    Agent
    InitContainer
    MariaDBSpec
    MaxScaleMonitor
    BackupSpec
    SqlJobSpec
    Database
    StorageVolumeSource
    Volume
    VolumeSource
    Agent
    ContainerTemplate
    InitContainer
    Agent
    Container
    ContainerTemplate
    EnvVar
    Probe
    ProbeHandler
    MariadbMetrics
    MaxScaleMetrics
    ExternalMariaDB
    ExternalMariaDBSpec
    MariaDBSpec
    Galera
    GaleraSpec
    Galera
    GaleraSpec
    Galera
    GaleraSpec
    GaleraRecovery
    Galera
    BasicAuth
    MariaDBSpec
    MariadbMetrics
    Grant
    ReplicaReplication
    Probe
    ProbeHandler
    ConnectionSpec
    ConnectionTemplate
    StorageVolumeSource
    Volume
    VolumeSource
    Galera
    GaleraSpec
    Replication
    BootstrapFrom
    ReplicaBootstrapFrom
    BackupSpec
    PhysicalBackupSpec
    RestoreSpec
    BackupSpec
    RestoreSpec
    SqlJobSpec
    Agent
    PodAffinityTerm
    LabelSelector
    BackupSpec
    BootstrapFrom
    CSIVolumeSource
    BackupSpec
    ConnectionSpec
    DatabaseSpec
    MariaDB
    MariaDBSpec
    MaxScaleSpec
    MaxScaleSpec
    MaxScaleSpec
    MaxScaleConfig
    MaxScaleService
    MaxScaleSpec
    MaxScaleSpec
    MaxScaleSpec
    MaxScaleSpec
    MaxScaleSpec
    MaxScale
    MaxScaleSpec
    BackupSpec
    Exporter
    ExternalMariaDBSpec
    MaxScaleMonitor
    StorageVolumeSource
    Volume
    VolumeSource
    Affinity
    AffinityConfig
    NodeAffinity
    NodeSelectorTerm
    NodeSelector
    PreferredSchedulingTerm
    EnvVarSource
    ConnectionSpec
    MariaDBRef
    MariaDBSpec
    MariaDBSpec
    UserSpec
    StatefulSetPersistentVolumeClaimRetentionPolicy
    BackupStorage
    PhysicalBackupStorage
    StagingStorage
    StorageVolumeSource
    Volume
    VolumeSource
    PhysicalBackupSpec
    PhysicalBackupSpec
    PhysicalBackup
    PhysicalBackupSpec
    PhysicalBackupSpec
    PhysicalBackupStorage
    PodAntiAffinity
    WeightedPodAffinityTerm
    Affinity
    AffinityConfig
    MariaDBSpec
    MaxScaleSpec
    BackupSpec
    Exporter
    JobPodTemplate
    MariaDBSpec
    PointInTimeRecovery
    PointInTimeRecoverySpec
    NodeAffinity
    Galera
    GaleraSpec
    Replication
    ReplicationSpec
    Agent
    ContainerTemplate
    InitContainer
    Probe
    ReplicaReplication
    ReplicaReplication
    Replication
    ReplicationSpec
    MariaDBSpec
    Replication
    Agent
    BackupSpec
    Container
    RestoreSpec
    Restore
    BackupStorage
    BootstrapFrom
    PhysicalBackupStorage
    DatabaseSpec
    GrantSpec
    UserSpec
    S3
    Galera
    GaleraSpec
    BackupSpec
    SqlJobSpec
    AzureBlob
    ConnectionSpec
    EnvVarSource
    ConnectionSpec
    ConnectionTemplate
    Volume
    VolumeSource
    Agent
    BackupSpec
    ContainerTemplate
    MariadbMetrics
    MaxScaleMetrics
    MariaDBSpec
    MaxScaleService
    MariaDBSpec
    MaxScaleSpec
    SqlJob
    BackupSpec
    BootstrapFrom
    PhysicalBackupSpec
    Storage
    MariaDBSpec
    BackupStorage
    BootstrapFrom
    PhysicalBackupStorage
    MariaDBSpec
    MaxScaleListener
    MaxScaleMonitor
    Probe
    ProbeHandler
    ExternalTLS
    MariaDBSpec
    AzureBlob
    S3
    UserSpec
    MariaDBSpec
    MaxScalePodTemplate
    MaxScaleSpec
    BootstrapFrom
    MariaDBSpec
    UpdateStrategy
    User
    MariaDBSpec
    PodTemplate
    GaleraConfig
    MaxScaleConfig
    Storage
    Agent
    Container
    ContainerTemplate
    Volume
    Replication
    ReplicationSpec
    PodAntiAffinity

    Enum: [ECDSA RSA]

    Enum: [Always Never IfNotPresent]

    Enum: [Skip Delete]

    items:Enum: [TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3]

    Enum: [Skip Delete]

    Required: {}

    Enum: [readwritesplit readconnroute] Required: {}

    items:Enum: [TLSv10 TLSv11 TLSv12 TLSv13 MAX]

    Enum: [none bzip2 gzip]

    Enum: [Skip Delete]

    items:Enum: [TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3]

    Enum: [Skip Delete]

    EnvFromSource
    VolumeMount
    Probe
    Probe
    Probe
    ResourceRequirements
    SecurityContext
    PullPolicyarrow-up-right
    KubernetesAuth
    BasicAuth
    Durationarrow-up-right
    SecretKeySelector
    TLSConfig
    BackupSpec
    Metadata
    LocalObjectReference
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    MariaDBRef
    CompressAlgorithm
    StagingStorage
    BackupStorage
    Schedule
    Durationarrow-up-right
    RestartPolicyarrow-up-right
    Metadata
    BackupContentType
    S3
    AzureBlob
    StorageVolumeSource
    Timearrow-up-right
    StagingStorage
    Job
    LocalObjectReference
    ConnectionSpec
    MariaDBRef
    ObjectReference
    SecretKeySelector
    LocalObjectReference
    EnvVar
    VolumeMount
    ResourceRequirements
    EnvFromSource
    VolumeMount
    Probe
    Probe
    Probe
    ResourceRequirements
    SecurityContext
    DatabaseSpec
    MariaDBRef
    ResourceRequirements
    Metadata
    SecurityContext
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    ExternalMariaDBSpec
    Metadata
    SecretKeySelector
    ExternalTLS
    ConnectionTemplate
    LocalObjectReference
    LocalObjectReference
    ObjectReference
    CertConfig
    LocalObjectReference
    LocalObjectReference
    ObjectReference
    CertConfig
    Agent
    GaleraRecovery
    InitContainer
    GaleraInitJob
    GaleraConfig
    Durationarrow-up-right
    Durationarrow-up-right
    Durationarrow-up-right
    Durationarrow-up-right
    Durationarrow-up-right
    Durationarrow-up-right
    GaleraRecoveryJob
    Agent
    GaleraRecovery
    InitContainer
    GaleraInitJob
    GaleraConfig
    GrantSpec
    MariaDBRef
    URISchemearrow-up-right
    EnvFromSource
    VolumeMount
    Probe
    Probe
    Probe
    ResourceRequirements
    SecurityContext
    PullPolicyarrow-up-right
    Tolerationarrow-up-right
    ResourceRequirements
    AffinityConfig
    Tolerationarrow-up-right
    MariaDBSpec
    EnvFromSource
    VolumeMount
    Probe
    Probe
    Probe
    ResourceRequirements
    SecurityContext
    Metadata
    LocalObjectReference
    Container
    Container
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    Volume
    TopologySpreadConstraint
    PullPolicyarrow-up-right
    Metadata
    GeneratedSecretKeyRef
    GeneratedSecretKeyRef
    SecretKeySelector
    PasswordPlugin
    CleanupPolicy
    ConfigMapKeySelector
    BootstrapFrom
    Storage
    MariadbMetrics
    TLS
    Replication
    Galera
    ObjectReference
    LocalObjectReference
    ServicePort
    PodDisruptionBudget
    UpdateStrategy
    ServiceTemplate
    ConnectionTemplate
    ServiceTemplate
    ConnectionTemplate
    ServiceTemplate
    ConnectionTemplate
    GeneratedSecretKeyRef
    MaxScaleSpec
    GeneratedSecretKeyRef
    GeneratedSecretKeyRef
    GeneratedSecretKeyRef
    GeneratedSecretKeyRef
    GeneratedSecretKeyRef
    Durationarrow-up-right
    CooperativeMonitoring
    AffinityConfig
    Tolerationarrow-up-right
    TopologySpreadConstraint
    MaxScaleListener
    EnvFromSource
    VolumeMount
    Probe
    Probe
    Probe
    ResourceRequirements
    SecurityContext
    Metadata
    LocalObjectReference
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    TopologySpreadConstraint
    MariaDBRef
    MaxScaleServer
    PullPolicyarrow-up-right
    Metadata
    MaxScaleService
    MaxScaleMonitor
    MaxScaleAdmin
    MaxScaleConfig
    MaxScaleAuth
    MaxScaleMetrics
    MaxScaleTLS
    ConnectionTemplate
    PodDisruptionBudget
    StatefulSetUpdateStrategyarrow-up-right
    ServiceTemplate
    ServiceTemplate
    Durationarrow-up-right
    LocalObjectReference
    LocalObjectReference
    ObjectReference
    CertConfig
    LocalObjectReference
    LocalObjectReference
    ObjectReference
    CertConfig
    LocalObjectReference
    LocalObjectReference
    PhysicalBackupSpec
    Tolerationarrow-up-right
    Metadata
    LocalObjectReference
    PodSecurityContext
    Tolerationarrow-up-right
    MariaDBRef
    PhysicalBackupTarget
    CompressAlgorithm
    StagingStorage
    PhysicalBackupStorage
    PhysicalBackupSchedule
    Durationarrow-up-right
    Durationarrow-up-right
    RestartPolicyarrow-up-right
    Metadata
    StorageVolumeSource
    PhysicalBackupVolumeSnapshot
    PodFSGroupChangePolicyarrow-up-right
    SeccompProfilearrow-up-right
    AppArmorProfilearrow-up-right
    Container
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    Volume
    TopologySpreadConstraint
    PointInTimeRecoverySpec
    Durationarrow-up-right
    Durationarrow-up-right
    Durationarrow-up-right
    Durationarrow-up-right
    ReplicaBootstrapFrom
    ReplicaRecovery
    Durationarrow-up-right
    WaitPoint
    InitContainer
    Agent
    Durationarrow-up-right
    WaitPoint
    InitContainer
    Agent
    RestoreSpec
    Timearrow-up-right
    StagingStorage
    Metadata
    LocalObjectReference
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    LocalObjectReference
    S3
    StorageVolumeSource
    Timearrow-up-right
    StagingStorage
    MariaDBRef
    RestartPolicyarrow-up-right
    Metadata
    SecretKeySelector
    SecretKeySelector
    SecretKeySelector
    TLSConfig
    SSECConfig
    ServiceExternalTrafficPolicyarrow-up-right
    ServiceAffinityarrow-up-right
    SqlJobSpec
    Metadata
    LocalObjectReference
    PodSecurityContext
    AffinityConfig
    Tolerationarrow-up-right
    MariaDBRef
    Schedule
    SecretKeySelector
    LocalObjectReference
    LocalObjectReference
    LocalObjectReference
    ConfigMapKeySelector
    RestartPolicyarrow-up-right
    Metadata
    VolumeClaimTemplate
    StatefulSetPersistentVolumeClaimRetentionPolicy
    HostPathVolumeSource
    PersistentVolumeClaimVolumeSource
    LocalObjectReference
    LocalObjectReference
    ObjectReference
    CertConfig
    LocalObjectReference
    LocalObjectReference
    ObjectReference
    CertConfig
    LabelSelectorarrow-up-right
    NodeInclusionPolicyarrow-up-right
    NodeInclusionPolicyarrow-up-right
    UserSpec
    MariaDBRef
    SecretKeySelector
    SecretKeySelector
    PasswordPlugin
    TLSRequirements
    CSIVolumeSource
    HostPathVolumeSource
    PersistentVolumeClaimVolumeSource
    SecretVolumeSource
    ConfigMapVolumeSource
    Metadata
    HostPathVolumeSource
    PersistentVolumeClaimVolumeSource
    SecretVolumeSource
    ConfigMapVolumeSource
    MariaDB Enterprise Repository - "MariaDB Enterprise Tools"
    Set up the repository for each monitored MariaDB Server and MaxScale
    MariaDB Enterprise Docker Registry
    MariaDB Enterprise Repository - "MariaDB Enterprise Tools"
    CREATE USER
    GRANT
    privileges supported by MariaDB
    CREATE DATABASE
    strict-password-validation
    MariaDB authentication plugins
    MariaDB PASSWORD
    MariaDB authentication plugins
    MariaDB docs
    configuration file (my.cnf)
    configuration option
    system variable
    MariaDB docs
    MariaDB Server
    MariaDB docs
    MariaDB docs