@@ -3,18 +3,18 @@ set -eo pipefail
3
3
shopt -s nullglob
4
4
5
5
# logging functions
6
- _log () {
6
+ docker_log () {
7
7
local type=$1 ; shift
8
8
printf " $( date --rfc-3339=seconds) [${type} ] [Entrypoint]: $@ \n"
9
9
}
10
- _note () {
11
- _log Note " $@ "
10
+ docker_note () {
11
+ docker_log Note " $@ "
12
12
}
13
- _warn () {
14
- _log Warn " $@ " >&2
13
+ docker_warn () {
14
+ docker_log Warn " $@ " >&2
15
15
}
16
- _error () {
17
- _log ERROR " $@ " >&2
16
+ docker_error () {
17
+ docker_log ERROR " $@ " >&2
18
18
exit 1
19
19
}
20
20
@@ -34,16 +34,16 @@ for arg; do
34
34
esac
35
35
done
36
36
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'
39
39
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
40
40
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
41
- file_env () {
41
+ docker_file_env () {
42
42
local var=" $1 "
43
43
local fileVar=" ${var} _FILE"
44
44
local def=" ${2:- } "
45
45
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)"
47
47
fi
48
48
local val=" $def "
49
49
if [ " ${! var:- } " ]; then
@@ -55,51 +55,51 @@ file_env() {
55
55
unset " $fileVar "
56
56
}
57
57
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
60
60
# (process a single initializer file, based on its extension. we define this
61
61
# function here, so that initializer scripts (*.sh) can use the same logic,
62
62
# potentially recursively, or override the logic used in subsequent calls)
63
- process_init_file () {
63
+ docker_process_init_file () {
64
64
local f=" $1 " ; shift
65
65
local mysql=( " $@ " )
66
66
67
67
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 " ;;
72
72
esac
73
73
echo
74
74
}
75
75
76
- _check_config () {
76
+ docker_check_config () {
77
77
toRun=( " $@ " --verbose --help )
78
78
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 "
80
80
fi
81
81
}
82
82
83
83
# Fetch value from server config
84
84
# We use mysqld --verbose --help instead of my_print_defaults because the
85
85
# latter only show values present in config files, and not server defaults
86
- _get_config () {
86
+ docker_get_config () {
87
87
local conf=" $1 " ; shift
88
88
" $@ " --verbose --help --log-bin-index=" $( mktemp -u) " 2> /dev/null \
89
89
| awk ' $1 == "' " $conf " ' " && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }'
90
90
# match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)"
91
91
}
92
92
93
- _start_server () {
93
+ docker_start_server () {
94
94
local socket=$1 ; shift
95
95
result=0
96
96
%%SERVERSTARTUP%%
97
97
if [ ! " $result " = " 0" ]; then
98
- _error " Unable to start server. Status code $result ."
98
+ docker_error " Unable to start server. Status code $result ."
99
99
fi
100
100
}
101
101
102
- _wait_for_server () {
102
+ docker_wait_for_server () {
103
103
local mysql=( " $@ " )
104
104
for i in {30..0}; do
105
105
if echo ' SELECT 1' | " ${mysql[@]} " & > /dev/null; then
@@ -108,67 +108,67 @@ _wait_for_server() {
108
108
sleep 1
109
109
done
110
110
if [ " $i " = 0 ]; then
111
- _error " Unable to start server."
111
+ docker_error " Unable to start server."
112
112
fi
113
113
}
114
114
115
- _stop_server () {
115
+ docker_stop_server () {
116
116
local passfile=$1
117
117
local socket=$2
118
118
result=0
119
119
mysqladmin --defaults-extra-file=" ${passfile} " shutdown -uroot --socket=" ${socket} " || result=$?
120
120
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 ."
122
122
fi
123
123
}
124
124
# allow the container to be started with `--user`
125
125
if [ " $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' " $@ " ) "
128
128
mkdir -p " $DATADIR "
129
129
chown -R mysql:mysql " $DATADIR "
130
130
exec gosu mysql " $BASH_SOURCE " " $@ "
131
131
fi
132
132
133
133
if [ " $1 " = ' mysqld' -a -z " $wantHelp " ]; then
134
134
# still need to check config, container may have started with --user
135
- _check_config " $@ "
135
+ docker_check_config " $@ "
136
136
# Get config
137
- DATADIR=" $( _get_config ' datadir' " $@ " ) "
137
+ DATADIR=" $( docker_get_config ' datadir' " $@ " ) "
138
138
139
139
if [ ! -d " $DATADIR /mysql" ]; then
140
- file_env ' MYSQL_ROOT_PASSWORD'
140
+ docker_file_env ' MYSQL_ROOT_PASSWORD'
141
141
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"
143
143
fi
144
144
145
145
mkdir -p " $DATADIR "
146
146
147
- _note " Initializing database"
147
+ docker_note " Initializing database"
148
148
%%DATABASEINIT%%
149
- _note " Database initialized"
149
+ docker_note " Database initialized"
150
150
151
151
if command -v mysql_ssl_rsa_setup > /dev/null && [ ! -e " $DATADIR /server-key.pem" ]; then
152
152
# 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"
154
154
mysql_ssl_rsa_setup --datadir=" $DATADIR "
155
- _note " Certificates initialized"
155
+ docker_note " Certificates initialized"
156
156
fi
157
157
158
- SOCKET=" $( _get_config ' socket' " $@ " ) "
158
+ SOCKET=" $( docker_get_config ' socket' " $@ " ) "
159
159
# We create a file to store the root password in so we don''t use it on the command line
160
160
install -d -m0700 /tmp/mysql-files
161
161
PASSFILE=$( mktemp /tmp/mysql-files/XXXXXXXXXX)
162
162
install /dev/null -m0600 " ${PASSFILE} "
163
163
164
164
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} " " $@ "
167
167
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[@]} "
170
170
fi
171
- _note " Server started."
171
+ docker_note " Server started."
172
172
173
173
174
174
if [ -z " $MYSQL_INITDB_SKIP_TZINFO " ]; then
@@ -178,12 +178,12 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
178
178
179
179
if [ ! -z " $MYSQL_RANDOM_ROOT_PASSWORD " ]; then
180
180
export MYSQL_ROOT_PASSWORD=" $( pwgen -1 32) "
181
- _note " GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD "
181
+ docker_note " GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD "
182
182
fi
183
183
184
184
rootCreate=
185
185
# default root to listen for connections from anywhere
186
- file_env ' MYSQL_ROOT_HOST' ' %'
186
+ docker_file_env ' MYSQL_ROOT_HOST' ' %'
187
187
if [ ! -z " $MYSQL_ROOT_HOST " -a " $MYSQL_ROOT_HOST " != ' localhost' ]; then
188
188
# no, we don't care if read finds a terminating character in this heredoc
189
189
# 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}"
213
213
EOF
214
214
fi
215
215
216
- file_env ' MYSQL_DATABASE'
216
+ docker_file_env ' MYSQL_DATABASE'
217
217
if [ " $MYSQL_DATABASE " ]; then
218
218
echo " CREATE DATABASE IF NOT EXISTS \` $MYSQL_DATABASE \` ;" | " ${mysql[@]} "
219
219
mysql+=( " $MYSQL_DATABASE " )
220
220
fi
221
221
222
- file_env ' MYSQL_USER'
223
- file_env ' MYSQL_PASSWORD'
222
+ docker_file_env ' MYSQL_USER'
223
+ docker_file_env ' MYSQL_PASSWORD'
224
224
if [ " $MYSQL_USER " -a " $MYSQL_PASSWORD " ]; then
225
225
echo " CREATE USER '$MYSQL_USER '@'%' IDENTIFIED BY '$MYSQL_PASSWORD ' ;" | " ${mysql[@]} "
226
226
233
233
234
234
echo
235
235
for f in /docker-entrypoint-initdb.d/* ; do
236
- process_init_file " $f " " ${mysql[@]} "
236
+ docker_process_init_file " $f " " ${mysql[@]} "
237
237
done
238
238
239
239
if [ ! -z " $MYSQL_ONETIME_PASSWORD " ]; then
@@ -245,13 +245,13 @@ EOF
245
245
EOSQL
246
246
fi
247
247
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"
251
251
rm -f " ${PASSFILE} "
252
252
unset PASSFILE
253
253
echo
254
- _note " MySQL init process done. Ready for start up."
254
+ docker_note " MySQL init process done. Ready for start up."
255
255
echo
256
256
fi
257
257
fi
0 commit comments