Skip to content

MariaDB#

MariaDB is the open source successor to MySQL.

The Lagoon MariaDB image Dockerfile. Based on the official packages mariadb and mariadb-client provided by the the upstream Alpine image.

This Dockerfile is intended to be used to set up a standalone MariaDB database server.

  • 10.4 (available for compatibility only, no longer officially supported) - uselagoon/mariadb-10.4
  • 10.5 Dockerfile (Alpine 3.14 Support until May 2023) - uselagoon/mariadb-10.5
  • 10.6 Dockerfile (Alpine 3.16 Support until May 2024) - uselagoon/mariadb-10.6
  • 10.11 Dockerfile (Alpine 3.18 Support until May 2025) - uselagoon/mariadb-10.11

Info

As these images are not built from the upstream MariaDB images, their support follows a different cycle - and will only receive updates as long as the underlying Alpine images receive support - see https://alpinelinux.org/releases/ for more information. In practice, most MariaDB users will only be running these containers locally - the production instances will use the Managed Cloud Databases provided by the DBaaS Operator

Lagoon adaptions#

The default exposed port of MariaDB containers is port 3306.

To allow Lagoon to select the best way to run the MariaDB container, use lagoon.type: mariadb - this allows the DBaaS operator to provision a cloud database if available in the cluster. Use lagoon.type: mariadb-single to specifically request MariaDB in a container. Persistent storage is always provisioned for MariaDB containers at /var/lib/mysql.

This image is prepared to be used on Lagoon. There are therefore some things already done:

  • Folder permissions are automatically adapted with fix-permissions, so this image will work with a random user.
  • readiness-probe.sh script to check when MariaDB container is ready.

docker-compose.yml snippet#

docker-compose.yml
    mariadb:
        image: uselagoon/mariadb-10.6-drupal:latest
        labels:
        # tells Lagoon this is a MariaDB database
            lagoon.type: mariadb
        ports:
            # exposes the port 3306 with a random local port, find it with `docker compose port mariadb 3306`
            - "3306"
        volumes:
            # mounts a named volume at the default path for MariaDB
            - db:/var/lib/mysql

Included tools#

  • mysqltuner.pl - Perl script useful for database parameter tuning.
  • mysql-backup.sh - Script for automating the daily MySQL backups on development environment.
  • pwgen - Utility to generate random and complex passwords.

Included my.cnf configuration file#

The image ships a default MariaDB configuration file, optimized to work on Lagoon. Some options are configurable via environment variables.

Environment Variables#

Environment Variable Default Description
MARIADB_DATABASE lagoon Database name created at startup.
MARIADB_USER lagoon Default user created at startup.
MARIADB_PASSWORD lagoon Password of default user created at startup.
MARIADB_ROOT_PASSWORD Lag00n MariaDB root user's password.
MARIADB_CHARSET utf8mb4 Set the server charset.
MARIADB_COLLATION utf8mb4_bin Set server collation.
MARIADB_MAX_ALLOWED_PACKET 64M Set the max_allowed_packet size.
MARIADB_INNODB_BUFFER_POOL_SIZE 256M Set the MariaDB InnoDB buffer pool size.
MARIADB_INNODB_BUFFER_POOL_INSTANCES 1 Number of InnoDB buffer pool instances.
MARIADB_INNODB_LOG_FILE_SIZE 64M Size of InnoDB log file.
MARIADB_LOG_SLOW (not set) Variable to control the save of slow queries.
MARIADB_LOG_QUERIES (not set) Variable to control the save of ALL queries.
BACKUPS_DIR /var/lib/mysql/backup Default path for databases backups.
MARIADB_DATA_DIR /var/lib/mysql Path of the MariaDB data dir, be careful, changing this can occur data loss!
MARIADB_COPY_DATA_DIR_SOURCE (not set) Path which the entrypoint script of mariadb will use to copy into the defined MARIADB_DATA_DIR, this can be used for prepopulating the MariaDB with a database. The scripts expects actual MariaDB data files and not a sql file! Plus it only copies data if the destination does not already have a mysql datadir in it.

If the LAGOON_ENVIRONMENT_TYPE variable is set to production, performances are set accordingly by using MARIADB_INNODB_BUFFER_POOL_SIZE=1024 and MARIADB_INNODB_LOG_FILE_SIZE=256.