]> git.pld-linux.org Git - packages/mysql.git/blame - mysql.init
- merge initscript improvements from HEAD
[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 28if [ -f /etc/mysql/clusters.conf ]; then
828919d9 29 MYSQL_DB_CLUSTERS=$(awk -F= '!/^#/{print $2}' /etc/mysql/clusters.conf)
95b0575d
ER
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
828919d9
ER
60 for a in "$@"; do
61 # try auto resolving from /etc/mysql/clusters.conf
62 if [[ "$a" != /* ]]; then
63 m=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $1}' /etc/mysql/clusters.conf)
64 if [ -z "$m" ]; then
65 echo >&2 "Cluster name '$a' did not match anything!"
66 exit 1
67 fi
68 if [ $(echo "$m" | wc -l) -gt 1 ]; then
69 echo >&2 "Cluster name '$a' ambiguous:" $m
70 exit 1
71 fi
72 a=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $2}' /etc/mysql/clusters.conf)
73 fi
74 DB_CLUSTERS="$DB_CLUSTERS $a"
75 done
aac2c31f 76else
350d9d8c 77 DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
53a28f77 78fi
79
aac2c31f 80MYSQL_ERRLOG=/var/log/mysql/err
b101533e
AM
81MYSQL_START_WAIT_TIME=${MYSQL_START_WAIT_TIME:-15}
82MYSQL_STOP_WAIT_TIME=${MYSQL_STOP_WAIT_TIME:-900}
aac2c31f
AM
83
84#
85# Useful functions.
86#
87
88#
89# check for mysql status
90#
91# arguments:
92# $1 - db cluster
b101533e 93# $2 - start|stop
aac2c31f
AM
94#
95# sets variables:
b101533e 96# MYSQL_STATUS = starting | running | not running | died
aac2c31f
AM
97# MYSQL_PID = pid of mysqld process
98#
99mysqlstatus() {
100 clusterdir="$1"
b101533e
AM
101 mode="$2"
102
aac2c31f 103 mysqlgetconfig "$clusterdir"
d405c4eb 104
350d9d8c
PG
105 MYSQL_STATUS="not running"
106 MYSQL_PID="unknown"
b101533e
AM
107 MYSQL_PIDFILE_PID=""
108 MYSQL_GREP_PID=""
aac2c31f 109
b101533e
AM
110 if [ -f "$MYSQL_PIDFILE" ]; then
111 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
112 fi
113
114 if [ -n "$MYSQL_PIDFILE_PID" ]; then
115 MYSQL_PID=$MYSQL_PIDFILE_PID
116 if [ ! -d "/proc/$MYSQL_PID" ]; then
117 MYSQL_STATUS="died"
118 return
85de2498 119 elif (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null); then
b101533e
AM
120 MYSQL_STATUS="running"
121 return
122 fi
123 fi
6d3c5db5 124
b101533e 125 if [ "$mode" = "start" ]; then
85de2498 126 MYSQL_GREP_PID=$(grep -lE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline 2> /dev/null | awk -F "/" '{ print $3; exit; }')
b101533e
AM
127 if [ -n "$MYSQL_GREP_PID" ]; then
128 MYSQL_PID=$MYSQL_GREP_PID
85de2498 129 if (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null); then
b101533e
AM
130 if [ -f "$MYSQL_PIDFILE" ]; then
131 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
132 fi
133 if [ -n "$MYSQL_PIDFILE_PID" ]; then
134 MYSQL_PID=$MYSQL_PIDFILE_PID
135 MYSQL_STATUS="running"
136 return
137 else
138 MYSQL_STATUS="starting"
139 return
140 fi
141 fi
142 fi
6d3c5db5 143 fi
b101533e
AM
144
145 # else default, "not running"
aac2c31f
AM
146}
147
148# get mysql configuration in variables
149# MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
150#
151# arguments
152# $1 - db cluster
153
154mysqlgetconfig() {
155 clusterdir="$1"
aac2c31f
AM
156
157 # emulate old behaviour if only one cluster specified
158 if [ "$clusterdir" = "$MYSQL_DB_CLUSTERS" -a "$clusterdir" = "/var/lib/mysql" -a -f /etc/mysqld.conf ]; then
828919d9 159 MYSQL_RA_COMPAT=yes
aac2c31f 160 config_file=/etc/mysqld.conf
521444a9 161 else
828919d9
ER
162 config=$(awk -F= -vclusterdir="$clusterdir" '!/^#/{ if (clusterdir == $2) print $1}' /etc/mysql/clusters.conf)
163 if [[ $config = /* ]]; then
d54e166d 164 config_file="$config"
fe2f6e01 165 elif [ -f "/etc/mysql/$config" ]; then
828919d9 166 config_file="/etc/mysql/$config"
d54e166d
AM
167 else
168 config_file="$clusterdir/mysqld.conf"
169 fi
350d9d8c 170 fi
aac2c31f 171
828919d9 172 MYSQL_CLUSTER_DIR="$clusterdir"
d405c4eb 173
521444a9 174 if [ -z "$config_file" ]; then
f9ad67df
PG
175 nls "Error: Can't find config file for %s cluster" "$clusterdir"
176 exit 6
177 else
828919d9 178 MYSQL_CONFIG="$config_file"
f9ad67df 179 fi
d405c4eb 180
aac2c31f
AM
181 if [ ! -f "$config_file" ]; then
182 nls "Error: config file %s not found" "$config_file"
350d9d8c
PG
183 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
184 exit 6
aac2c31f
AM
185 fi
186
187 eval `awk '
823c13f7
SZ
188/^[ \t]*\[.*\][ \t]*$/ {
189 match($0,/\[.*\]/)
828919d9 190 section=substr($0, RSTART + 1, RSTART + RLENGTH - 3)
823c13f7 191}
828919d9
ER
192section == "mysqld" && $2 ~ "=" {
193 if ($1 == "datadir") {
823c13f7 194 printf("MYSQL_DATA_DIR=%s;", $3)
828919d9 195 } else if ($1 == "user") {
823c13f7 196 printf("MYSQL_USER=%s;", $3)
828919d9 197 } else if ($1 == "pid-file") {
823c13f7 198 printf("MYSQL_PIDFILE=%s;", $3)
828919d9 199 } else if ($1 == "socket") {
aac2c31f 200 printf("MYSQL_SOCKET=%s;", $3)
823c13f7
SZ
201 }
202}
aac2c31f 203' $config_file`
e9ca44ab 204
e9ca44ab 205
d54e166d 206 if is_yes "$MYSQL_RA_COMPAT"; then
350d9d8c 207 MYSQL_DATA_DIR_SUB=""
8ee1d59c 208 else
350d9d8c 209 MYSQL_DATA_DIR_SUB="/mysqldb"
8ee1d59c 210 fi
d405c4eb 211
8ee1d59c 212 if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
350d9d8c
PG
213 nls "Error: datadir specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/db"
214 nls " MySQL can't be run."
215 exit 6
8ee1d59c 216 fi
d405c4eb 217
8ee1d59c
AM
218 if [ -z "$MYSQL_PIDFILE" -o "$MYSQL_PIDFILE" != "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid" ]; then
219 nls "Error: pid-file specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid"
220 nls " MySQL can't be run."
221 exit 6
222 fi
e9ca44ab 223
aac2c31f 224 if [ -z $MYSQL_USER ]; then
350d9d8c
PG
225 echo "$(nls 'MySQL user not configured properly')"'!' >&2
226 nls "Edit %s and configure it." "$config_file" >&2
227 exit 6
860cd80c 228 fi
aac2c31f 229}
e9ca44ab 230
aac2c31f
AM
231# start mysql
232mysqlstart() {
233 clusterdir="$1"
234 mysqlgetconfig "$clusterdir"
235 if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
236 nls "MySQL cluster %s not initialized." "$clusterdir"
237 nls "Try \`%s init %s' before start." "$0" "$clusterdir"
350d9d8c
PG
238 exit 6
239 fi
02e96f2e 240
aac2c31f
AM
241 msg_starting "MySQL $clusterdir"
242 busy
243 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
b101533e 244 rm -f "$MYSQL_PIDFILE"
85de2498 245 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_OPTIONS >> $MYSQL_ERRLOG 2>&1 &
b101533e
AM
246 sleep 0.2
247 mysqlstatus "$clusterdir" start
248 # it takes longer for mysqld to start and create pidfile if it has to recover innodb transactions
249 if [ "$MYSQL_STATUS" = "starting" ]; then
250 for nr in $(seq 1 $(($MYSQL_START_WAIT_TIME*10))); do
251 [ -f "$MYSQL_PIDFILE" ] && break
252 sleep 0.1
253 done
254 fi
255
256 mysqlstatus "$clusterdir" start
6d3c5db5 257 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
aac2c31f 258 ok
47fd5a6a 259 elif [ "$MYSQL_STATUS" = "died" ]; then
350d9d8c 260 RETVAL=1
47fd5a6a 261 died
aac2c31f
AM
262 else
263 RETVAL=1
264 fail
53a28f77 265 fi
aac2c31f
AM
266}
267
268# stop mysql
269mysqlstop() {
270 clusterdir="$1"
b101533e 271 mysqlstatus "$clusterdir" stop
aac2c31f
AM
272 msg_stopping "MySQL $clusterdir"
273 busy
95b0575d 274
95b0575d 275 # try graceful shutdown -- send shutdown command
f07ac4b4 276 # requires mysql_logrotate user proper privs
465c110e 277 /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown >/dev/null 2>&1
b101533e 278 mysqlstatus "$clusterdir" stop
95b0575d 279
b101533e
AM
280 if [ "$MYSQL_PID" != "unknown" ]; then
281 kill -TERM "$MYSQL_PID" 2> /dev/null
282 for nr in $(seq 1 $(($MYSQL_STOP_WAIT_TIME*10))); do
283 [ -d "/proc/$MYSQL_PID" ] || break
284 sleep 0.1
285 done
286 fi
287
288 mysqlstatus "$clusterdir" stop
47fd5a6a 289 if [ "$MYSQL_STATUS" = "died" ]; then
350d9d8c 290 died
b101533e 291 elif [ "$MYSQL_STATUS" = "running" -o "$MYSQL_STATUS" = "starting" ]; then
aac2c31f 292 fail
b92e5cd1 293 else
aac2c31f 294 ok
b92e5cd1 295 fi
aac2c31f
AM
296}
297
298#
299# check for running mysql instances; if any instance is running then
300# create subsys lock file
301#
302mysqlsubsys() {
350d9d8c
PG
303 # check for every defined db cluster in sysconfig file
304 for mysqldir in $DB_CLUSTERS; do
305 mysqlstatus "$mysqldir"
306 if [ "$MYSQL_STATUS" = "running" ]; then
307 touch /var/lock/subsys/mysql
308 return
309 fi
310 done
311 rm -f /var/lock/subsys/mysql
aac2c31f
AM
312}
313
314mysqlinit() {
315 clusterdir="$1"
8ee1d59c
AM
316
317 if [ -f /etc/mysqld.conf ]; then
350d9d8c
PG
318 nls "Running in \`no cluster compat' mode: can't initialize database."
319 nls "Move /etc/mysqld.conf away and rerun \`$0 init' (new config will be in $clusterdir)."
320 exit 1
8ee1d59c
AM
321 fi
322
521444a9
AM
323 if [ -f "$clusterdir/mysqld.conf" ]; then
324 mysqlgetconfig "$clusterdir"
325 else
326 MYSQL_USER="mysql"
327 MYSQL_CLUSTER_DIR="$clusterdir"
328 MYSQL_DATA_DIR="$clusterdir/mysqldb/db"
329 MYSQL_PIDFILE="$clusterdir/mysqldb/mysql.pid"
330 MYSQL_SOCKET="$clusterdir/mysqldb/mysql.sock"
fe98cc4a
ER
331
332 # this $MYSQL_CONFIG will be created later
333 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
521444a9 334 fi
aac2c31f
AM
335
336 nls "Initializing cluster %s" "$clusterdir"
337
573e1dcc 338 # Check if not exist init database
e9ca44ab 339 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
c70c8930 340 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
b92e5cd1 341 nls "before initializing database."
aac2c31f
AM
342 nls "For now skipping cluster %s." "$clusterdir"
343 return
e9ca44ab 344 fi
345
aac2c31f 346 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
e9ca44ab 347 busy
d405c4eb
JB
348 TMP=/tmp TMPDIR=/tmp
349
ac28c610 350 # Install this in the user table, too
653cf157
AM
351 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
352 [ -z "$hostname" ] && hostname="localhost-unknown"
d405c4eb 353
e9ca44ab 354 # Check if hostname is valid
355 if [ -z "$hostname" ]; then
356 deltext
b92e5cd1 357 fail
358 nls "Sorry, the host name is not configured."
359 nls "Please configure the 'hostname' command to return a hostname."
360 exit 1
d405c4eb 361 elif ! hostname -i >/dev/null 2>&1; then
b92e5cd1 362 deltext
363 fail
364 nls "Sorry, the host '%s' could not be looked up." "$hostname"
365 nls "Please configure the 'hostname' command to return a correct hostname."
e9ca44ab 366 exit 1
e9ca44ab 367 fi
368
823c13f7 369 # Initialize variables
73b2386d
AM
370 c_d="" i_d="" c_ht="" c_tz=""
371 c_h="" i_h="" c_hc="" c_tzt=""
372 c_u="" i_u="" c_hk="" c_tztt=""
373 c_f="" i_f="" c_hr="" c_tzls=""
374 c_t="" c_c="" c_tzn=""
02e96f2e 375
823c13f7 376 # Check for old tables
653cf157 377 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
823c13f7
SZ
378 then
379 # mysqld --bootstrap wants one command/line
380 c_d="$c_d CREATE TABLE db ("
381 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
382 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
383 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
384 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
95e4baaf
AM
394 c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
395 c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
823c13f7
SZ
396 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
397 c_d="$c_d KEY User (User)"
398 c_d="$c_d )"
62edb21b 399 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7 400 c_d="$c_d comment='Database privileges';"
02e96f2e 401
95e4baaf
AM
402 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
403 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
d405c4eb 404
823c13f7 405 fi
02e96f2e 406
653cf157 407 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
823c13f7
SZ
408 then
409 c_h="$c_h CREATE TABLE host ("
410 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
411 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
412 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
413 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
414 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
415 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
416 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
417 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
418 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
419 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
420 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
421 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
95e4baaf
AM
422 c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
423 c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
823c13f7
SZ
424 c_h="$c_h PRIMARY KEY Host (Host,Db)"
425 c_h="$c_h )"
62edb21b 426 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7
SZ
427 c_h="$c_h comment='Host privileges; Merged with database privileges';"
428 fi
02e96f2e 429
653cf157 430 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
823c13f7
SZ
431 then
432 c_u="$c_u CREATE TABLE user ("
433 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
434 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
62edb21b 435 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
823c13f7
SZ
436 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
437 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
438 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
439 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
440 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
441 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
442 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
443 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
444 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
445 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
446 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
447 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
448 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
449 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
95e4baaf
AM
450 c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
451 c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
452 c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
453 c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
454 c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
455 c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
456 c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
457 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
458 c_u="$c_u ssl_cipher BLOB NOT NULL,"
459 c_u="$c_u x509_issuer BLOB NOT NULL,"
460 c_u="$c_u x509_subject BLOB NOT NULL,"
461 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
462 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
463 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
823c13f7
SZ
464 c_u="$c_u PRIMARY KEY Host (Host,User)"
465 c_u="$c_u )"
62edb21b 466 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
823c13f7 467 c_u="$c_u comment='Users and global privileges';"
02e96f2e 468
95e4baaf
AM
469 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);
470 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);
471
472 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);
473 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);
474
475 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 476 fi
02e96f2e 477
653cf157 478 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
823c13f7
SZ
479 then
480 c_f="$c_f CREATE TABLE func ("
481 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
482 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
483 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
484 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
485 c_f="$c_f PRIMARY KEY (name)"
486 c_f="$c_f )"
62edb21b 487 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
73b2386d 488 c_f="$c_f comment='User defined functions';"
823c13f7 489 fi
02e96f2e 490
653cf157 491 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
823c13f7
SZ
492 then
493 c_t="$c_t CREATE TABLE tables_priv ("
494 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
495 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
496 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
497 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
498 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
499 c_t="$c_t Timestamp timestamp(14),"
500 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
501 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
502 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
503 c_t="$c_t KEY Grantor (Grantor)"
504 c_t="$c_t )"
62edb21b 505 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
73b2386d 506 c_t="$c_t comment='Table privileges';"
823c13f7 507 fi
02e96f2e 508
653cf157 509 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
823c13f7
SZ
510 then
511 c_c="$c_c CREATE TABLE columns_priv ("
512 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
62edb21b 513 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
823c13f7 514 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
62edb21b
AM
515 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
516 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
823c13f7
SZ
517 c_c="$c_c Timestamp timestamp(14),"
518 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
519 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
520 c_c="$c_c )"
62edb21b 521 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
73b2386d
AM
522 c_c="$c_c comment='Column privileges';"
523 fi
524
525 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
526 then
527 c_ht="$c_ht CREATE TABLE help_topic ("
528 c_ht="$c_ht help_topic_id int unsigned not null,"
529 c_ht="$c_ht name varchar(64) not null,"
530 c_ht="$c_ht help_category_id smallint unsigned not null,"
531 c_ht="$c_ht description text not null,"
532 c_ht="$c_ht example text not null,"
533 c_ht="$c_ht url varchar(128) not null,"
534 c_ht="$c_ht primary key (help_topic_id),"
535 c_ht="$c_ht unique index (name)"
536 c_ht="$c_ht )"
537 c_ht="$c_ht CHARACTER SET utf8"
538 c_ht="$c_ht comment='help topics';"
539 fi
540
541 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
542 then
543 c_hc="$c_hc CREATE TABLE help_category ("
544 c_hc="$c_hc help_category_id smallint unsigned not null,"
545 c_hc="$c_hc name varchar(64) not null,"
546 c_hc="$c_hc parent_category_id smallint unsigned null,"
547 c_hc="$c_hc url varchar(128) not null,"
548 c_hc="$c_hc primary key (help_category_id),"
549 c_hc="$c_hc unique index (name)"
550 c_hc="$c_hc )"
551 c_hc="$c_hc CHARACTER SET utf8"
552 c_hc="$c_hc comment='help categories';"
553 fi
554
555 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
556 then
557 c_hk="$c_hk CREATE TABLE help_keyword ("
558 c_hk="$c_hk help_keyword_id int unsigned not null,"
559 c_hk="$c_hk name varchar(64) not null,"
560 c_hk="$c_hk primary key (help_keyword_id),"
561 c_hk="$c_hk unique index (name)"
562 c_hk="$c_hk )"
563 c_hk="$c_hk CHARACTER SET utf8"
564 c_hk="$c_hk comment='help keywords';"
565 fi
566
567 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
568 then
569 c_hr="$c_hr CREATE TABLE help_relation ("
570 c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
571 c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
572 c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
573 c_hr="$c_hr )"
574 c_hr="$c_hr CHARACTER SET utf8"
575 c_hr="$c_hr comment='keyword-topic relation';"
576 fi
577
578 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
579 then
580 c_tzn="$c_tzn CREATE TABLE time_zone_name ("
581 c_tzn="$c_tzn Name char(64) NOT NULL,"
582 c_tzn="$c_tzn Time_zone_id int unsigned NOT NULL,"
583 c_tzn="$c_tzn PRIMARY KEY Name (Name)"
584 c_tzn="$c_tzn )"
585 c_tzn="$c_tzn CHARACTER SET utf8"
586 c_tzn="$c_tzn comment='Time zone names';"
587 fi
588
589 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
590 then
591 c_tz="$c_tz CREATE TABLE time_zone ("
592 c_tz="$c_tz Time_zone_id int unsigned NOT NULL auto_increment,"
593 c_tz="$c_tz Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
594 c_tz="$c_tz PRIMARY KEY TzId (Time_zone_id)"
595 c_tz="$c_tz )"
596 c_tz="$c_tz CHARACTER SET utf8"
597 c_tz="$c_tz comment='Time zones';"
598 fi
599
600 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
601 then
602 c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
603 c_tzt="$c_tzt Time_zone_id int unsigned NOT NULL,"
604 c_tzt="$c_tzt Transition_time bigint signed NOT NULL,"
605 c_tzt="$c_tzt Transition_type_id int unsigned NOT NULL,"
606 c_tzt="$c_tzt PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
607 c_tzt="$c_tzt )"
608 c_tzt="$c_tzt CHARACTER SET utf8"
609 c_tzt="$c_tzt comment='Time zone transitions';"
610 fi
d405c4eb 611
73b2386d
AM
612 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
613 then
614 c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
615 c_tztt="$c_tztt Time_zone_id int unsigned NOT NULL,"
616 c_tztt="$c_tztt Transition_type_id int unsigned NOT NULL,"
617 c_tztt="$c_tztt Offset int signed DEFAULT 0 NOT NULL,"
618 c_tztt="$c_tztt Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
619 c_tztt="$c_tztt Abbreviation char(8) DEFAULT '' NOT NULL,"
620 c_tztt="$c_tztt PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
621 c_tztt="$c_tztt )"
622 c_tztt="$c_tztt CHARACTER SET utf8"
623 c_tztt="$c_tztt comment='Time zone transition types';"
624 fi
625
626 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
627 then
628 c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
629 c_tzls="$c_tzls Transition_time bigint signed NOT NULL,"
630 c_tzls="$c_tzls Correction int signed NOT NULL,"
631 c_tzls="$c_tzls PRIMARY KEY TranTime (Transition_time)"
632 c_tzls="$c_tzls )"
633 c_tzls="$c_tzls CHARACTER SET utf8"
634 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
823c13f7
SZ
635 fi
636
828919d9 637 mkdir -p "$MYSQL_DATA_DIR"
f5d63301
AM
638 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
639 chown root:root "$MYSQL_CLUSTER_DIR"
640 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
653cf157 641 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
444f9f3c
AM
642
643 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
828919d9
ER
644 sed -e "
645 s#\(datadir.*\)=.*#\1= $MYSQL_DATA_DIR#g;
646 s#\(pid-file.*\)=.*#\1= $MYSQL_PIDFILE#g;
647 s#\(socket.*\)=.*#\1= $MYSQL_SOCKET#g;
648 s#@clusterdir@#$MYSQL_CLUSTER_DIR#g;
649 " /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
54a1f368 650 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
444f9f3c
AM
651 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
652 fi
cc4d3f78 653
598e07e1 654 if [ ! -e /var/lib/mysql/mysql.sock ] || [ -L /var/lib/mysql/mysql.sock ] && [ -z "$(readlink /var/lib/mysql/mysql.sock)" ]; then
828919d9 655 sock=${MYSQL_SOCKET#/var/lib/mysql/} # make it relative if possible
85de2498 656 ln -s "$sock" /var/lib/mysql/mysql.sock
cc4d3f78 657 fi
aac2c31f 658
e9ca44ab 659 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
823c13f7
SZ
660 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
661CREATE DATABASE mysql;
e9ca44ab 662use mysql;
823c13f7
SZ
663$c_d
664$i_d
665
666$c_h
667$i_h
e9ca44ab 668
823c13f7
SZ
669$c_u
670$i_u
671
672$c_f
673$i_f
674
675$c_t
676$c_c
73b2386d
AM
677
678$c_ht
679$c_hc
680$c_hk
681$c_hr
682
683$c_tzn
684$c_tz
685$c_tzt
686$c_tztt
687$c_tzls
823c13f7 688END_OF_DATA
d405c4eb 689 then
e9ca44ab 690 ok
aac2c31f 691 cat << END_OF_MSG
6a46c354 692
693PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
85de2498 694This is done (after starting database; press enter when asked for password) with:
6a46c354 695
85de2498
ER
696/usr/bin/mysqladmin -u mysql -p -S $MYSQL_SOCKET password 'password'
697/usr/bin/mysqladmin -h $hostname -u mysql -p -S $MYSQL_SOCKET password 'password'
698/usr/bin/mysqladmin -u mysql_logrotate -p -S $MYSQL_SOCKET password 'password'
6a46c354 699
aac2c31f 700NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
6a46c354 701mysqladmin section. See the manual for more instructions.
e9ca44ab 702
703END_OF_MSG
d405c4eb 704 else
e9ca44ab 705 fail
706 cat << END_OF_MSG
707Installation of grant tables FAILED!
708
709Examine the logs in $MYSQL_DATA_DIR for more information. You can
710also try to start the mysqld demon with:
711
712/usr/sbin/mysqld --skip-grant &
713
714You can use the command line tool /usr/bin/mysql to connect to the mysql
715database and look at the grant tables:
716
717shell> /usr/bin/mysql -u mysql mysql
718mysql> show tables
719
720Try 'mysqld --help' if you have problems with paths. Setting on
721logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
722may be helpful. The latest information about MySQL is available on the
78b16243 723web at http://www.mysql.com/.
e9ca44ab 724
a3eb9e7b 725Please check PLD Linux ftp site for newer versions of this package.
e9ca44ab 726
727Please consult the MySQL manual section: 'Problems running
728mysql_install_db', and the manual section that describes problems on
729your OS. Another information source is the MySQL email archive.
730Please check all of the above before mailing us! And if you do mail
d405c4eb 731us, you MUST use the /usr/bin/mysqlbug script!
e9ca44ab 732
733END_OF_MSG
734
aac2c31f
AM
735 exit 1
736 fi
737}
738
739#
740# End of useful functions.
741#
742
828919d9 743start() {
aac2c31f
AM
744 if [ ! -f $MYSQL_ERRLOG ]; then
745 touch $MYSQL_ERRLOG
823c13f7 746 fi
54a1f368 747 chown mysql:mysql $MYSQL_ERRLOG
aac2c31f
AM
748 chmod 640 $MYSQL_ERRLOG
749
750 for mysqldir in $DB_CLUSTERS; do
b101533e 751 mysqlstatus "$mysqldir" start
aac2c31f
AM
752 if [ "$MYSQL_STATUS" = "running" ]; then
753 msg_already_running "MySQL $mysqldir"
754 else
755 mysqlstart "$mysqldir"
756 fi
757 done
758 mysqlsubsys
828919d9
ER
759}
760
761stop() {
aac2c31f 762 for mysqldir in $DB_CLUSTERS; do
b101533e 763 mysqlstatus "$mysqldir" stop
aac2c31f
AM
764 if [ "$MYSQL_STATUS" = "not running" ]; then
765 msg_not_running "MySQL $mysqldir"
766 else
767 mysqlstop "$mysqldir"
768 fi
769 done
770 mysqlsubsys
828919d9
ER
771}
772
773RETVAL=0
774case "$action" in
775 start)
776 start
777 ;;
778 stop)
779 stop
aac2c31f
AM
780 ;;
781 status)
782 for mysqldir in $DB_CLUSTERS; do
783 mysqlstatus "$mysqldir"
b101533e 784 if [ "$MYSQL_STATUS" = "running" ]; then
85de2498 785 show "MySQL cluster %s, PID %s" "$mysqldir" "$MYSQL_PID"
b101533e
AM
786 progress "$MYSQL_STATUS"
787 else
85de2498 788 show "MySQL cluster %s" "$mysqldir"
b101533e
AM
789 progress "$MYSQL_STATUS" "$CFAIL"
790 fi
791 echo
aac2c31f
AM
792 done
793 exit $?
794 ;;
795 restart|force-reload)
828919d9
ER
796 stop
797 start
aac2c31f
AM
798 ;;
799 init)
800 for mysqldir in $DB_CLUSTERS; do
801 mysqlinit "$mysqldir"
802 done
60bd204c 803 exit $?
573e1dcc 804 ;;
6fb7a89b
AM
805 flush-logs)
806 for mysqldir in $DB_CLUSTERS; do
807 mysqlgetconfig "$mysqldir"
7c37979d
ER
808 # just if mysqld is really running
809 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
810 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
811 fi
6fb7a89b 812 done
6fb7a89b 813 ;;
53a28f77 814 *)
02e96f2e 815 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
816 exit 3
53a28f77 817esac
40c36bca 818
ee9b6a50 819exit $RETVAL
350d9d8c
PG
820
821# vi: shiftwidth=4 tabstop=4
This page took 0.158392 seconds and 4 git commands to generate.