yobasystems / alpine-mariadb

MariaDB running on Alpine Linux [Docker]
https://hub.docker.com/r/yobasystems/alpine-mariadb/
242 stars 72 forks source link

allow execution of scripts after mysql is up #6

Closed DirectorX closed 6 years ago

DirectorX commented 6 years ago

something like /scripts/post-init.d/*sh

dominictayloruk commented 6 years ago

Have a look in the run script, it might be what you are asking.

# execute any pre-init scripts
for i in /scripts/pre-init.d/*sh
do
    if [ -e "${i}" ]; then
        echo "[i] pre-init.d - processing $i"
        . "${i}"
    fi
done
DirectorX commented 6 years ago

This is not what I meant, the pre-{init,exec} is useful when you don't need to perform something that needs mariadb up and running.

  1. Feb 2018 20:01 by notifications@github.com:

Closed > #6> .

— You are receiving this because you authored the thread. Reply to this email directly, > view it on GitHub> , or > mute the thread> .

dominictayloruk commented 6 years ago

OK, i'll have to take a closer look when time permits.

DirectorX commented 6 years ago

Thanks

  1. Feb 2018 20:12 by notifications@github.com:

OK, i'll have to take a closer look when time permits.

— You are receiving this because you authored the thread. Reply to this email directly, > view it on GitHub> , or > mute the thread> .

dominictayloruk commented 6 years ago

It was there all along

# execute any pre-exec scripts
for i in /scripts/pre-exec.d/*sh
do
    if [ -e "${i}" ]; then
        echo "[i] pre-exec.d - processing $i"
        . ${i}
    fi
done
DirectorX commented 6 years ago

This script handles pre-exec custom scripts, I'm requesting post-exec scripts handling.

dominictayloruk commented 6 years ago

Well copy and ammended the above script and rename all values of pre-exec to post-exec, and then paste that after the last line in the run file and that should execute scripts after everything's fired up.

dominictayloruk commented 6 years ago
#!/bin/sh
# execute any pre-init scripts
for i in /scripts/pre-init.d/*sh
do
    if [ -e "${i}" ]; then
        echo "[i] pre-init.d - processing $i"
        . "${i}"
    fi
done

echo "!includedir /etc/mysql/conf.d/" >>/etc/mysql/my.cnf \

if [ -d "/run/mysqld" ]; then
    echo "[i] mysqld already present, skipping creation"
    chown -R mysql:mysql /run/mysqld
else
    echo "[i] mysqld not found, creating...."
    mkdir -p /run/mysqld
    chown -R mysql:mysql /run/mysqld
fi

if [ -d /var/lib/mysql/mysql ]; then
    echo "[i] MySQL directory already present, skipping creation"
    chown -R mysql:mysql /var/lib/mysql
else
    echo "[i] MySQL data directory not found, creating initial DBs"

    chown -R mysql:mysql /var/lib/mysql

    mysql_install_db --user=mysql > /dev/null

    if [ "$MYSQL_ROOT_PASSWORD" = "" ]; then
        MYSQL_ROOT_PASSWORD=`pwgen 16 1`
        echo "[i] MySQL root Password: $MYSQL_ROOT_PASSWORD"
    fi

    MYSQL_DATABASE=${MYSQL_DATABASE:-""}
    MYSQL_USER=${MYSQL_USER:-""}
    MYSQL_PASSWORD=${MYSQL_PASSWORD:-""}

    tfile=`mktemp`
    if [ ! -f "$tfile" ]; then
        return 1
    fi

    cat << EOF > $tfile
USE mysql;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by '$MYSQL_ROOT_PASSWORD' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' identified by '$MYSQL_ROOT_PASSWORD' WITH GRANT OPTION;
UPDATE user SET password=PASSWORD("") WHERE user='root' AND host='localhost';
DROP DATABASE test;
EOF

    if [ "$MYSQL_DATABASE" != "" ]; then
        echo "[i] Creating database: $MYSQL_DATABASE"
        echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` CHARACTER SET utf8 COLLATE utf8_general_ci;" >> $tfile

        if [ "$MYSQL_USER" != "" ]; then
        echo "[i] Creating user: $MYSQL_USER with password $MYSQL_PASSWORD"
        echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* to '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD';" >> $tfile
        fi
    fi

    /usr/bin/mysqld --user=mysql --bootstrap --verbose=0 < $tfile
    rm -f $tfile
fi

# execute any pre-exec scripts
for i in /scripts/pre-exec.d/*sh
do
    if [ -e "${i}" ]; then
        echo "[i] pre-exec.d - processing $i"
        . ${i}
    fi
done

exec /usr/bin/mysqld --user=mysql --console

# execute any post-exec scripts
for i in /scripts/post-exec.d/*sh
do
    if [ -e "${i}" ]; then
        echo "[i] post-exec.d - processing $i"
        . ${i}
    fi
done