#!/bin/bash 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: Finding peers" [ -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}" /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://$" ${MYSQL_DEFAULTS_FILE}.d/cluster.cnf | cat) if [ -n "$no_cluster" ]; then log_info "Configuration: $MYSQL_DEFAULTS_FILE" log_info "No cluster is configured yet, trying to recover from failure..." log_info "Allowing recovery in $MYSQL_DATADIR/grastate.dat" # This seems a bad idea. If another pod is marked safe to bootstrap we may end up in conflict, I guess.... # Keep it manual for now # sed -i'' 's/safe_to_bootstrap:.*/safe_to_bootstrap: 1/' $MYSQL_DATADIR/grastate.dat # This seems unneeded # mysql_extra_opts="--wsrep-new-cluster" else log_info "Configuration: $MYSQL_DEFAULTS_FILE" log_info "Cluster is configured. Trying to join..." 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 - mysqld --defaults-file=$MYSQL_DEFAULTS_FILE $mysql_extra_opts $@" exec ${MYSQL_PREFIX}/libexec/mysqld --defaults-file=$MYSQL_DEFAULTS_FILE $mysql_extra_opts "$@" 2>&1