using-healthcheck-sh
Using Healthcheck.sh
The healthcheck.sh script is part of the Docker Official Images of MariaDB Server. The script is part of the repository of the Docker Official Image of MariaDB Server.
The script processes a number of argument and tests, together, in strict order. Arguments pertaining to a test must occur before the test name. If a test fails, no further processing is performed. Both arguments and tests begin with a double-hyphen.
By default, (since 2023-06-27), official images will create healthcheck@localhost
, healthcheck@127.0.0.1
, healthcheck@::1
users with a random password and USAGE privileges. MARIADB_HEALTHCHECK_GRANTS can be used for --replication
where additional grants are required. This is stored in .my-healthcheck.cnf
in the datadir of the container and passed as the --defaults-extra-file
to the healthcheck.sh script if it exists. The .my-healthcheck.cnf
also sets protocol=tcp
for the mariadb
so --connect
is effectively there on all tests.
The MARIADB_AUTO_UPGRADE=1 will regenerate the .my-healthcheck.cnf
file if missing and recreate the healthcheck users of the database with a new random password. The current port configuration of the MariaDB container is written into this file.
The MARIADB_MYSQL_LOCALHOST_USER=1, MARIADB_MYSQL_LOCALHOST_GRANTS environment variables can also be used, but with the creation of the healthcheck user, these are backwards compatible.
Compose File Example
An example of a compose file that uses the healthcheck.sh to determine a healthy service as a dependency before starting a WordPress service:
version: "3"
services:
mariadb:
image: mariadb:lts
environment:
- MARIADB_DATABASE=testdb
- MARIADB_USER=testuser
- MARIADB_PASSWORD=password
- MARIADB_RANDOM_ROOT_PASSWORD=1
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 10s
interval: 10s
timeout: 5s
retries: 3
wordpress:
image: wordpress
environment:
- WORDPRESS_DB_HOST=mariadb
- WORDPRESS_DB_NAME=testdb
- WORDPRESS_DB_USER=testuser
- WORDPRESS_DB_PASSWORD=password
depends_on:
mariadb:
condition: service_healthy
Tests
The various health check flags used for monitoring the status and readiness of a MariaDB server.
--connect
Active when an external user can connect to the TCP port of MariaDB Server. This strictly tests the TCP connection, not authentication.
--innodb_initialized
True when InnoDB has completed initializing, including any rollback or crash recovery.
The connecting user must have USAGE
privileges.
--innodb_buffer_pool_loaded
Indicates that the previously saved buffer pool dump has been completely loaded, meaning the server has a hot cache ready for use.
The connecting user must have USAGE
privileges.
--galera_online
Indicates that the Galera node is online (based on the wsrep_local_state
variable). This includes states like "joining" and "donor" where it cannot serve SQL queries.
The connecting user must have USAGE
privileges.
--replication
Tests a replica based on the --replication_*
parameters. All subtests must pass: <ul><li>io: The IO thread is running.</li><li>sql: The SQL thread is running.</li><li>seconds_behind_master: The replica is less than a specified number of seconds behind the primary.</li><li>sql_remaining_delay: The delayed replica is less than a specified number of seconds behind the primary's execution.</li></ul>
REPLICATION_CLIENT
(before MariaDB 10.5) or REPLICA MONITOR
(MariaDB 10.5+).
--mariadbupgrade
Indicates that MariaDB is upgraded to the current version.
Parameters
To customize the health checks described previously, you can use the following parameters:
--replication_all
Checks all replication sources.
--replication_name=n
Sets the multisource connection name to be tested. This unsets --replication_all
.
--replication_io
Checks if the replication IO thread is running.
--replication_sql
Checks if the replication SQL thread is running.
--replication_seconds_behind_master=n
Checks if the replication delay is less than or equal to n
seconds.
--replication_sql_remaining_delay=n
Checks if the remaining SQL delay is less than or equal to n
seconds.
--su=n
Changes to the specified user (n
). Can only be used once from the default root
user.
--su-mysql
Changes to the mysql
unix user. Respawns the script, resetting all parameters, so it should be the first argument.
--datadir=n
Specifies the data directory location (n
) for the --mariadbupgrade
test.
--no-defaults
--defaults-file
--defaults-extra-file
--defaults-group-suffix
These parameters are passed to the mariadb
shell for all tests except --mariadbupgrade
.
Examples
healthcheck.sh --su-mysql --connect --innodb_initialized
Switch to mysql
user, and check if can connect and the innodb is initialized.
healthcheck.sh --su-mysql --connect --replication_io --replication_sql --replication_seconds_behind_master=600 --replication_sql_remaining_delay=30 ----replication_name=archive --replication --replication_seconds_behind_master=10 --replication_name=channel1 --replication
Switch to mysql
user, check if connections can be made. For the replication channel archive
, ensure IO and SQL threads are running, the seconds behind master is less than 600
seconds, and the SQL remaining delay is less than 30
seconds. For the channel1
, the seconds behind master is limited to 10
seconds maximum.
This page is licensed: CC BY-SA / Gnu FDL
Last updated
Was this helpful?