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"