summaryrefslogtreecommitdiffstats
path: root/mysql/root-galera/usr/bin/run-mysqld-manager
blob: 91f3c9c74ae61978ab6ae38e68b5ec3dd0b7c248 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/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