@@ -62,12 +62,11 @@ file_env() {
6262# potentially recursively, or override the logic used in subsequent calls)
6363docker_process_init_files () {
6464 local f=" $1 " ; shift
65- local mysql=( " $@ " )
6665
6766 case " $f " in
6867 * .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 ;;
7170 * ) mysql_warn " $0 : ignoring $f " ;;
7271 esac
7372 echo
@@ -102,7 +101,7 @@ docker_temp_server_start() {
102101 if [ " ${MYSQL_MAJOR} " = " 5.5" ] || [ " ${MYSQL_MAJOR} " = " 5.6" ]; then
103102 mysql_note " Waiting for server startup"
104103 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
106105 break
107106 fi
108107 sleep 1
@@ -169,6 +168,16 @@ docker_setup_env() {
169168 file_env ' MYSQL_ROOT_PASSWORD'
170169}
171170
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+
172181# Define the client command that's used in various places
173182docker_init_client_command () {
174183 mysql=( mysql --defaults-file=" ${PASSFILE} " --protocol=socket -uroot -hlocalhost --socket=" ${SOCKET} " )
@@ -179,7 +188,7 @@ docker_setup_db() {
179188 # Load timezone info into database
180189 if [ -z " $MYSQL_INITDB_SKIP_TZINFO " ]; then
181190 # 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
183192 fi
184193 # Generate random root password
185194 if [ ! -z " $MYSQL_RANDOM_ROOT_PASSWORD " ]; then
@@ -198,7 +207,7 @@ docker_setup_db() {
198207 EOSQL
199208 fi
200209
201- " ${mysql[@]} " << - EOSQL
210+ docker_process_sql "
202211 -- What's done in this file shouldn't be replicated
203212 -- or products like mysql-fabric won't work
204213 SET @@SESSION.SQL_LOG_BIN=0;
@@ -208,7 +217,7 @@ docker_setup_db() {
208217 ${rootCreate}
209218 DROP DATABASE IF EXISTS test ;
210219 FLUSH PRIVILEGES ;
211- EOSQL
220+ "
212221
213222 # Write the password to the file the client uses
214223 if [ ! -z " $MYSQL_ROOT_PASSWORD " ]; then
@@ -221,19 +230,20 @@ EOF
221230 # Creates a custom database and user if specified
222231 if [ " $MYSQL_DATABASE " ]; then
223232 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 \` ;"
225234 mysql+=( " $MYSQL_DATABASE " )
226235 fi
227236
228237 if [ " $MYSQL_USER " -a " $MYSQL_PASSWORD " ]; then
229238 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 ' ;"
231240
232241 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 '@'%' ;"
234244 fi
235245
236- echo ' FLUSH PRIVILEGES ;' | " ${mysql[@]} "
246+ docker_process_sql " FLUSH PRIVILEGES ;"
237247 fi
238248}
239249
@@ -243,9 +253,7 @@ mysql_expire_root_user() {
243253 if [ " ${MYSQL_MAJOR} " = " 5.5" ]; then
244254 mysql_warn " MySQL 5.5 does not support PASSWORD EXPIRE (required for MYSQL_ONETIME_PASSWORD)"
245255 else
246- " ${mysql[@]} " << -EOSQL
247- ALTER USER 'root'@'%' PASSWORD EXPIRE;
248- EOSQL
256+ docker_process_sql " ALTER USER 'root'@'%' PASSWORD EXPIRE;"
249257 fi
250258}
251259
@@ -283,7 +291,7 @@ _main() {
283291
284292 echo
285293 for f in /docker-entrypoint-initdb.d/* ; do
286- docker_process_init_files " $f " " ${mysql[@]} "
294+ docker_process_init_files " $f "
287295 done
288296
289297 if [ ! -z " $MYSQL_ONETIME_PASSWORD " ]; then
0 commit comments