@@ -3,18 +3,18 @@ set -eo pipefail
33shopt -s nullglob
44
55# logging functions
6- _log () {
6+ docker_log () {
77 local type=$1 ; shift
88 printf " $( date --rfc-3339=seconds) [${type} ] [Entrypoint]: $@ \n"
99}
10- _note () {
11- _log Note " $@ "
10+ docker_note () {
11+ docker_log Note " $@ "
1212}
13- _warn () {
14- _log Warn " $@ " >&2
13+ docker_warn () {
14+ docker_log Warn " $@ " >&2
1515}
16- _error () {
17- _log ERROR " $@ " >&2
16+ docker_error () {
17+ docker_log ERROR " $@ " >&2
1818 exit 1
1919}
2020
@@ -34,16 +34,16 @@ for arg; do
3434 esac
3535done
3636
37- # usage: file_env VAR [DEFAULT]
38- # ie: file_env 'XYZ_DB_PASSWORD' 'example'
37+ # usage: docker_file_env VAR [DEFAULT]
38+ # ie: docker_file_env 'XYZ_DB_PASSWORD' 'example'
3939# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
4040# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
41- file_env () {
41+ docker_file_env () {
4242 local var=" $1 "
4343 local fileVar=" ${var} _FILE"
4444 local def=" ${2:- } "
4545 if [ " ${! var:- } " ] && [ " ${! fileVar:- } " ]; then
46- _error " Both $var and $fileVar are set (but are exclusive)"
46+ docker_error " Both $var and $fileVar are set (but are exclusive)"
4747 fi
4848 local val=" $def "
4949 if [ " ${! var:- } " ]; then
@@ -55,51 +55,51 @@ file_env() {
5555 unset " $fileVar "
5656}
5757
58- # usage: process_init_file FILENAME MYSQLCOMMAND...
59- # ie: process_init_file foo.sh mysql -uroot
58+ # usage: docker_process_init_file FILENAME MYSQLCOMMAND...
59+ # ie: docker_process_init_file foo.sh mysql -uroot
6060# (process a single initializer file, based on its extension. we define this
6161# function here, so that initializer scripts (*.sh) can use the same logic,
6262# potentially recursively, or override the logic used in subsequent calls)
63- process_init_file () {
63+ docker_process_init_file () {
6464 local f=" $1 " ; shift
6565 local mysql=( " $@ " )
6666
6767 case " $f " in
68- * .sh) _note " $0 : running $f " ; . " $f " ;;
69- * .sql) _note " $0 : running $f " ; " ${mysql[@]} " < " $f " ; echo ;;
70- * .sql.gz) _note " $0 : running $f " ; gunzip -c " $f " | " ${mysql[@]} " ; echo ;;
71- * ) _warn " $0 : ignoring $f " ;;
68+ * .sh) docker_note " $0 : running $f " ; . " $f " ;;
69+ * .sql) docker_note " $0 : running $f " ; " ${mysql[@]} " < " $f " ; echo ;;
70+ * .sql.gz) docker_note " $0 : running $f " ; gunzip -c " $f " | " ${mysql[@]} " ; echo ;;
71+ * ) docker_warn " $0 : ignoring $f " ;;
7272 esac
7373 echo
7474}
7575
76- _check_config () {
76+ docker_check_config () {
7777 toRun=( " $@ " --verbose --help )
7878 if ! errors=" $( " ${toRun[@]} " 2>&1 > /dev/null) " ; then
79- _error " mysqld failed while attempting to check config\n\tcommand was: ${toRun[*]} \n\t$errors "
79+ docker_error " mysqld failed while attempting to check config\n\tcommand was: ${toRun[*]} \n\t$errors "
8080 fi
8181}
8282
8383# Fetch value from server config
8484# We use mysqld --verbose --help instead of my_print_defaults because the
8585# latter only show values present in config files, and not server defaults
86- _get_config () {
86+ docker_get_config () {
8787 local conf=" $1 " ; shift
8888 " $@ " --verbose --help --log-bin-index=" $( mktemp -u) " 2> /dev/null \
8989 | awk ' $1 == "' " $conf " ' " && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }'
9090 # match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)"
9191}
9292
93- _start_server () {
93+ docker_start_server () {
9494 local socket=$1 ; shift
9595 result=0
9696 %%SERVERSTARTUP%%
9797 if [ ! " $result " = " 0" ]; then
98- _error " Unable to start server. Status code $result ."
98+ docker_error " Unable to start server. Status code $result ."
9999 fi
100100}
101101
102- _wait_for_server () {
102+ docker_wait_for_server () {
103103 local mysql=( " $@ " )
104104 for i in {30..0}; do
105105 if echo ' SELECT 1' | " ${mysql[@]} " & > /dev/null; then
@@ -108,67 +108,67 @@ _wait_for_server() {
108108 sleep 1
109109 done
110110 if [ " $i " = 0 ]; then
111- _error " Unable to start server."
111+ docker_error " Unable to start server."
112112 fi
113113}
114114
115- _stop_server () {
115+ docker_stop_server () {
116116 local passfile=$1
117117 local socket=$2
118118 result=0
119119 mysqladmin --defaults-extra-file=" ${passfile} " shutdown -uroot --socket=" ${socket} " || result=$?
120120 if [ ! " $result " = " 0" ]; then
121- _error " Unable to shut down server. Status code $result ."
121+ docker_error " Unable to shut down server. Status code $result ."
122122 fi
123123}
124124# allow the container to be started with `--user`
125125if [ " $1 " = ' mysqld' -a -z " $wantHelp " -a " $( id -u) " = ' 0' ]; then
126- _check_config " $@ "
127- DATADIR=" $( _get_config ' datadir' " $@ " ) "
126+ docker_check_config " $@ "
127+ DATADIR=" $( docker_get_config ' datadir' " $@ " ) "
128128 mkdir -p " $DATADIR "
129129 chown -R mysql:mysql " $DATADIR "
130130 exec gosu mysql " $BASH_SOURCE " " $@ "
131131fi
132132
133133if [ " $1 " = ' mysqld' -a -z " $wantHelp " ]; then
134134 # still need to check config, container may have started with --user
135- _check_config " $@ "
135+ docker_check_config " $@ "
136136 # Get config
137- DATADIR=" $( _get_config ' datadir' " $@ " ) "
137+ DATADIR=" $( docker_get_config ' datadir' " $@ " ) "
138138
139139 if [ ! -d " $DATADIR /mysql" ]; then
140- file_env ' MYSQL_ROOT_PASSWORD'
140+ docker_file_env ' MYSQL_ROOT_PASSWORD'
141141 if [ -z " $MYSQL_ROOT_PASSWORD " -a -z " $MYSQL_ALLOW_EMPTY_PASSWORD " -a -z " $MYSQL_RANDOM_ROOT_PASSWORD " ]; then
142- _error " Database is uninitialized and password option is not specified \n\tYou need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD"
142+ docker_error " Database is uninitialized and password option is not specified \n\tYou need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD"
143143 fi
144144
145145 mkdir -p " $DATADIR "
146146
147- _note " Initializing database"
147+ docker_note " Initializing database"
148148 %%DATABASEINIT%%
149- _note " Database initialized"
149+ docker_note " Database initialized"
150150
151151 if command -v mysql_ssl_rsa_setup > /dev/null && [ ! -e " $DATADIR /server-key.pem" ]; then
152152 # https://github.com/mysql/mysql-server/blob/23032807537d8dd8ee4ec1c4d40f0633cd4e12f9/packaging/deb-in/extra/mysql-systemd-start#L81-L84
153- _note " Initializing certificates"
153+ docker_note " Initializing certificates"
154154 mysql_ssl_rsa_setup --datadir=" $DATADIR "
155- _note " Certificates initialized"
155+ docker_note " Certificates initialized"
156156 fi
157157
158- SOCKET=" $( _get_config ' socket' " $@ " ) "
158+ SOCKET=" $( docker_get_config ' socket' " $@ " ) "
159159 # We create a file to store the root password in so we don''t use it on the command line
160160 install -d -m0700 /tmp/mysql-files
161161 PASSFILE=$( mktemp /tmp/mysql-files/XXXXXXXXXX)
162162 install /dev/null -m0600 " ${PASSFILE} "
163163
164164 mysql=( mysql --defaults-file=" ${PASSFILE} " --protocol=socket -uroot -hlocalhost --socket=" ${SOCKET} " )
165- _note " Starting server"
166- _start_server " ${SOCKET} " " $@ "
165+ docker_note " Starting server"
166+ docker_start_server " ${SOCKET} " " $@ "
167167 if [ " ${MYSQL_MAJOR} " = " 5.5" ] || [ " ${MYSQL_MAJOR} " = " 5.6" ]; then
168- _note " Waiting for server startup"
169- _wait_for_server " ${mysql[@]} "
168+ docker_note " Waiting for server startup"
169+ docker_wait_for_server " ${mysql[@]} "
170170 fi
171- _note " Server started."
171+ docker_note " Server started."
172172
173173
174174 if [ -z " $MYSQL_INITDB_SKIP_TZINFO " ]; then
@@ -178,12 +178,12 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
178178
179179 if [ ! -z " $MYSQL_RANDOM_ROOT_PASSWORD " ]; then
180180 export MYSQL_ROOT_PASSWORD=" $( pwgen -1 32) "
181- _note " GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD "
181+ docker_note " GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD "
182182 fi
183183
184184 rootCreate=
185185 # default root to listen for connections from anywhere
186- file_env ' MYSQL_ROOT_HOST' ' %'
186+ docker_file_env ' MYSQL_ROOT_HOST' ' %'
187187 if [ ! -z " $MYSQL_ROOT_HOST " -a " $MYSQL_ROOT_HOST " != ' localhost' ]; then
188188 # no, we don't care if read finds a terminating character in this heredoc
189189 # https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151
@@ -213,14 +213,14 @@ password="${MYSQL_ROOT_PASSWORD}"
213213EOF
214214 fi
215215
216- file_env ' MYSQL_DATABASE'
216+ docker_file_env ' MYSQL_DATABASE'
217217 if [ " $MYSQL_DATABASE " ]; then
218218 echo " CREATE DATABASE IF NOT EXISTS \` $MYSQL_DATABASE \` ;" | " ${mysql[@]} "
219219 mysql+=( " $MYSQL_DATABASE " )
220220 fi
221221
222- file_env ' MYSQL_USER'
223- file_env ' MYSQL_PASSWORD'
222+ docker_file_env ' MYSQL_USER'
223+ docker_file_env ' MYSQL_PASSWORD'
224224 if [ " $MYSQL_USER " -a " $MYSQL_PASSWORD " ]; then
225225 echo " CREATE USER '$MYSQL_USER '@'%' IDENTIFIED BY '$MYSQL_PASSWORD ' ;" | " ${mysql[@]} "
226226
233233
234234 echo
235235 for f in /docker-entrypoint-initdb.d/* ; do
236- process_init_file " $f " " ${mysql[@]} "
236+ docker_process_init_file " $f " " ${mysql[@]} "
237237 done
238238
239239 if [ ! -z " $MYSQL_ONETIME_PASSWORD " ]; then
@@ -245,13 +245,13 @@ EOF
245245 EOSQL
246246 fi
247247 fi
248- _note " Stopping server"
249- _stop_server " ${PASSFILE} " " ${SOCKET} "
250- _note " Server stopped"
248+ docker_note " Stopping server"
249+ docker_stop_server " ${PASSFILE} " " ${SOCKET} "
250+ docker_note " Server stopped"
251251 rm -f " ${PASSFILE} "
252252 unset PASSFILE
253253 echo
254- _note " MySQL init process done. Ready for start up."
254+ docker_note " MySQL init process done. Ready for start up."
255255 echo
256256 fi
257257fi
0 commit comments