From 8d35a5754254aa4795f98f967605f817fcb03c4a Mon Sep 17 00:00:00 2001 From: Bitnami Bot Date: Thu, 1 Aug 2019 14:11:06 +0000 Subject: [PATCH] 10.2.26-ol-7-r0 release --- bitnami/mariadb-galera/10.2/ol-7/Dockerfile | 22 + .../10.2/ol-7/docker-compose.yml | 19 + .../10.2/ol-7/rootfs/entrypoint.sh | 26 + .../10.2/ol-7/rootfs/etc/nslcd.conf | 5 + .../10.2/ol-7/rootfs/etc/pam.d/mariadb | 2 + .../10.2/ol-7/rootfs/libmariadbgalera.sh | 13 + .../10.2/ol-7/rootfs/libmysqlgalera.sh | 861 ++++++++++++++++++ .../10.2/ol-7/rootfs/postunpack.sh | 18 + .../mariadb-galera/10.2/ol-7/rootfs/run.sh | 25 + .../mariadb-galera/10.2/ol-7/rootfs/setup.sh | 29 + bitnami/mariadb-galera/README.md | 2 +- 11 files changed, 1021 insertions(+), 1 deletion(-) create mode 100644 bitnami/mariadb-galera/10.2/ol-7/Dockerfile create mode 100644 bitnami/mariadb-galera/10.2/ol-7/docker-compose.yml create mode 100755 bitnami/mariadb-galera/10.2/ol-7/rootfs/entrypoint.sh create mode 100644 bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/nslcd.conf create mode 100644 bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/pam.d/mariadb create mode 100644 bitnami/mariadb-galera/10.2/ol-7/rootfs/libmariadbgalera.sh create mode 100644 bitnami/mariadb-galera/10.2/ol-7/rootfs/libmysqlgalera.sh create mode 100755 bitnami/mariadb-galera/10.2/ol-7/rootfs/postunpack.sh create mode 100755 bitnami/mariadb-galera/10.2/ol-7/rootfs/run.sh create mode 100755 bitnami/mariadb-galera/10.2/ol-7/rootfs/setup.sh diff --git a/bitnami/mariadb-galera/10.2/ol-7/Dockerfile b/bitnami/mariadb-galera/10.2/ol-7/Dockerfile new file mode 100644 index 000000000000..eab2dd17c58c --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/Dockerfile @@ -0,0 +1,22 @@ +FROM bitnami/oraclelinux-extras-base:7-r365 +LABEL maintainer "Bitnami " + +ENV OS_ARCH="x86_64" \ + OS_FLAVOUR="ol-7" \ + OS_NAME="linux" + +# Install required system packages and dependencies +RUN install_packages audit-libs glibc hostname iproute keyutils-libs krb5-libs libaio libcap-ng libcom_err libgcc libselinux libstdc++ lsof ncurses-libs nss-pam-ldapd nss-softokn-freebl openldap-clients openssl-libs pam pcre rsync socat zlib +RUN . ./libcomponent.sh && component_unpack "mariadb-galera" "10.2.26-0" --checksum 098f309e86daa8a14063a1ed278d363fc6db6d201e88cf56490649e555fa765e +RUN mkdir /docker-entrypoint-initdb.d + +COPY rootfs / +RUN /postunpack.sh +ENV BITNAMI_APP_NAME="mariadb-galera" \ + BITNAMI_IMAGE_VERSION="10.2.26-ol-7-r0" \ + PATH="/opt/bitnami/mariadb/bin:/opt/bitnami/mariadb/sbin:$PATH" + +EXPOSE 3306 4444 4567 4568 + +ENTRYPOINT [ "/entrypoint.sh" ] +CMD [ "/run.sh" ] diff --git a/bitnami/mariadb-galera/10.2/ol-7/docker-compose.yml b/bitnami/mariadb-galera/10.2/ol-7/docker-compose.yml new file mode 100644 index 000000000000..be6587827bc2 --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/docker-compose.yml @@ -0,0 +1,19 @@ +version: '2' + +services: + mariadb-galera: + image: bitnami/mariadb-galera:10.2-ol-7 + ports: + - '3306:3306' + - '4444:4444' + - '4567:4567' + - '4568:4568' + volumes: + - 'mariadb_galera_data:/bitnami/mariadb' + environment: + # ALLOW_EMPTY_PASSWORD is recommended only for development. + - ALLOW_EMPTY_PASSWORD=yes + +volumes: + mariadb_galera_data: + driver: local diff --git a/bitnami/mariadb-galera/10.2/ol-7/rootfs/entrypoint.sh b/bitnami/mariadb-galera/10.2/ol-7/rootfs/entrypoint.sh new file mode 100755 index 000000000000..33e98e7aaf50 --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/rootfs/entrypoint.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# shellcheck disable=SC1091 + +set -o errexit +set -o nounset +set -o pipefail +# set -o xtrace # Uncomment this line for debugging purpose + +# Load libraries +. /libbitnami.sh +. /libmariadbgalera.sh + +# Load MariaDB environment variables +eval "$(mysql_env)" + +print_welcome_page + +if [[ "$*" = "/run.sh" ]]; then + info "** Starting MariaDB setup **" + /setup.sh + info "** MariaDB setup finished! **" +fi + +echo "" +exec "$@" diff --git a/bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/nslcd.conf b/bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/nslcd.conf new file mode 100644 index 000000000000..e381dd22de3d --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/nslcd.conf @@ -0,0 +1,5 @@ +uid nslcd +gid ldap +nss_initgroups_ignoreusers root,nslcd +scope sub +tls_reqcert demand diff --git a/bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/pam.d/mariadb b/bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/pam.d/mariadb new file mode 100644 index 000000000000..cc45e843efb7 --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/rootfs/etc/pam.d/mariadb @@ -0,0 +1,2 @@ +auth required pam_ldap.so try_first_pass debug +account required pam_ldap.so debug diff --git a/bitnami/mariadb-galera/10.2/ol-7/rootfs/libmariadbgalera.sh b/bitnami/mariadb-galera/10.2/ol-7/rootfs/libmariadbgalera.sh new file mode 100644 index 000000000000..45dfe7d797ec --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/rootfs/libmariadbgalera.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# +# Bitnami MariaDB library + +# shellcheck disable=SC1091 + +# Export environment variables +export DB_FLAVOR="mariadb" +export DB_SBINDIR="/opt/bitnami/${DB_FLAVOR}/sbin" + +# Load MySQL Library +# 'libmariadbgalera.sh' is just a wrapper of 'libmysqlgalera.sh' +. /libmysqlgalera.sh diff --git a/bitnami/mariadb-galera/10.2/ol-7/rootfs/libmysqlgalera.sh b/bitnami/mariadb-galera/10.2/ol-7/rootfs/libmysqlgalera.sh new file mode 100644 index 000000000000..c5ae946c1d9c --- /dev/null +++ b/bitnami/mariadb-galera/10.2/ol-7/rootfs/libmysqlgalera.sh @@ -0,0 +1,861 @@ +#!/bin/bash +# +# Bitnami MySQL library + +# shellcheck disable=SC1090 +# shellcheck disable=SC1091 + +# Load Generic Libraries +. /libfile.sh +. /liblog.sh +. /libservice.sh +. /libvalidations.sh +. /libversion.sh + +# Functions + +######################## +# Extract mysql version from version string +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# Version string +######################### +mysql_get_version() { + local ver_string + local -a ver_split + + ver_string=$("${DB_BINDIR}/mysql" "--version") + ver_split=(${ver_string// / }) + + if [[ "$ver_string" == *" Distrib "* ]]; then + echo "${ver_split[4]::-1}" + else + echo "${ver_split[2]}" + fi +} + +######################## +# Gets an environment variable name based on the suffix +# Globals: +# DB_FLAVOR +# Arguments: +# $1 - environment variable suffix +# Returns: +# environment variable name +######################### +get_env_var() { + local id="${1:?id is required}" + echo "${DB_FLAVOR^^}_${id}" +} + +######################## +# Gets an environment variable value based on the suffix +# Arguments: +# $1 - environment variable suffix +# Returns: +# environment variable value +######################### +get_env_var_value() { + local envVar + envVar="$(get_env_var "$1")" + echo "${!envVar:-}" +} + +######################## +# Execute an arbitrary query/queries against the running MySQL/MariaDB service +# Stdin: +# Query/queries to execute +# Globals: +# BITNAMI_DEBUG +# DB_* +# Arguments: +# $1 - Database where to run the queries +# $2 - User to run queries +# $3 - Password +# Returns: +# None +mysql_execute() { + local db="${1:-}" + local user="${2:-root}" + local pass="${3:-}" + + local args=("--defaults-file=$DB_CONFDIR/my.cnf" "-N" "-u" "$user" "$db") + [[ -n "$pass" ]] && args+=("-p$pass") + if [[ "${BITNAMI_DEBUG:-false}" = true ]]; then + "$DB_BINDIR/mysql" "${args[@]}" + else + "$DB_BINDIR/mysql" "${args[@]}" >/dev/null 2>&1 + fi +} + +######################## +# Execute an arbitrary query/queries against a remote MySQL/MariaDB service +# Stdin: +# Query/queries to execute +# Globals: +# BITNAMI_DEBUG +# DB_* +# Arguments: +# $1 - Database where to run the queries +# $2 - Remote MySQL/MariaDB service hostname +# $3 - Remote MySQL/MariaDB service port +# $4 - User to run queries +# $5 - Password +# Returns: +# None +mysql_remote_execute() { + local db="${1:-}" + local hostname="${2:?hostname is required}" + local port="${3:?port is required}" + local user="${4:?user is required}" + local pass="${5:-}" + + local args=("-N" "-h" "$hostname" "-P" "$port" "-u" "$user" "--connect-timeout=5" "$db") + [[ -n "$pass" ]] && args+=("-p$pass") + if [[ "${BITNAMI_DEBUG:-false}" = true ]]; then + "$DB_BINDIR/mysql" "${args[@]}" + else + "$DB_BINDIR/mysql" "${args[@]}" >/dev/null 2>&1 + fi +} + +######################## +# Checks if MySQL/MariaDB is running +# Globals: +# DB_TMPDIR +# Arguments: +# None +# Returns: +# Boolean +######################### +is_mysql_running() { + local pid + pid="$(get_pid_from_file "$DB_TMPDIR/mysqld.pid")" + + if [[ -z "$pid" ]]; then + false + else + is_service_running "$pid" + fi +} + +######################## +# Starts MySQL/MariaDB in the background and waits until it's ready +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# None +######################### +mysql_start_bg() { + local flags=("--defaults-file=${DB_BASEDIR}/conf/my.cnf" "--basedir=${DB_BASEDIR}" "--datadir=${DB_DATADIR}" "--socket=$DB_TMPDIR/mysql.sock" "--port=$DB_PORT_NUMBER") + [[ -z "${DB_EXTRA_FLAGS:-}" ]] || flags=("${flags[@]}" "${DB_EXTRA_FLAGS[@]}") + [[ -z "${DB_FORCE_UPGRADE:-}" ]] || flags=("${flags[@]}" "--upgrade=FORCE") + am_i_root && flags=("${flags[@]}" "--user=$DB_DAEMON_USER") + + debug "Starting $DB_FLAVOR in background..." + + is_mysql_running && return + + if [[ "${BITNAMI_DEBUG:-false}" = true ]]; then + "${DB_SBINDIR}/mysqld" "${flags[@]}" & + else + "${DB_SBINDIR}/mysqld" "${flags[@]}" >/dev/null 2>&1 & + fi + + # wait until the server is up and answering queries. + local args=(mysql root) + is_boolean_yes "${ROOT_AUTH_ENABLED:-false}" && args+=("$DB_ROOT_PASSWORD") + while ! echo "select 1" | mysql_execute "${args[@]}"; do + sleep 1 + done +} + + +######################## +# Stop MySQL/Mariadb +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# None +######################### +mysql_stop() { + info "Stopping $DB_FLAVOR..." + stop_service_using_pid "$DB_TMPDIR/mysqld.pid" +} + +######################## +# Configure database extra start flags +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# Array with extra flags to use +######################### +mysql_extra_flags() { + local dbExtraFlags + read -r -a dbExtraFlags <<< "$(get_env_var_value EXTRA_FLAGS)" + dbExtraFlags+=("--wsrep_cluster_name=$DB_GALERA_CLUSTER_NAME" "--wsrep_node_name=$(hostname)" "--wsrep_node_address=$(hostname -i)" "--wsrep_cluster_address=$DB_GALERA_CLUSTER_ADDRESS" "--wsrep_sst_method=mariabackup" "--wsrep_sst_auth=$DB_GALERA_MARIABACKUP_USER:$DB_GALERA_MARIABACKUP_PASSWORD") + echo "${dbExtraFlags[@]}" +} + +get_galera_cluster_bootstrap_value() { + local clusterBootstrap + clusterBootstrap="$(get_env_var_value GALERA_CLUSTER_BOOTSTRAP)" + if ! is_boolean_yes "${clusterBootstrap}"; then + local clusterAddress + clusterAddress="$(get_env_var_value GALERA_CLUSTER_ADDRESS)" + if [[ -z "$clusterAddress" ]]; then + clusterBootstrap="yes" + elif [[ -n "$clusterAddress" ]]; then + local host=${clusterAddress#*://} + local host=${host%:*} + if ! resolveip -s "$host" >/dev/null 2>&1; then + clusterBootstrap="yes" + fi + fi + fi + echo "${clusterBootstrap}" +} + +get_galera_cluster_address_value() { + local clusterBootstrap + local clusterAddress + clusterBootstrap="$(get_galera_cluster_bootstrap_value)" + if is_boolean_yes "${clusterBootstrap}"; then + clusterAddress="gcomm://" + else + clusterAddress="$(get_env_var_value GALERA_CLUSTER_ADDRESS)" + fi + echo "${clusterAddress}" +} + +######################## +# Loads global variables used on MySQL/MariaDB configuration. +# Globals: +# DB_FLAVOR +# DB_SBINDIR +# MYSQL_*/MARIADB_* +# Arguments: +# None +# Returns: +# Series of exports to be used as 'eval' arguments +######################### +mysql_env() { + cat <<"EOF" +export ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD:-no} +export DB_FLAVOR="${DB_FLAVOR:-"mysql"}" +export DB_VOLUMEDIR="/bitnami/$DB_FLAVOR" +export DB_DATADIR="$DB_VOLUMEDIR/data" +export DB_BASEDIR="/opt/bitnami/$DB_FLAVOR" +export DB_CONFDIR="$DB_BASEDIR/conf" +export DB_LOGDIR="$DB_BASEDIR/logs" +export DB_TMPDIR="$DB_BASEDIR/tmp" +export DB_BINDIR="$DB_BASEDIR/bin" +export DB_SBINDIR="${DB_SBINDIR:-$DB_BASEDIR/bin}" +export PATH="$DB_BINDIR:$PATH" +export DB_DAEMON_USER="mysql" +export DB_DAEMON_GROUP="mysql" +PORT_NUMBER="$(get_env_var_value PORT_NUMBER)" +export DB_PORT_NUMBER="${PORT_NUMBER:-3306}" +export DB_DATABASE="$(get_env_var_value DATABASE)" +export DB_USER="$(get_env_var_value USER)" +export DB_PASSWORD="$(get_env_var_value PASSWORD)" +ROOT_USER="$(get_env_var_value ROOT_USER)" +export DB_ROOT_USER="${ROOT_USER:-root}" +export DB_ROOT_PASSWORD="$(get_env_var_value ROOT_PASSWORD)" +export DB_GALERA_CLUSTER_BOOTSTRAP="$(get_galera_cluster_bootstrap_value)" +export DB_GALERA_CLUSTER_ADDRESS="$(get_galera_cluster_address_value)" +DB_GALERA_CLUSTER_NAME="$(get_env_var_value GALERA_CLUSTER_NAME)" +export DB_GALERA_CLUSTER_NAME="${DB_GALERA_CLUSTER_NAME:-galera}" +export DB_GALERA_MARIABACKUP_USER="$(get_env_var_value GALERA_MARIABACKUP_USER)" +export DB_GALERA_MARIABACKUP_USER="${DB_GALERA_MARIABACKUP_USER:-mariabackup}" +export DB_GALERA_MARIABACKUP_PASSWORD="$(get_env_var_value GALERA_MARIABACKUP_PASSWORD)" +export DB_LDAP_URI="$(get_env_var_value LDAP_URI)" +export DB_LDAP_BASE="$(get_env_var_value LDAP_BASE)" +export DB_LDAP_BIND_DN="$(get_env_var_value LDAP_BIND_DN)" +export DB_LDAP_BIND_PASSWORD="$(get_env_var_value LDAP_BIND_PASSWORD)" +export DB_LDAP_BASE_LOOKUP="$(get_env_var_value LDAP_BASE_LOOKUP)" +read -r -a DB_EXTRA_FLAGS <<< "$(mysql_extra_flags)" +export DB_EXTRA_FLAGS +EOF +} + +######################## +# Validate settings in MYSQL_*/MARIADB_* environment variables +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# None +######################### +mysql_validate() { + info "Validating settings in MYSQL_*/MARIADB_* env vars.." + + # Auxiliary functions + empty_password_enabled_warn() { + warn "You set the environment variable ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD}. For safety reasons, do not use this flag in a production environment." + } + empty_password_error() { + error "The $1 environment variable is empty or not set. Set the environment variable ALLOW_EMPTY_PASSWORD=yes to allow the container to be started with blank passwords. This is recommended only for development." + exit 1 + } + + if is_boolean_yes "$ALLOW_EMPTY_PASSWORD"; then + empty_password_enabled_warn + else + if [[ -n "$DB_GALERA_MARIABACKUP_USER" ]] && [[ -z "$DB_GALERA_MARIABACKUP_PASSWORD" ]]; then + empty_password_error "$(get_env_var GALERA_MARIABACKUP_PASSWORD)" + fi + + if is_boolean_yes "$DB_GALERA_CLUSTER_BOOTSTRAP"; then + if [[ -z "$DB_ROOT_PASSWORD" ]]; then + empty_password_error "$(get_env_var ROOT_PASSWORD)" + fi + if (( ${#DB_ROOT_PASSWORD} > 32 )); then + error "The password can not be longer than 32 characters. Set the environment variable $1 with a shorter value" + exit 1 + fi + if [[ -n "$DB_USER" ]] && [[ -z "$DB_PASSWORD" ]]; then + empty_password_error "$(get_env_var PASSWORD)" + fi + fi + fi + + if [[ -z "$DB_GALERA_CLUSTER_NAME" ]]; then + error "Galera cluster cannot be created without setting the environment variable $(get_env_var GALERA_CLUSTER_NAME)." + exit 1 + fi + + if ! is_boolean_yes "$DB_GALERA_CLUSTER_BOOTSTRAP" && [[ -z "$DB_GALERA_CLUSTER_ADDRESS" ]]; then + error "Galera cluster cannot be created without setting the environment variable $(get_env_var GALERA_CLUSTER_ADDRESS). If you are bootstrapping a new Galera cluster, set the environment variable MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes." + exit 1 + fi +} + +######################## +# Creates MySQL/MariaDB configuration file +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# None +######################### +mysql_create_config() { + debug "Creating main configuration file..." + cat > "$DB_CONFDIR/my.cnf" </dev/null 2>&1 + fi +} + +######################## +# Migrate old custom configuration files +# Globals: +# DB_* +# Arguments: +# None +# Returns: +# None +######################### +migrate_old_configuration() { + local old_custom_conf_file="$DB_VOLUMEDIR/conf/my_custom.cnf" + local custom_conf_file="$DB_CONFDIR/bitnami/my_custom.cnf" + debug "Persisted configuration detected. Migrating any existing 'my_custom.cnf' file to new location..." + warn "Custom configuration files won't be persisted any longer!" + if [[ -f "$old_custom_conf_file" ]]; then + info "Adding old custom configuration to user configuration" + echo "" >> "$custom_conf_file" + cat "$old_custom_conf_file" >> "$custom_conf_file" + fi + if am_i_root; then + [[ -e "$DB_VOLUMEDIR/.initialized" ]] && rm "$DB_VOLUMEDIR/.initialized" + rm -rf "$DB_VOLUMEDIR/conf" + else + warn "Old custom configuration migrated, please manually remove the 'conf' directory from the volume use to persist data" + fi +} + +######################## +# Upgrade Database Schema +# Globals: +# BITNAMI_DEBUG +# DB_* +# Arguments: +# None +# Returns: +# None +######################### +mysql_upgrade() { + local args=("--defaults-file=${DB_CONFDIR}/my.cnf" "-u" "$DB_ROOT_USER") + local major_version + + major_version=$(get_sematic_version "$(mysql_get_version)" 1) + + debug "Running mysql_upgrade..." + + if [[ "$DB_FLAVOR" = "mysql" ]] && [[ "$major_version" = "8" ]]; then + mysql_stop + export DB_FORCE_UPGRADE=true + mysql_start_bg + unset DB_FORCE_UPGRADE + else + if is_boolean_yes "${ROOT_AUTH_ENABLED:-false}"; then + args+=("-p$DB_ROOT_PASSWORD") + fi + if [[ "${BITNAMI_DEBUG:-false}" = true ]]; then + "${DB_BINDIR}/mysql_upgrade" "${args[@]}" + else + "${DB_BINDIR}/mysql_upgrade" "${args[@]}" >/dev/null 2>&1 + fi + fi +} + +######################## +# Ensure a db user exists with the given password for the '%' host +# Globals: +# DB_* +# Arguments: +# $1 - db user +# $2 - password +# Returns: +# None +######################### +mysql_ensure_user_exists() { + local user="${1:?user is required}" + local password="${2:-}" + local hosts + + debug "creating db user \'$user\'..." + mysql_execute "mysql" "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" < "$DB_CONFDIR/bitnami/my_custom.cnf" + fi + + # Persisted configuration files from old versions + ! is_dir_empty "$DB_VOLUMEDIR" && [[ -d "$DB_VOLUMEDIR/conf" ]] && migrate_old_configuration + + debug "Ensuring expected directories/files exist..." + for dir in "$DB_DATADIR" "$DB_TMPDIR" "$DB_LOGDIR"; do + ensure_dir_exists "$dir" + am_i_root && chown "$DB_DAEMON_USER:$DB_DAEMON_GROUP" "$dir" + done + [[ ! -e "$DB_CONFDIR/my.cnf" ]] && mysql_create_config + + if [[ -e "$DB_DATADIR/mysql" ]]; then + info "Persisted data detected. Restoring..." + return + else + # initialization should not be performed on non-primary nodes of a galera cluster + if is_boolean_yes "$DB_GALERA_CLUSTER_BOOTSTRAP"; then + debug "Cleaning data directory to ensure successfully initialization..." + rm -rf "${DB_DATADIR:?}"/* + mysql_install_db + mysql_start_bg + debug "Deleting all users to avoid issues with galera configuration..." + mysql_execute "mysql" <'mysql.sys'; +EOF + + mysql_ensure_root_user_exists "$DB_ROOT_USER" "$DB_ROOT_PASSWORD" + mysql_ensure_user_not_exists "" # ensure unknown user does not exist + mysql_ensure_optional_database_exists "$DB_DATABASE" "$DB_USER" "$DB_PASSWORD" + mysql_ensure_galera_mariabackup_user_exists "$DB_GALERA_MARIABACKUP_USER" "$DB_GALERA_MARIABACKUP_PASSWORD" + mysql_ensure_replication_user_exists "monitor" "monitor" + + if [[ "$DB_FLAVOR" = "mysql" ]]; then + mysql_upgrade + else + local args=(mysql) + args+=("$DB_ROOT_USER" "$DB_ROOT_PASSWORD") + debug "Flushing privileges..." + mysql_execute "${args[@]}" <>"/etc/nslcd.conf"<>"/etc/nslcd.conf"<>"${openldap_conf}"<