#!/bin/bash export TERM=xterm function display_container_header { echo "+=====================================================" echo "| Container : $HOSTNAME" echo "| OS : $(</etc/redhat-release)" echo "| kubernetes : $KUBERNETES_SERVICE_HOST" echo "| user : $(whoami)" echo "| home : $HOME" echo "+=====================================================" } function start_service { echo "+=====================================================" echo "| Container $HOSTNAME is now RUNNING" echo "+=====================================================" while true do echo /usr/bin/peer-finder -on-start="${CONTAINER_SCRIPTS_PATH}/galera/configure-galera.sh" -service=${K8S_SVC_NAME} echo ${MYSQL_PREFIX}/libexec/mysqld --defaults-file=$MYSQL_DEFAULTS_FILE $mysql_extra_opts "$@" echo "live... (next try in 1 hour)" & sleep 3600 done } if [ -v POD_NAMESPACE ]; then cp "${CONTAINER_SCRIPTS_PATH}/galera/cluster.cnf" /etc/my.cnf.d/ # Is running in Kubernetes/OpenShift, so find all other pods # belonging to the namespace echo "Galera: Skip finding peers to prevent failures due to failed cluster" [ -v MYSQL_GALERA_CLUSTER ] || MYSQL_GALERA_CLUSTER="$(hostname -f | cut -d'.' -f2)" K8S_SVC_NAME=${MYSQL_GALERA_CLUSTER} echo "Using service name: ${K8S_SVC_NAME}" echo /usr/bin/peer-finder -on-start="${CONTAINER_SCRIPTS_PATH}/galera/configure-galera.sh" -service=${K8S_SVC_NAME} else echo "POD_NAMESPACE not set, spin up single node" fi export_vars=$(cgroup-limits); export $export_vars source ${CONTAINER_SCRIPTS_PATH}/galera-common.sh set -eu if [[ -v DEBUG_IGNORE_SCRIPT_FAILURES ]]; then set +e fi export_setting_variables log_volume_info $MYSQL_DATADIR # pre-init files process_extending_files ${APP_DATA}/mysql-pre-init/ ${CONTAINER_SCRIPTS_PATH}/pre-init/ mysql_extra_opts="" if [ ! -d "$MYSQL_DATADIR/mysql" -a ! -d "$MYSQL_DATADIR/.sst" ]; then initialize_galera_database "$@" # galera files process_extending_files ${APP_DATA}/mysql-galera-init/ ${CONTAINER_SCRIPTS_PATH}/galera-init/ # init files process_extending_files ${APP_DATA}/mysql-init/ ${CONTAINER_SCRIPTS_PATH}/init/ # Restart the MySQL server with public IP bindings shutdown_local_mysql else no_cluster=$(grep -P "gcomm://$" | cat) if [ -n "$no_cluster" ]; then echo "No cluster configured, recovering from failure..." sed -i'' -e 's/safe_to_bootstrap:.*/safe_to_bootstrap: 1/' $MYSQL_DATADIR/grastate.dat mysql_extra_opts="--wsrep-new-cluster" fi # galera files process_extending_files ${APP_DATA}/mysql-galera-init/ ${CONTAINER_SCRIPTS_PATH}/galera-init/ # I guess we can't do that once cluster is existing... # start_local_mysql --wsrep-on=OFF --wsrep-provider=none "$@" fi unset_env_vars log_volume_info $MYSQL_DATADIR log_info 'Running final exec -- Only MySQL server logs after this point' echo ${MYSQL_PREFIX}/libexec/mysqld --defaults-file=$MYSQL_DEFAULTS_FILE $mysql_extra_opts "$@" display_container_header start_service