Skip to content

Commit 125ac54

Browse files
ltangvaldyosifkit
authored andcommitted
Replace function docker_init_client_command with docker_process_sql
Instead of setting a command variable, the new function takes sql scripts as input and executes them.
1 parent 964f6c2 commit 125ac54

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

.template.Debian/docker-entrypoint.sh

+23-15
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,11 @@ file_env() {
6262
# potentially recursively, or override the logic used in subsequent calls)
6363
docker_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
173182
docker_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

Comments
 (0)