]> git.pld-linux.org Git - packages/mysql.git/blame - mysql.init
- security patch, rel. 0.2
[packages/mysql.git] / mysql.init
CommitLineData
53a28f77 1#!/bin/sh
2#
350d9d8c 3# mysql A very fast and reliable SQL database engine
53a28f77 4#
350d9d8c 5# chkconfig: 2345 84 25
53a28f77 6#
350d9d8c 7# description: A very fast and reliable SQL database engine.
53a28f77 8#
53a28f77 9# Source function library
10. /etc/rc.d/init.d/functions
11
12# Get network config
13. /etc/sysconfig/network
14
aac2c31f
AM
15# Get service config
16if [ -f /etc/sysconfig/mysql ]; then
350d9d8c 17 . /etc/sysconfig/mysql
aac2c31f 18else
350d9d8c 19 nls "Error: %s not found" /etc/sysconfig/mysql
95b0575d 20 nls "%s can't be run." MySQL
350d9d8c
PG
21 exit 1
22fi
23
0146fae1 24if [ -n "$MYSQL_DB_CLUSTERS" ]; then
350d9d8c 25 nls "Warning: MYSQL_DB_CLUSTERS is set. It's obsolete. Use %s instead." /etc/mysql/clusters.conf
aac2c31f
AM
26fi
27
95b0575d
ER
28if [ -f /etc/mysql/clusters.conf ]; then
29 MYSQL_DB_CLUSTERS=$(grep -v '^#' /etc/mysql/clusters.conf | cut -s -f 2 -d '=')
30 if [ -z "$MYSQL_DB_CLUSTERS" ]; then
31 nls "Warning: there are no configured clusters."
32 fi
0146fae1 33
95b0575d 34else
0146fae1 35 nls "Warning: Missing clusters config file %s" /etc/mysql/clusters.conf
95b0575d
ER
36 if [ -z "$MYSQL_DB_CLUSTERS" ]; then
37 nls "Warning: there are no configured clusters."
38 nls "Using default cluster /var/lib/mysql (compatibility mode)"
39 MYSQL_DB_CLUSTERS=/var/lib/mysql
40 fi
aac2c31f
AM
41fi
42
95b0575d 43
ac28c610 44# Check that networking is up
8eb71226 45if is_yes "${NETWORKING}"; then
213fc2f2 46 if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
8eb71226 47 msg_network_down MySQL
48 exit 1
49 fi
50else
51 exit 0
e9ca44ab 52fi
53
aac2c31f
AM
54action="$1"
55
56# any db cluster as command line argument?
521444a9 57if [ $# -gt 1 ]; then
350d9d8c
PG
58 shift
59 # perform action for specified clusters only
60 DB_CLUSTERS="$@"
aac2c31f 61else
350d9d8c 62 DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
53a28f77 63fi
64
aac2c31f
AM
65MYSQL_ERRLOG=/var/log/mysql/err
66
67#
68# Useful functions.
69#
70
71#
72# check for mysql status
73#
74# arguments:
75# $1 - db cluster
76#
77# sets variables:
95b0575d 78# MYSQL_STATUS = running | not running | died
aac2c31f
AM
79# MYSQL_PID = pid of mysqld process
80#
81mysqlstatus() {
82 clusterdir="$1"
83 mysqlgetconfig "$clusterdir"
350d9d8c
PG
84
85 MYSQL_STATUS="not running"
86 MYSQL_PID="unknown"
aac2c31f
AM
87
88 [ -f "$MYSQL_PIDFILE" ] && MYSQL_PID=$(cat "$MYSQL_PIDFILE")
6d3c5db5
AM
89
90 if [ ! -d "/proc/$MYSQL_PID" -a "$MYSQL_PID" != "unknown" ]; then
350d9d8c 91 MYSQL_STATUS="died"
6d3c5db5 92 elif [ -d "/proc/$MYSQL_PID" ]; then
4487c065 93 grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline && MYSQL_STATUS="running" || MYSQL_STATUS="not running"
6d3c5db5 94 fi
aac2c31f
AM
95}
96
97# get mysql configuration in variables
98# MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
99#
100# arguments
101# $1 - db cluster
102
103mysqlgetconfig() {
104 clusterdir="$1"
aac2c31f
AM
105
106 # emulate old behaviour if only one cluster specified
107 if [ "$clusterdir" = "$MYSQL_DB_CLUSTERS" -a "$clusterdir" = "/var/lib/mysql" -a -f /etc/mysqld.conf ]; then
d54e166d 108 MYSQL_RA_COMPAT=yes; export MYSQL_RA_COMPAT
aac2c31f 109 config_file=/etc/mysqld.conf
521444a9 110 else
d54e166d 111 # TODO: convert this piece of crap to awk
3cc8d16e 112 config=`grep -v "^#" /etc/mysql/clusters.conf | grep "${clusterdir}$" | cut -s -f 1 -d '='`
e9dba700 113 if echo "$config" | grep -q '^/'; then
d54e166d 114 config_file="$config"
fe2f6e01 115 elif [ -f "/etc/mysql/$config" ]; then
d4abea95 116 config_file=/etc/mysql/$config
d54e166d
AM
117 else
118 config_file="$clusterdir/mysqld.conf"
119 fi
350d9d8c 120 fi
aac2c31f
AM
121
122 MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
d54e166d 123
521444a9 124 if [ -z "$config_file" ]; then
f9ad67df
PG
125 nls "Error: Can't find config file for %s cluster" "$clusterdir"
126 exit 6
127 else
128 MYSQL_CONFIG="$config_file"; export MYSQL_CONFIG
129 fi
d54e166d 130
aac2c31f
AM
131 if [ ! -f "$config_file" ]; then
132 nls "Error: config file %s not found" "$config_file"
350d9d8c
PG
133 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
134 exit 6
aac2c31f
AM
135 fi
136
137 eval `awk '
823c13f7
SZ
138/^[ \t]*\[.*\][ \t]*$/ {
139 match($0,/\[.*\]/)
140 section=substr($0,RSTART+1,RSTART+RLENGTH-3)
141}
142section=="mysqld" && $2~"=" {
143 if ($1=="datadir") {
144 printf("MYSQL_DATA_DIR=%s;", $3)
145 } else if ($1=="user") {
146 printf("MYSQL_USER=%s;", $3)
147 } else if ($1=="pid-file") {
148 printf("MYSQL_PIDFILE=%s;", $3)
aac2c31f
AM
149 } else if ($1=="socket") {
150 printf("MYSQL_SOCKET=%s;", $3)
823c13f7
SZ
151 }
152}
153END {
aac2c31f 154 print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
823c13f7 155}
aac2c31f 156' $config_file`
e9ca44ab 157
e9ca44ab 158
d54e166d 159 if is_yes "$MYSQL_RA_COMPAT"; then
350d9d8c 160 MYSQL_DATA_DIR_SUB=""
8ee1d59c 161 else
350d9d8c 162 MYSQL_DATA_DIR_SUB="/mysqldb"
8ee1d59c
AM
163 fi
164
165 if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
350d9d8c
PG
166 nls "Error: datadir specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/db"
167 nls " MySQL can't be run."
168 exit 6
8ee1d59c
AM
169 fi
170
171 if [ -z "$MYSQL_PIDFILE" -o "$MYSQL_PIDFILE" != "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid" ]; then
172 nls "Error: pid-file specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid"
173 nls " MySQL can't be run."
174 exit 6
175 fi
e9ca44ab 176
aac2c31f 177 if [ -z $MYSQL_USER ]; then
350d9d8c
PG
178 echo "$(nls 'MySQL user not configured properly')"'!' >&2
179 nls "Edit %s and configure it." "$config_file" >&2
180 exit 6
860cd80c 181 fi
aac2c31f 182}
e9ca44ab 183
aac2c31f
AM
184# start mysql
185mysqlstart() {
186 clusterdir="$1"
187 mysqlgetconfig "$clusterdir"
188 if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
189 nls "MySQL cluster %s not initialized." "$clusterdir"
190 nls "Try \`%s init %s' before start." "$0" "$clusterdir"
350d9d8c
PG
191 exit 6
192 fi
02e96f2e 193
aac2c31f
AM
194 msg_starting "MySQL $clusterdir"
195 busy
196 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
54a1f368 197 TMPDIR=/tmp nice -n ${SERVICE_RUN_NICE_LEVEL:-$DEFAULT_SERVICE_RUN_NICE_LEVEL} /usr/bin/setsid /usr/sbin/mysqld --defaults-file=$MYSQL_CONFIG --datadir=$MYSQL_DATA_DIR --pid-file=$MYSQL_PIDFILE >> $MYSQL_ERRLOG 2>&1 &
653cf157 198 sleep 2
aac2c31f 199 mysqlstatus "$clusterdir"
6d3c5db5 200 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
aac2c31f 201 ok
47fd5a6a 202 elif [ "$MYSQL_STATUS" = "died" ]; then
350d9d8c 203 RETVAL=1
47fd5a6a 204 died
aac2c31f
AM
205 else
206 RETVAL=1
207 fail
53a28f77 208 fi
aac2c31f
AM
209}
210
211# stop mysql
212mysqlstop() {
213 clusterdir="$1"
214 mysqlstatus "$clusterdir"
215 msg_stopping "MySQL $clusterdir"
216 busy
95b0575d
ER
217
218# TODO
219# graceful mysql shutdown with mysqladmin shutdown requires 'shutdown'
220# privilege. create new user mysqlctl or rename mysql_logrotate to mysqlctl
221# and give it both privs (flush-logs and shutdown)?
222
223 # try graceful shutdown -- send shutdown command
224 /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown
225 mysqlstatus "$clusterdir"
226
d3366208 227 [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
aac2c31f
AM
228 # 3 seconds
229 for nr in 1 2 3; do
230 [ -d "/proc/$MYSQL_PID" ] && sleep 1
231 done
232 mysqlstatus "$clusterdir"
47fd5a6a 233 if [ "$MYSQL_STATUS" = "died" ]; then
350d9d8c 234 died
47fd5a6a 235 elif [ "$MYSQL_STATUS" = "running" ]; then
aac2c31f 236 fail
b92e5cd1 237 else
aac2c31f 238 ok
b92e5cd1 239 fi
95b0575d
ER
240
241 # FIXME: should let mysqld remove pid by itself?
aac2c31f
AM
242 rm -f "$MYSQL_PIDFILE"
243}
244
245#
246# check for running mysql instances; if any instance is running then
247# create subsys lock file
248#
249mysqlsubsys() {
350d9d8c
PG
250 # check for every defined db cluster in sysconfig file
251 for mysqldir in $DB_CLUSTERS; do
252 mysqlstatus "$mysqldir"
253 if [ "$MYSQL_STATUS" = "running" ]; then
254 touch /var/lock/subsys/mysql
255 return
256 fi
257 done
258 rm -f /var/lock/subsys/mysql
aac2c31f
AM
259}
260
261mysqlinit() {
262 clusterdir="$1"
8ee1d59c
AM
263
264 if [ -f /etc/mysqld.conf ]; then
350d9d8c
PG
265 nls "Running in \`no cluster compat' mode: can't initialize database."
266 nls "Move /etc/mysqld.conf away and rerun \`$0 init' (new config will be in $clusterdir)."
267 exit 1
8ee1d59c
AM
268 fi
269
521444a9
AM
270 if [ -f "$clusterdir/mysqld.conf" ]; then
271 mysqlgetconfig "$clusterdir"
272 else
273 MYSQL_USER="mysql"
274 MYSQL_CLUSTER_DIR="$clusterdir"
275 MYSQL_DATA_DIR="$clusterdir/mysqldb/db"
276 MYSQL_PIDFILE="$clusterdir/mysqldb/mysql.pid"
277 MYSQL_SOCKET="$clusterdir/mysqldb/mysql.sock"
278 fi
aac2c31f
AM
279
280 nls "Initializing cluster %s" "$clusterdir"
281
573e1dcc 282 # Check if not exist init database
e9ca44ab 283 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
653cf157 284 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysqldb/mysql"
b92e5cd1 285 nls "before initializing database."
aac2c31f
AM
286 nls "For now skipping cluster %s." "$clusterdir"
287 return
e9ca44ab 288 fi
289
aac2c31f 290 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
e9ca44ab 291 busy
292 TMP=/tmp TMPDIR=/tmp
aac2c31f
AM
293
294
ac28c610 295 # Install this in the user table, too
653cf157
AM
296 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
297 [ -z "$hostname" ] && hostname="localhost-unknown"
40c36bca 298
e9ca44ab 299 # Check if hostname is valid
300 if [ -z "$hostname" ]; then
301 deltext
b92e5cd1 302 fail
303 nls "Sorry, the host name is not configured."
304 nls "Please configure the 'hostname' command to return a hostname."
305 exit 1
306 elif ! hostname -i >/dev/null 2>&1; then
307 deltext
308 fail
309 nls "Sorry, the host '%s' could not be looked up." "$hostname"
310 nls "Please configure the 'hostname' command to return a correct hostname."
e9ca44ab 311 exit 1
e9ca44ab 312 fi
313
823c13f7
SZ
314 # Initialize variables
315 c_d="" i_d=""
316 c_h="" i_h=""
317 c_u="" i_u=""
318 c_f="" i_f=""
319 c_t="" c_c=""
02e96f2e 320
823c13f7 321 # Check for old tables
653cf157 322 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
823c13f7
SZ
323 then
324 # mysqld --bootstrap wants one command/line
325 c_d="$c_d CREATE TABLE db ("
326 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
327 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
328 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
329 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
330 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
331 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
332 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
333 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
334 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
335 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
336 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
337 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
338 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
95e4baaf
AM
339 c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
340 c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
823c13f7
SZ
341 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
342 c_d="$c_d KEY User (User)"
343 c_d="$c_d )"
62edb21b 344 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7 345 c_d="$c_d comment='Database privileges';"
02e96f2e 346
95e4baaf
AM
347 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
348 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
349
823c13f7 350 fi
02e96f2e 351
653cf157 352 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
823c13f7
SZ
353 then
354 c_h="$c_h CREATE TABLE host ("
355 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
356 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
357 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
358 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
359 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
360 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
361 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
362 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
363 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
95e4baaf
AM
367 c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368 c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
823c13f7
SZ
369 c_h="$c_h PRIMARY KEY Host (Host,Db)"
370 c_h="$c_h )"
62edb21b 371 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7
SZ
372 c_h="$c_h comment='Host privileges; Merged with database privileges';"
373 fi
02e96f2e 374
653cf157 375 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
823c13f7
SZ
376 then
377 c_u="$c_u CREATE TABLE user ("
378 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
379 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
62edb21b 380 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
823c13f7
SZ
381 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
382 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
383 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
384 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
394 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
95e4baaf
AM
395 c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
396 c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
397 c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
398 c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
399 c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
400 c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
401 c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
402 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
403 c_u="$c_u ssl_cipher BLOB NOT NULL,"
404 c_u="$c_u x509_issuer BLOB NOT NULL,"
405 c_u="$c_u x509_subject BLOB NOT NULL,"
406 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
407 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
408 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
823c13f7
SZ
409 c_u="$c_u PRIMARY KEY Host (Host,User)"
410 c_u="$c_u )"
62edb21b 411 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7 412 c_u="$c_u comment='Users and global privileges';"
02e96f2e 413
95e4baaf
AM
414 i_u="INSERT INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
415 INSERT INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
416
417 REPLACE INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
418 REPLACE INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
419
420 INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);"
823c13f7 421 fi
02e96f2e 422
653cf157 423 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
823c13f7
SZ
424 then
425 c_f="$c_f CREATE TABLE func ("
426 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
427 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
428 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
429 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
430 c_f="$c_f PRIMARY KEY (name)"
431 c_f="$c_f )"
62edb21b 432 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7
SZ
433 c_f="$c_f comment='User defined functions';"
434 fi
02e96f2e 435
653cf157 436 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
823c13f7
SZ
437 then
438 c_t="$c_t CREATE TABLE tables_priv ("
439 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
440 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
441 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
442 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
443 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
444 c_t="$c_t Timestamp timestamp(14),"
445 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
446 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
447 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
448 c_t="$c_t KEY Grantor (Grantor)"
449 c_t="$c_t )"
62edb21b 450 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7
SZ
451 c_t="$c_t comment='Table privileges';"
452 fi
02e96f2e 453
653cf157 454 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
823c13f7
SZ
455 then
456 c_c="$c_c CREATE TABLE columns_priv ("
457 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
62edb21b 458 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
823c13f7 459 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
62edb21b
AM
460 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
461 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
823c13f7
SZ
462 c_c="$c_c Timestamp timestamp(14),"
463 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
464 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
465 c_c="$c_c )"
62edb21b 466 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7
SZ
467 c_c="$c_c comment='Column privileges';"
468 fi
469
aac2c31f 470 mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
f5d63301
AM
471 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
472 chown root:root "$MYSQL_CLUSTER_DIR"
473 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
653cf157 474 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
444f9f3c
AM
475
476 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
477 sed -e "s#datadir.*=.*#datadir = $MYSQL_DATA_DIR#g" \
478 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
479 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
480 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
54a1f368 481 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
444f9f3c
AM
482 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
483 fi
cc4d3f78
AM
484
485 if [ ! -e /var/lib/mysql/mysql.sock ]; then
486 ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
487 fi
aac2c31f 488
e9ca44ab 489 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
823c13f7
SZ
490 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
491CREATE DATABASE mysql;
e9ca44ab 492use mysql;
823c13f7
SZ
493$c_d
494$i_d
495
496$c_h
497$i_h
e9ca44ab 498
823c13f7
SZ
499$c_u
500$i_u
501
502$c_f
503$i_f
504
505$c_t
506$c_c
507END_OF_DATA
e9ca44ab 508 then
e9ca44ab 509 ok
aac2c31f 510 cat << END_OF_MSG
6a46c354 511
512PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
95e4baaf 513This is done (after starting database) with:
6a46c354 514
444f9f3c
AM
515/usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
516/usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
517/usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
6a46c354 518
aac2c31f 519NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
6a46c354 520mysqladmin section. See the manual for more instructions.
e9ca44ab 521
95b0575d 522IMPORTANT: The configuration file is mysqld.conf in MYSQL_DB_CLUSTERS directories.
773e3d84 523
e9ca44ab 524END_OF_MSG
525 else
e9ca44ab 526 fail
527 cat << END_OF_MSG
528Installation of grant tables FAILED!
529
530Examine the logs in $MYSQL_DATA_DIR for more information. You can
531also try to start the mysqld demon with:
532
533/usr/sbin/mysqld --skip-grant &
534
535You can use the command line tool /usr/bin/mysql to connect to the mysql
536database and look at the grant tables:
537
538shell> /usr/bin/mysql -u mysql mysql
539mysql> show tables
540
541Try 'mysqld --help' if you have problems with paths. Setting on
542logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
543may be helpful. The latest information about MySQL is available on the
78b16243 544web at http://www.mysql.com/.
e9ca44ab 545
546Please check PLD ftp site for newer versions of this package.
547
548Please consult the MySQL manual section: 'Problems running
549mysql_install_db', and the manual section that describes problems on
550your OS. Another information source is the MySQL email archive.
551Please check all of the above before mailing us! And if you do mail
552us, you MUST use the /usr/bin/mysqlbug script!
553
554END_OF_MSG
555
aac2c31f
AM
556 exit 1
557 fi
558}
559
560#
561# End of useful functions.
562#
563
564RETVAL=0
565case "$action" in
566 start)
567 if [ ! -f $MYSQL_ERRLOG ]; then
568 touch $MYSQL_ERRLOG
823c13f7 569 fi
54a1f368 570 chown mysql:mysql $MYSQL_ERRLOG
aac2c31f
AM
571 chmod 640 $MYSQL_ERRLOG
572
573 for mysqldir in $DB_CLUSTERS; do
574 mysqlstatus "$mysqldir"
575 if [ "$MYSQL_STATUS" = "running" ]; then
576 msg_already_running "MySQL $mysqldir"
577 else
578 mysqlstart "$mysqldir"
579 fi
580 done
581 mysqlsubsys
582 ;;
583 stop)
584 for mysqldir in $DB_CLUSTERS; do
585 mysqlstatus "$mysqldir"
586 if [ "$MYSQL_STATUS" = "not running" ]; then
587 msg_not_running "MySQL $mysqldir"
588 else
589 mysqlstop "$mysqldir"
590 fi
591 done
592 mysqlsubsys
593 ;;
594 status)
9ba824cc 595 status mysqld
aac2c31f
AM
596 for mysqldir in $DB_CLUSTERS; do
597 mysqlstatus "$mysqldir"
598 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
599 done
600 exit $?
601 ;;
602 restart|force-reload)
95b0575d
ER
603 $0 stop $DB_CLUSTERS
604 $0 start $DB_CLUSTERS
aac2c31f
AM
605 exit $?
606 ;;
607 init)
608 for mysqldir in $DB_CLUSTERS; do
609 mysqlinit "$mysqldir"
610 done
60bd204c 611 exit $?
573e1dcc 612 ;;
6fb7a89b
AM
613 flush-logs)
614 for mysqldir in $DB_CLUSTERS; do
615 mysqlgetconfig "$mysqldir"
616 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
617 done
6fb7a89b 618 ;;
53a28f77 619 *)
02e96f2e 620 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
621 exit 3
53a28f77 622esac
40c36bca 623
ee9b6a50 624exit $RETVAL
350d9d8c
PG
625
626# vi: shiftwidth=4 tabstop=4
This page took 1.831275 seconds and 4 git commands to generate.