@@ -54,14 +54,18 @@ _check_config() {
54
54
fi
55
55
}
56
56
57
- _datadir () {
58
- " $@ " --verbose --help --log-bin-index=" $( mktemp -u) " 2> /dev/null | awk ' $1 == "datadir" { print $2; exit }'
57
+ # Fetch value from server config
58
+ # We use mysqld --verbose --help instead of my_print_defaults because the
59
+ # latter only show values present in config files, and not server defaults
60
+ _get_config () {
61
+ local conf=" $1 " ; shift
62
+ " $@ " --verbose --help --log-bin-index=" $( mktemp -u) " 2> /dev/null | awk ' $1 == "' " $conf " ' " { print $2; exit }'
59
63
}
60
64
61
65
# allow the container to be started with `--user`
62
66
if [ " $1 " = ' mysqld' -a -z " $wantHelp " -a " $( id -u) " = ' 0' ]; then
63
67
_check_config " $@ "
64
- DATADIR=" $( _datadir " $@ " ) "
68
+ DATADIR=" $( _get_config ' datadir ' " $@ " ) "
65
69
mkdir -p " $DATADIR "
66
70
chown -R mysql:mysql " $DATADIR "
67
71
exec gosu mysql " $BASH_SOURCE " " $@ "
@@ -71,7 +75,7 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
71
75
# still need to check config, container may have started with --user
72
76
_check_config " $@ "
73
77
# Get config
74
- DATADIR=" $( _datadir " $@ " ) "
78
+ DATADIR=" $( _get_config ' datadir ' " $@ " ) "
75
79
76
80
if [ ! -d " $DATADIR /mysql" ]; then
77
81
file_env ' MYSQL_ROOT_PASSWORD'
@@ -87,10 +91,11 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
87
91
mysql_install_db --datadir=" $DATADIR " --rpm
88
92
echo ' Database initialized'
89
93
90
- " $@ " --skip-networking --socket=/var/run/mysqld/mysqld.sock &
94
+ SOCKET=" $( _get_config ' socket' " $@ " ) "
95
+ " $@ " --skip-networking --socket=" ${SOCKET} " &
91
96
pid=" $! "
92
97
93
- mysql=( mysql --protocol=socket -uroot -hlocalhost --socket=/var/run/mysqld/mysqld.sock )
98
+ mysql=( mysql --protocol=socket -uroot -hlocalhost --socket=" ${SOCKET} " )
94
99
95
100
for i in {30..0}; do
96
101
if echo ' SELECT 1' | " ${mysql[@]} " & > /dev/null; then
@@ -113,14 +118,28 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
113
118
export MYSQL_ROOT_PASSWORD=" $( pwgen -1 32) "
114
119
echo " GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD "
115
120
fi
121
+
122
+ rootCreate=
123
+ # default root to listen for connections from anywhere
124
+ file_env ' MYSQL_ROOT_HOST' ' %'
125
+ if [ ! -z " $MYSQL_ROOT_HOST " -a " $MYSQL_ROOT_HOST " != ' localhost' ]; then
126
+ # no, we don't care if read finds a terminating character in this heredoc
127
+ # https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151
128
+ read -r -d ' ' rootCreate << -EOSQL || true
129
+ CREATE USER 'root'@'${MYSQL_ROOT_HOST} ' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD} ' ;
130
+ GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST} ' WITH GRANT OPTION ;
131
+ EOSQL
132
+ fi
133
+
116
134
" ${mysql[@]} " << -EOSQL
117
135
-- What's done in this file shouldn't be replicated
118
136
-- or products like mysql-fabric won't work
119
137
SET @@SESSION.SQL_LOG_BIN=0;
120
138
121
- DELETE FROM mysql.user ;
122
- CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD} ' ;
123
- GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
139
+ DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost') ;
140
+ SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD} ') ;
141
+ GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION ;
142
+ ${rootCreate}
124
143
DROP DATABASE IF EXISTS test ;
125
144
FLUSH PRIVILEGES ;
126
145
EOSQL
0 commit comments