101 lines
3.2 KiB
Bash
101 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -eo pipefail
|
|
|
|
source "$(which docker-entrypoint.sh)"
|
|
|
|
docker_mariadb_upgrade_including_user_tables() {
|
|
if [ -z "$MARIADB_AUTO_UPGRADE" ] \
|
|
|| [ "$MARIADB_AUTO_UPGRADE" = 0 ]; then
|
|
mysql_note "MariaDB upgrade (mariadb-upgrade or creating healthcheck users) required, but skipped due to \$MARIADB_AUTO_UPGRADE setting"
|
|
return
|
|
fi
|
|
mysql_note "Starting temporary server"
|
|
docker_temp_server_start "$@" --skip-grant-tables \
|
|
--loose-innodb_buffer_pool_dump_at_shutdown=0
|
|
mysql_note "Temporary server started."
|
|
|
|
docker_mariadb_backup_system
|
|
|
|
if [ ! -f "$DATADIR"/.my-healthcheck.cnf ]; then
|
|
mysql_note "Creating healthcheck users"
|
|
local createHealthCheckUsers
|
|
createHealthCheckUsers=$(create_healthcheck_users)
|
|
docker_process_sql --dont-use-mysql-root-password --binary-mode <<-EOSQL
|
|
-- Healthcheck users shouldn't be replicated
|
|
SET @@SESSION.SQL_LOG_BIN=0;
|
|
-- we need the SQL_MODE NO_BACKSLASH_ESCAPES mode to be clear for the password to be set
|
|
SET @@SESSION.SQL_MODE=REPLACE(@@SESSION.SQL_MODE, 'NO_BACKSLASH_ESCAPES', '');
|
|
FLUSH PRIVILEGES;
|
|
$createHealthCheckUsers
|
|
EOSQL
|
|
mysql_note "Stopping temporary server"
|
|
docker_temp_server_stop
|
|
mysql_note "Temporary server stopped"
|
|
|
|
if _check_if_upgrade_is_needed; then
|
|
# need a restart as FLUSH PRIVILEGES isn't reversable
|
|
mysql_note "Restarting temporary server for upgrade"
|
|
docker_temp_server_start "$@" --skip-grant-tables \
|
|
--loose-innodb_buffer_pool_dump_at_shutdown=0
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
mysql_note "Starting mariadb-upgrade"
|
|
mariadb-upgrade
|
|
mysql_note "Finished mariadb-upgrade"
|
|
|
|
mysql_note "Stopping temporary server"
|
|
docker_temp_server_stop
|
|
mysql_note "Temporary server stopped"
|
|
}
|
|
|
|
mysql_note "Custom entrypoint script for MariaDB Server ${MARIADB_VERSION} started."
|
|
|
|
mysql_check_config "$@"
|
|
# Load various environment variables
|
|
docker_setup_env "$@"
|
|
docker_create_db_directories
|
|
|
|
# If container is started as root user, restart as dedicated mysql user
|
|
if [ "$(id -u)" = "0" ]; then
|
|
mysql_note "Switching to dedicated user 'mysql'"
|
|
exec gosu mysql "${BASH_SOURCE[0]}" "$@"
|
|
fi
|
|
|
|
# there's no database, so it needs to be initialized
|
|
if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
|
|
docker_verify_minimum_env
|
|
|
|
docker_mariadb_init "$@"
|
|
# run always-run hooks if they exist
|
|
elif test -n "$(shopt -s nullglob; echo /always-initdb.d/*)"; then
|
|
# MDEV-27636 mariadb_upgrade --check-if-upgrade-is-needed cannot be run offline
|
|
#if mariadb-upgrade --check-if-upgrade-is-needed; then
|
|
if _check_if_upgrade_is_needed; then
|
|
docker_mariadb_upgrade_including_user_tables "$@"
|
|
fi
|
|
|
|
mysql_note "Starting temporary server"
|
|
docker_temp_server_start "$@"
|
|
mysql_note "Temporary server started."
|
|
|
|
docker_process_init_files /always-initdb.d/*
|
|
|
|
mysql_note "Stopping temporary server"
|
|
docker_temp_server_stop
|
|
mysql_note "Temporary server stopped"
|
|
|
|
echo
|
|
mysql_note "MariaDB init process done. Ready for start up."
|
|
echo
|
|
# MDEV-27636 mariadb_upgrade --check-if-upgrade-is-needed cannot be run offline
|
|
#elif mariadb-upgrade --check-if-upgrade-is-needed; then
|
|
elif _check_if_upgrade_is_needed; then
|
|
docker_mariadb_upgrade_including_user_tables "$@"
|
|
fi
|
|
|
|
exec "$@"
|