]> git.pld-linux.org Git - packages/mysql.git/blame_incremental - mysql.init
- fix mysql 4.1.1 migration trigger where one has leading space in cluster definition
[packages/mysql.git] / mysql.init
... / ...
CommitLineData
1#!/bin/sh
2#
3# mysql A very fast and reliable SQL database engine
4#
5# chkconfig: 2345 84 25
6#
7# description: A very fast and reliable SQL database engine.
8#
9# Source function library
10. /etc/rc.d/init.d/functions
11
12# Get network config
13. /etc/sysconfig/network
14
15# Get service config
16if [ -f /etc/sysconfig/mysql ]; then
17 . /etc/sysconfig/mysql
18else
19 nls "Error: %s not found" /etc/sysconfig/mysql
20 nls "%s can't be run." MySQL
21 exit 1
22fi
23
24if [ -n "$MYSQL_DB_CLUSTERS" ]; then
25 nls "Warning: MYSQL_DB_CLUSTERS is set. It's obsolete. Use %s instead." /etc/mysql/clusters.conf
26fi
27
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
33
34else
35 nls "Warning: Missing clusters config file %s" /etc/mysql/clusters.conf
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
41fi
42
43
44# Check that networking is up
45if is_yes "${NETWORKING}"; then
46 if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
47 msg_network_down MySQL
48 exit 1
49 fi
50else
51 exit 0
52fi
53
54action="$1"
55
56# any db cluster as command line argument?
57if [ $# -gt 1 ]; then
58 shift
59 # perform action for specified clusters only
60 DB_CLUSTERS="$@"
61else
62 DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
63fi
64
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:
78# MYSQL_STATUS = running | not running | died
79# MYSQL_PID = pid of mysqld process
80#
81mysqlstatus() {
82 clusterdir="$1"
83 mysqlgetconfig "$clusterdir"
84
85 MYSQL_STATUS="not running"
86 MYSQL_PID="unknown"
87
88 [ -f "$MYSQL_PIDFILE" ] && MYSQL_PID=$(cat "$MYSQL_PIDFILE")
89
90 if [ ! -d "/proc/$MYSQL_PID" -a "$MYSQL_PID" != "unknown" ]; then
91 MYSQL_STATUS="died"
92 elif [ -d "/proc/$MYSQL_PID" ]; then
93 grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline && MYSQL_STATUS="running" || MYSQL_STATUS="not running"
94 fi
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"
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
108 MYSQL_RA_COMPAT=yes; export MYSQL_RA_COMPAT
109 config_file=/etc/mysqld.conf
110 else
111 # TODO: convert this piece of crap to awk
112 config=`grep -v "^#" /etc/mysql/clusters.conf | grep "${clusterdir}$" | cut -s -f 1 -d '='`
113 if echo "$config" | grep -q '^/'; then
114 config_file="$config"
115 elif [ -f "/etc/mysql/$config" ]; then
116 config_file=/etc/mysql/$config
117 else
118 config_file="$clusterdir/mysqld.conf"
119 fi
120 fi
121
122 MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
123
124 if [ -z "$config_file" ]; then
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
130
131 if [ ! -f "$config_file" ]; then
132 nls "Error: config file %s not found" "$config_file"
133 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
134 exit 6
135 fi
136
137 eval `awk '
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)
149 } else if ($1=="socket") {
150 printf("MYSQL_SOCKET=%s;", $3)
151 }
152}
153END {
154 print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
155}
156' $config_file`
157
158
159 if is_yes "$MYSQL_RA_COMPAT"; then
160 MYSQL_DATA_DIR_SUB=""
161 else
162 MYSQL_DATA_DIR_SUB="/mysqldb"
163 fi
164
165 if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
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
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
176
177 if [ -z $MYSQL_USER ]; then
178 echo "$(nls 'MySQL user not configured properly')"'!' >&2
179 nls "Edit %s and configure it." "$config_file" >&2
180 exit 6
181 fi
182}
183
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"
191 exit 6
192 fi
193
194 msg_starting "MySQL $clusterdir"
195 busy
196 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
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 &
198 sleep 2
199 mysqlstatus "$clusterdir"
200 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
201 ok
202 elif [ "$MYSQL_STATUS" = "died" ]; then
203 RETVAL=1
204 died
205 else
206 RETVAL=1
207 fail
208 fi
209}
210
211# stop mysql
212mysqlstop() {
213 clusterdir="$1"
214 mysqlstatus "$clusterdir"
215 msg_stopping "MySQL $clusterdir"
216 busy
217
218 # try graceful shutdown -- send shutdown command
219 # requires mysql_logrotate user proper privs
220 /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown >/dev/null 2>&1
221 mysqlstatus "$clusterdir"
222
223 [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
224 # 15 seconds
225 for nr in $(seq 1 15); do
226 [ -d "/proc/$MYSQL_PID" ] && sleep 1
227 done
228 mysqlstatus "$clusterdir"
229 if [ "$MYSQL_STATUS" = "died" ]; then
230 died
231 elif [ "$MYSQL_STATUS" = "running" ]; then
232 fail
233 else
234 ok
235 fi
236
237 # FIXME: should let mysqld remove pid by itself?
238 rm -f "$MYSQL_PIDFILE"
239}
240
241#
242# check for running mysql instances; if any instance is running then
243# create subsys lock file
244#
245mysqlsubsys() {
246 # check for every defined db cluster in sysconfig file
247 for mysqldir in $DB_CLUSTERS; do
248 mysqlstatus "$mysqldir"
249 if [ "$MYSQL_STATUS" = "running" ]; then
250 touch /var/lock/subsys/mysql
251 return
252 fi
253 done
254 rm -f /var/lock/subsys/mysql
255}
256
257mysqlinit() {
258 clusterdir="$1"
259
260 if [ -f /etc/mysqld.conf ]; then
261 nls "Running in \`no cluster compat' mode: can't initialize database."
262 nls "Move /etc/mysqld.conf away and rerun \`$0 init' (new config will be in $clusterdir)."
263 exit 1
264 fi
265
266 if [ -f "$clusterdir/mysqld.conf" ]; then
267 mysqlgetconfig "$clusterdir"
268 else
269 MYSQL_USER="mysql"
270 MYSQL_CLUSTER_DIR="$clusterdir"
271 MYSQL_DATA_DIR="$clusterdir/mysqldb/db"
272 MYSQL_PIDFILE="$clusterdir/mysqldb/mysql.pid"
273 MYSQL_SOCKET="$clusterdir/mysqldb/mysql.sock"
274
275 # this $MYSQL_CONFIG will be created later
276 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
277 fi
278
279 nls "Initializing cluster %s" "$clusterdir"
280
281 # Check if not exist init database
282 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
283 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
284 nls "before initializing database."
285 nls "For now skipping cluster %s." "$clusterdir"
286 return
287 fi
288
289 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
290 busy
291 TMP=/tmp TMPDIR=/tmp
292
293
294 # Install this in the user table, too
295 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
296 [ -z "$hostname" ] && hostname="localhost-unknown"
297
298 # Check if hostname is valid
299 if [ -z "$hostname" ]; then
300 deltext
301 fail
302 nls "Sorry, the host name is not configured."
303 nls "Please configure the 'hostname' command to return a hostname."
304 exit 1
305 elif ! hostname -i >/dev/null 2>&1; then
306 deltext
307 fail
308 nls "Sorry, the host '%s' could not be looked up." "$hostname"
309 nls "Please configure the 'hostname' command to return a correct hostname."
310 exit 1
311 fi
312
313 # Initialize variables
314 c_d="" i_d="" c_ht="" c_tz=""
315 c_h="" i_h="" c_hc="" c_tzt=""
316 c_u="" i_u="" c_hk="" c_tztt=""
317 c_f="" i_f="" c_hr="" c_tzls=""
318 c_t="" c_c="" c_tzn=""
319
320 # Check for old tables
321 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
322 then
323 # mysqld --bootstrap wants one command/line
324 c_d="$c_d CREATE TABLE db ("
325 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
326 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
327 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
328 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
329 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
330 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
331 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
332 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
333 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
334 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
335 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
336 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
337 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
338 c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
339 c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
340 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
341 c_d="$c_d KEY User (User)"
342 c_d="$c_d )"
343 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
344 c_d="$c_d comment='Database privileges';"
345
346 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
347 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
348
349 fi
350
351 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
352 then
353 c_h="$c_h CREATE TABLE host ("
354 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
355 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
356 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
357 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
358 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
359 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
360 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
361 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
362 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
363 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366 c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
367 c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368 c_h="$c_h PRIMARY KEY Host (Host,Db)"
369 c_h="$c_h )"
370 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
371 c_h="$c_h comment='Host privileges; Merged with database privileges';"
372 fi
373
374 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
375 then
376 c_u="$c_u CREATE TABLE user ("
377 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
378 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
379 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
380 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
381 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
382 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
383 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
384 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
394 c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
395 c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
396 c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
397 c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
398 c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
399 c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
400 c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
401 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
402 c_u="$c_u ssl_cipher BLOB NOT NULL,"
403 c_u="$c_u x509_issuer BLOB NOT NULL,"
404 c_u="$c_u x509_subject BLOB NOT NULL,"
405 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
406 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
407 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
408 c_u="$c_u PRIMARY KEY Host (Host,User)"
409 c_u="$c_u )"
410 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
411 c_u="$c_u comment='Users and global privileges';"
412
413 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);
414 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);
415
416 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);
417 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);
418
419 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);"
420 fi
421
422 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
423 then
424 c_f="$c_f CREATE TABLE func ("
425 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
426 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
427 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
428 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
429 c_f="$c_f PRIMARY KEY (name)"
430 c_f="$c_f )"
431 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
432 c_f="$c_f comment='User defined functions';"
433 fi
434
435 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
436 then
437 c_t="$c_t CREATE TABLE tables_priv ("
438 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
439 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
440 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
441 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
442 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
443 c_t="$c_t Timestamp timestamp(14),"
444 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
445 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
446 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
447 c_t="$c_t KEY Grantor (Grantor)"
448 c_t="$c_t )"
449 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
450 c_t="$c_t comment='Table privileges';"
451 fi
452
453 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
454 then
455 c_c="$c_c CREATE TABLE columns_priv ("
456 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
457 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
458 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
459 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
460 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
461 c_c="$c_c Timestamp timestamp(14),"
462 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
463 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
464 c_c="$c_c )"
465 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
466 c_c="$c_c comment='Column privileges';"
467 fi
468
469 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
470 then
471 c_ht="$c_ht CREATE TABLE help_topic ("
472 c_ht="$c_ht help_topic_id int unsigned not null,"
473 c_ht="$c_ht name varchar(64) not null,"
474 c_ht="$c_ht help_category_id smallint unsigned not null,"
475 c_ht="$c_ht description text not null,"
476 c_ht="$c_ht example text not null,"
477 c_ht="$c_ht url varchar(128) not null,"
478 c_ht="$c_ht primary key (help_topic_id),"
479 c_ht="$c_ht unique index (name)"
480 c_ht="$c_ht )"
481 c_ht="$c_ht CHARACTER SET utf8"
482 c_ht="$c_ht comment='help topics';"
483 fi
484
485 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
486 then
487 c_hc="$c_hc CREATE TABLE help_category ("
488 c_hc="$c_hc help_category_id smallint unsigned not null,"
489 c_hc="$c_hc name varchar(64) not null,"
490 c_hc="$c_hc parent_category_id smallint unsigned null,"
491 c_hc="$c_hc url varchar(128) not null,"
492 c_hc="$c_hc primary key (help_category_id),"
493 c_hc="$c_hc unique index (name)"
494 c_hc="$c_hc )"
495 c_hc="$c_hc CHARACTER SET utf8"
496 c_hc="$c_hc comment='help categories';"
497 fi
498
499 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
500 then
501 c_hk="$c_hk CREATE TABLE help_keyword ("
502 c_hk="$c_hk help_keyword_id int unsigned not null,"
503 c_hk="$c_hk name varchar(64) not null,"
504 c_hk="$c_hk primary key (help_keyword_id),"
505 c_hk="$c_hk unique index (name)"
506 c_hk="$c_hk )"
507 c_hk="$c_hk CHARACTER SET utf8"
508 c_hk="$c_hk comment='help keywords';"
509 fi
510
511 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
512 then
513 c_hr="$c_hr CREATE TABLE help_relation ("
514 c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
515 c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
516 c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
517 c_hr="$c_hr )"
518 c_hr="$c_hr CHARACTER SET utf8"
519 c_hr="$c_hr comment='keyword-topic relation';"
520 fi
521
522 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
523 then
524 c_tzn="$c_tzn CREATE TABLE time_zone_name ("
525 c_tzn="$c_tzn Name char(64) NOT NULL,"
526 c_tzn="$c_tzn Time_zone_id int unsigned NOT NULL,"
527 c_tzn="$c_tzn PRIMARY KEY Name (Name)"
528 c_tzn="$c_tzn )"
529 c_tzn="$c_tzn CHARACTER SET utf8"
530 c_tzn="$c_tzn comment='Time zone names';"
531 fi
532
533 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
534 then
535 c_tz="$c_tz CREATE TABLE time_zone ("
536 c_tz="$c_tz Time_zone_id int unsigned NOT NULL auto_increment,"
537 c_tz="$c_tz Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
538 c_tz="$c_tz PRIMARY KEY TzId (Time_zone_id)"
539 c_tz="$c_tz )"
540 c_tz="$c_tz CHARACTER SET utf8"
541 c_tz="$c_tz comment='Time zones';"
542 fi
543
544 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
545 then
546 c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
547 c_tzt="$c_tzt Time_zone_id int unsigned NOT NULL,"
548 c_tzt="$c_tzt Transition_time bigint signed NOT NULL,"
549 c_tzt="$c_tzt Transition_type_id int unsigned NOT NULL,"
550 c_tzt="$c_tzt PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
551 c_tzt="$c_tzt )"
552 c_tzt="$c_tzt CHARACTER SET utf8"
553 c_tzt="$c_tzt comment='Time zone transitions';"
554 fi
555
556 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
557 then
558 c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
559 c_tztt="$c_tztt Time_zone_id int unsigned NOT NULL,"
560 c_tztt="$c_tztt Transition_type_id int unsigned NOT NULL,"
561 c_tztt="$c_tztt Offset int signed DEFAULT 0 NOT NULL,"
562 c_tztt="$c_tztt Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
563 c_tztt="$c_tztt Abbreviation char(8) DEFAULT '' NOT NULL,"
564 c_tztt="$c_tztt PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
565 c_tztt="$c_tztt )"
566 c_tztt="$c_tztt CHARACTER SET utf8"
567 c_tztt="$c_tztt comment='Time zone transition types';"
568 fi
569
570 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
571 then
572 c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
573 c_tzls="$c_tzls Transition_time bigint signed NOT NULL,"
574 c_tzls="$c_tzls Correction int signed NOT NULL,"
575 c_tzls="$c_tzls PRIMARY KEY TranTime (Transition_time)"
576 c_tzls="$c_tzls )"
577 c_tzls="$c_tzls CHARACTER SET utf8"
578 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
579 fi
580
581 mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
582 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
583 chown root:root "$MYSQL_CLUSTER_DIR"
584 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
585 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
586
587 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
588 sed -e "s#datadir.*=.*#datadir = $MYSQL_DATA_DIR#g" \
589 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
590 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
591 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
592 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
593 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
594 fi
595
596 if [ ! -e /var/lib/mysql/mysql.sock ]; then
597 ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
598 fi
599
600 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
601 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
602CREATE DATABASE mysql;
603use mysql;
604$c_d
605$i_d
606
607$c_h
608$i_h
609
610$c_u
611$i_u
612
613$c_f
614$i_f
615
616$c_t
617$c_c
618
619$c_ht
620$c_hc
621$c_hk
622$c_hr
623
624$c_tzn
625$c_tz
626$c_tzt
627$c_tztt
628$c_tzls
629END_OF_DATA
630 then
631 ok
632 cat << END_OF_MSG
633
634PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
635This is done (after starting database) with:
636
637/usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
638/usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
639/usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
640
641NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
642mysqladmin section. See the manual for more instructions.
643
644END_OF_MSG
645 else
646 fail
647 cat << END_OF_MSG
648Installation of grant tables FAILED!
649
650Examine the logs in $MYSQL_DATA_DIR for more information. You can
651also try to start the mysqld demon with:
652
653/usr/sbin/mysqld --skip-grant &
654
655You can use the command line tool /usr/bin/mysql to connect to the mysql
656database and look at the grant tables:
657
658shell> /usr/bin/mysql -u mysql mysql
659mysql> show tables
660
661Try 'mysqld --help' if you have problems with paths. Setting on
662logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
663may be helpful. The latest information about MySQL is available on the
664web at http://www.mysql.com/.
665
666Please check PLD Linux ftp site for newer versions of this package.
667
668Please consult the MySQL manual section: 'Problems running
669mysql_install_db', and the manual section that describes problems on
670your OS. Another information source is the MySQL email archive.
671Please check all of the above before mailing us! And if you do mail
672us, you MUST use the /usr/bin/mysqlbug script!
673
674END_OF_MSG
675
676 exit 1
677 fi
678}
679
680#
681# End of useful functions.
682#
683
684RETVAL=0
685case "$action" in
686 start)
687 if [ ! -f $MYSQL_ERRLOG ]; then
688 touch $MYSQL_ERRLOG
689 fi
690 chown mysql:mysql $MYSQL_ERRLOG
691 chmod 640 $MYSQL_ERRLOG
692
693 for mysqldir in $DB_CLUSTERS; do
694 mysqlstatus "$mysqldir"
695 if [ "$MYSQL_STATUS" = "running" ]; then
696 msg_already_running "MySQL $mysqldir"
697 else
698 mysqlstart "$mysqldir"
699 fi
700 done
701 mysqlsubsys
702 ;;
703 stop)
704 for mysqldir in $DB_CLUSTERS; do
705 mysqlstatus "$mysqldir"
706 if [ "$MYSQL_STATUS" = "not running" ]; then
707 msg_not_running "MySQL $mysqldir"
708 else
709 mysqlstop "$mysqldir"
710 fi
711 done
712 mysqlsubsys
713 ;;
714 status)
715 status mysqld
716 for mysqldir in $DB_CLUSTERS; do
717 mysqlstatus "$mysqldir"
718 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
719 done
720 exit $?
721 ;;
722 restart|force-reload)
723 $0 stop $DB_CLUSTERS
724 $0 start $DB_CLUSTERS
725 exit $?
726 ;;
727 init)
728 for mysqldir in $DB_CLUSTERS; do
729 mysqlinit "$mysqldir"
730 done
731 exit $?
732 ;;
733 flush-logs)
734 for mysqldir in $DB_CLUSTERS; do
735 mysqlgetconfig "$mysqldir"
736 # just if mysqld is really running
737 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
738 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
739 fi
740 done
741 ;;
742 *)
743 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
744 exit 3
745esac
746
747exit $RETVAL
748
749# vi: shiftwidth=4 tabstop=4
This page took 0.032539 seconds and 4 git commands to generate.