Back (Current repo: terraform-mariadb-replica-homelab)

A terraform homelab with mariadb and maxscale for my own understanding and learning.
To clone this repository:
git clone https://git.viktor1993.net/terraform-mariadb-replica-homelab.git
Log | Download | Files | Refs | README

entrypoint.sh (2186B)


#!/bin/bash

MARIADB_PORT=${MARIADB_PORT:-3311}
MARIADB_SERVER_ID=${MARIADB_SERVER_ID:-4}
DATADIR="/var/lib/mysql"
RUNDIR="/run/mysqld"
LOCK_FILE=/var/lib/mysql/setup.lock

if ! [ -f "$LOCK_FILE" ]; then
#Don't do all this in case of an accidental docker restart
    sed -E -i "s/(server-id=)[0-9]+/\1${MARIADB_SERVER_ID}/" /docker-entrypoint-initdb.d/my.cnf
    cat /docker-entrypoint-initdb.d/my.cnf > /etc/mysql/my.cnf
    echo "lock" > $LOCK_FILE

    mkdir -p "$RUNDIR"
    chown -R mysql:mysql "$RUNDIR"
    chown -R mysql:mysql "$DATADIR"

    if [ ! -d "${DATADIR}/mysql" ]; then
        echo "Initializing MariaDB data directory..."
        mariadb-install-db --user=mysql --datadir="$DATADIR" >/dev/null
    fi

    #Initialize DB here for importing SQL files, don't allow connections
    echo "Starting temporary MariaDB (no networking) for init..."
    mariadbd --user=mysql --datadir="$DATADIR" --skip-networking --socket=/tmp/mysqld.sock &
    pid="$!"

    #Wait until mariadb server finished initializing before trying to import anything
    for i in {1..60}; do
        if mariadb-admin --protocol=socket --socket=/tmp/mysqld.sock ping >/dev/null 2>&1; then
          break
        fi
        sleep 0.5
    done

    echo "Running init scripts in /docker-entrypoint-initdb.d ..."
    shopt -s nullglob
    for f in /docker-entrypoint-initdb.d/*; do
        case "$f" in
            *.sql)
                echo "    -> importing $f"
                mariadb --protocol=socket --socket=/tmp/mysqld.sock < "$f"
            ;;
            *.sql.gz)
                echo "    -> importing $f"
                gunzip -c "$f" | mariadb --protocol=socket --socket=/tmp/mysqld.sock
            ;;
            *.sh)
                echo "    -> running $f"
                bash "$f"
            ;;
            *)
                echo "    -> ignoring $f"
            ;;
        esac
    done

    echo "Shutting down temporary MariaDB..."
    mariadb-admin --protocol=socket --socket=/tmp/mysqld.sock shutdown
    wait "$pid" || true

fi

echo "Starting MariaDB on port ${MARIADB_PORT}..."
exec "$@" --user=mysql --datadir="$DATADIR" --bind-address=0.0.0.0 --port="$MARIADB_PORT"