@@ -62,12 +62,11 @@ file_env() {
62
62
# potentially recursively, or override the logic used in subsequent calls)
63
63
docker_process_init_files () {
64
64
local f=" $1 " ; shift
65
- local mysql=( " $@ " )
66
65
67
66
case " $f " in
68
67
* .sh) mysql_note " $0 : running $f " ; . " $f " ;;
69
- * .sql) mysql_note " $0 : running $f " ; " ${mysql[@]} " < " $f " ; echo ;;
70
- * .sql.gz) mysql_note " $0 : running $f " ; gunzip -c " $f " | " ${mysql[@]} " ; echo ;;
68
+ * .sql) mysql_note " $0 : running $f " ; docker_process_sql " $( cat $f ) " ; echo ;;
69
+ * .sql.gz) mysql_note " $0 : running $f " ; docker_process_sql " $( gunzip -c $f ) " ; echo ;;
71
70
* ) mysql_warn " $0 : ignoring $f " ;;
72
71
esac
73
72
echo
@@ -102,7 +101,7 @@ docker_temp_server_start() {
102
101
if [ " ${MYSQL_MAJOR} " = " 5.5" ] || [ " ${MYSQL_MAJOR} " = " 5.6" ]; then
103
102
mysql_note " Waiting for server startup"
104
103
for i in {30..0}; do
105
- if echo ' SELECT 1' | " ${mysql[@]} " & > /dev/null; then
104
+ if docker_process_sql " SELECT 1" & > /dev/null; then
106
105
break
107
106
fi
108
107
sleep 1
@@ -169,6 +168,16 @@ docker_setup_env() {
169
168
file_env ' MYSQL_ROOT_PASSWORD'
170
169
}
171
170
171
+ # Execute sql script
172
+ docker_process_sql () {
173
+ SQL=$1
174
+ DB=$2
175
+ if [ -z " $SQL " ]; then
176
+ mysql_error " Empty sql script provided"
177
+ fi
178
+ echo " $SQL " | mysql --defaults-file=" ${PASSFILE} " --protocol=socket -uroot -hlocalhost --socket=" ${SOCKET} " " $DB "
179
+ }
180
+
172
181
# Define the client command that's used in various places
173
182
docker_init_client_command () {
174
183
mysql=( mysql --defaults-file=" ${PASSFILE} " --protocol=socket -uroot -hlocalhost --socket=" ${SOCKET} " )
@@ -179,7 +188,7 @@ docker_setup_db() {
179
188
# Load timezone info into database
180
189
if [ -z " $MYSQL_INITDB_SKIP_TZINFO " ]; then
181
190
# sed is for https://bugs.mysql.com/bug.php?id=20545
182
- mysql_tzinfo_to_sql /usr/share/zoneinfo | sed ' s/Local time zone must be set--see zic manual page/FCTY/' | " ${mysql[@]} " mysql
191
+ docker_process_sql " $( mysql_tzinfo_to_sql /usr/share/zoneinfo | sed ' s/Local time zone must be set--see zic manual page/FCTY/' ) " mysql
183
192
fi
184
193
# Generate random root password
185
194
if [ ! -z " $MYSQL_RANDOM_ROOT_PASSWORD " ]; then
@@ -198,7 +207,7 @@ docker_setup_db() {
198
207
EOSQL
199
208
fi
200
209
201
- " ${mysql[@]} " << - EOSQL
210
+ docker_process_sql "
202
211
-- What's done in this file shouldn't be replicated
203
212
-- or products like mysql-fabric won't work
204
213
SET @@SESSION.SQL_LOG_BIN=0;
@@ -208,7 +217,7 @@ docker_setup_db() {
208
217
${rootCreate}
209
218
DROP DATABASE IF EXISTS test ;
210
219
FLUSH PRIVILEGES ;
211
- EOSQL
220
+ "
212
221
213
222
# Write the password to the file the client uses
214
223
if [ ! -z " $MYSQL_ROOT_PASSWORD " ]; then
@@ -221,19 +230,20 @@ EOF
221
230
# Creates a custom database and user if specified
222
231
if [ " $MYSQL_DATABASE " ]; then
223
232
mysql_note " Creating database ${MYSQL_DATABASE} "
224
- echo " CREATE DATABASE IF NOT EXISTS \` $MYSQL_DATABASE \` ;" | " ${mysql[@]} "
233
+ docker_process_sql " CREATE DATABASE IF NOT EXISTS \` $MYSQL_DATABASE \` ;"
225
234
mysql+=( " $MYSQL_DATABASE " )
226
235
fi
227
236
228
237
if [ " $MYSQL_USER " -a " $MYSQL_PASSWORD " ]; then
229
238
mysql_note " Creating user ${MYSQL_USER} "
230
- echo " CREATE USER '$MYSQL_USER '@'%' IDENTIFIED BY '$MYSQL_PASSWORD ' ;" | " ${mysql[@]} "
239
+ docker_process_sql " CREATE USER '$MYSQL_USER '@'%' IDENTIFIED BY '$MYSQL_PASSWORD ' ;"
231
240
232
241
if [ " $MYSQL_DATABASE " ]; then
233
- echo " GRANT ALL ON \` $MYSQL_DATABASE \` .* TO '$MYSQL_USER '@'%' ;" | " ${mysql[@]} "
242
+ mysql_note " Giving user ${MYSQL_USER} access to schema ${MYSQL_DATABASE} "
243
+ docker_process_sql " GRANT ALL ON \` $MYSQL_DATABASE \` .* TO '$MYSQL_USER '@'%' ;"
234
244
fi
235
245
236
- echo ' FLUSH PRIVILEGES ;' | " ${mysql[@]} "
246
+ docker_process_sql " FLUSH PRIVILEGES ;"
237
247
fi
238
248
}
239
249
@@ -243,9 +253,7 @@ mysql_expire_root_user() {
243
253
if [ " ${MYSQL_MAJOR} " = " 5.5" ]; then
244
254
mysql_warn " MySQL 5.5 does not support PASSWORD EXPIRE (required for MYSQL_ONETIME_PASSWORD)"
245
255
else
246
- " ${mysql[@]} " << -EOSQL
247
- ALTER USER 'root'@'%' PASSWORD EXPIRE;
248
- EOSQL
256
+ docker_process_sql " ALTER USER 'root'@'%' PASSWORD EXPIRE;"
249
257
fi
250
258
}
251
259
@@ -283,7 +291,7 @@ _main() {
283
291
284
292
echo
285
293
for f in /docker-entrypoint-initdb.d/* ; do
286
- docker_process_init_files " $f " " ${mysql[@]} "
294
+ docker_process_init_files " $f "
287
295
done
288
296
289
297
if [ ! -z " $MYSQL_ONETIME_PASSWORD " ]; then
0 commit comments