diff --git a/Dockerfile b/Dockerfile index 13ed09b..e532190 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,10 @@ FROM mariadb:10.3 -COPY mariadb/init.sh /docker-entrypoint-initdb.d/ +COPY mariadb/init.sh /usr/local/bin/ COPY mariadb/entrypoint.sh /usr/local/bin/master-slave-entrypoint.sh +RUN mkdir -p /status + ENTRYPOINT ["master-slave-entrypoint.sh"] CMD ["mysqld"] diff --git a/README.md b/README.md index 6b2802e..0138211 100644 --- a/README.md +++ b/README.md @@ -135,4 +135,4 @@ This project is maintained by using the [Semantic Versioning Specification (SemV ## Copyright and license -Copyright 2017 [Caffeina](http://caffeina.com) srl under the [MIT license](LICENSE.md). \ No newline at end of file +Copyright 2017 [Caffeina](http://caffeina.com) srl under the [MIT license](LICENSE.md). diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index 2f65fcb..0000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: '3' - -services: - db-master: - build: . - restart: on-failure - - db-slave: - build: . - restart: on-failure \ No newline at end of file diff --git a/mariadb/entrypoint.sh b/mariadb/entrypoint.sh index f759242..e4f1cae 100755 --- a/mariadb/entrypoint.sh +++ b/mariadb/entrypoint.sh @@ -129,4 +129,11 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi fi -docker-entrypoint.sh $@ \ No newline at end of file +# Check if init.sh has been added and add status folder +if [ ! -e "/docker-entrypoint-initdb.d/init.sh" ]; then + cp -f /usr/local/bin/init.sh /docker-entrypoint-initdb.d + chown mysql:mysql /status + chown mysql:mysql /docker-entrypoint-initdb.d/* +fi + +docker-entrypoint.sh $@ diff --git a/mariadb/init.sh b/mariadb/init.sh index 28ae16b..e54df97 100755 --- a/mariadb/init.sh +++ b/mariadb/init.sh @@ -53,6 +53,11 @@ if [ ! -z "$MYSQL_MASTER_HOST" ]; then master_mysqldump+=( "$MYSQL_DATABASE" ) fi + until [ -e /status/.done ]; do + echo 'Waiting for master to finish tasks..' + sleep 5 + done + for i in {30..0}; do if echo 'SELECT 1' | "${master_mysql[@]}" &> /dev/null; then echo 'MySQL master init process is complete...' @@ -62,7 +67,7 @@ if [ ! -z "$MYSQL_MASTER_HOST" ]; then sleep 1 done - if [ ! -z "$MYSQL_GRANT_SLAVE_USER" -a ! -z "$MYSQL_GRANT_SLAVE_PASSWORD" ]; then + if [ -z "$MYSQL_GRANT_SLAVE_USER" ] || [ -z "$MYSQL_GRANT_SLAVE_PASSWORD" ]; then export MYSQL_GRANT_SLAVE_USER="$(pwgen -1 16)" echo "GENERATED SLAVE USER: $MYSQL_GRANT_SLAVE_USER" @@ -73,20 +78,29 @@ if [ ! -z "$MYSQL_MASTER_HOST" ]; then "${master_mysql[@]}" <<-EOSQL GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_GRANT_SLAVE_USER'@'%' IDENTIFIED BY '$MYSQL_GRANT_SLAVE_PASSWORD'; FLUSH PRIVILEGES; - EOSQL +EOSQL fi + + # If the user sets these then just run the SQL grant for replicaton user + if [ ! -z "$MYSQL_GRANT_SLAVE_USER" ] || [ ! -z "$MYSQL_GRANT_SLAVE_PASSWORD" ]; then + + "${master_mysql[@]}" <<-EOSQL + GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_GRANT_SLAVE_USER'@'%' IDENTIFIED BY '$MYSQL_GRANT_SLAVE_PASSWORD'; + FLUSH PRIVILEGES; +EOSQL + fi "${master_mysql[@]}" <<-EOSQL > $MYSQL_STATUS 2>&1 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; - EOSQL +EOSQL "${master_mysqldump[@]}" > $MYSQL_EXPORT 2>&1 "${master_mysql[@]}" <<-EOSQL UNLOCK TABLES; - EOSQL +EOSQL ## SLAVE @@ -120,7 +134,7 @@ if [ ! -z "$MYSQL_MASTER_HOST" ]; then MASTER_CONNECT_RETRY=$MYSQL_MASTER_CONNECT_RETRY; START SLAVE; SHOW SLAVE STATUS\G - EOSQL +EOSQL if [ -e "$MYSQL_STATUS" ]; then rm -f $MYSQL_STATUS @@ -151,9 +165,11 @@ else "${master_mysql[@]}" <<-EOSQL SHOW MASTER STATUS\G - EOSQL +EOSQL echo echo 'MySQL master process done. Ready for replication.' echo + echo 'Setting /status/.done for slave to start..' + touch /status/.done 2>&1 fi