]> git.pld-linux.org Git - packages/mysql.git/blame_incremental - mysql.init
- removed obsolete nptl patch
[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# 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 >/dev/null 2>&1
225 mysqlstatus "$clusterdir"
226
227 [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
228 # 3 seconds
229 for nr in 1 2 3; do
230 [ -d "/proc/$MYSQL_PID" ] && sleep 1
231 done
232 mysqlstatus "$clusterdir"
233 if [ "$MYSQL_STATUS" = "died" ]; then
234 died
235 elif [ "$MYSQL_STATUS" = "running" ]; then
236 fail
237 else
238 ok
239 fi
240
241 # FIXME: should let mysqld remove pid by itself?
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() {
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
259}
260
261mysqlinit() {
262 clusterdir="$1"
263
264 if [ -f /etc/mysqld.conf ]; then
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
268 fi
269
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
279 # this $MYSQL_CONFIG will be created later
280 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
281 fi
282
283 nls "Initializing cluster %s" "$clusterdir"
284
285 # Check if not exist init database
286 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
287 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
288 nls "before initializing database."
289 nls "For now skipping cluster %s." "$clusterdir"
290 return
291 fi
292
293 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
294 busy
295 TMP=/tmp TMPDIR=/tmp
296
297
298 # Install this in the user table, too
299 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
300 [ -z "$hostname" ] && hostname="localhost-unknown"
301
302 # Check if hostname is valid
303 if [ -z "$hostname" ]; then
304 deltext
305 fail
306 nls "Sorry, the host name is not configured."
307 nls "Please configure the 'hostname' command to return a hostname."
308 exit 1
309 elif ! hostname -i >/dev/null 2>&1; then
310 deltext
311 fail
312 nls "Sorry, the host '%s' could not be looked up." "$hostname"
313 nls "Please configure the 'hostname' command to return a correct hostname."
314 exit 1
315 fi
316
317 # Initialize variables
318 c_d="" i_d="" c_ht="" c_tz=""
319 c_h="" i_h="" c_hc="" c_tzt=""
320 c_u="" i_u="" c_hk="" c_tztt=""
321 c_f="" i_f="" c_hr="" c_tzls=""
322 c_t="" c_c="" c_tzn=""
323
324 # Check for old tables
325 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
326 then
327 # mysqld --bootstrap wants one command/line
328 c_d="$c_d CREATE TABLE db ("
329 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
330 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
331 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
332 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
333 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
334 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
335 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
336 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
337 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
338 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
339 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
340 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
341 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
342 c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
343 c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
344 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
345 c_d="$c_d KEY User (User)"
346 c_d="$c_d )"
347 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
348 c_d="$c_d comment='Database privileges';"
349
350 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
351 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
352
353 fi
354
355 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
356 then
357 c_h="$c_h CREATE TABLE host ("
358 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
359 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
360 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
361 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
362 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
363 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
367 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
369 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
370 c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
371 c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
372 c_h="$c_h PRIMARY KEY Host (Host,Db)"
373 c_h="$c_h )"
374 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
375 c_h="$c_h comment='Host privileges; Merged with database privileges';"
376 fi
377
378 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
379 then
380 c_u="$c_u CREATE TABLE user ("
381 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
382 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
383 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
384 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
394 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
395 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
396 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
397 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
398 c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
399 c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
400 c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
401 c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
402 c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
403 c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
404 c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
405 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
406 c_u="$c_u ssl_cipher BLOB NOT NULL,"
407 c_u="$c_u x509_issuer BLOB NOT NULL,"
408 c_u="$c_u x509_subject BLOB NOT NULL,"
409 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
410 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
411 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
412 c_u="$c_u PRIMARY KEY Host (Host,User)"
413 c_u="$c_u )"
414 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
415 c_u="$c_u comment='Users and global privileges';"
416
417 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);
418 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);
419
420 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);
421 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);
422
423 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);"
424 fi
425
426 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
427 then
428 c_f="$c_f CREATE TABLE func ("
429 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
430 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
431 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
432 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
433 c_f="$c_f PRIMARY KEY (name)"
434 c_f="$c_f )"
435 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
436 c_f="$c_f comment='User defined functions';"
437 fi
438
439 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
440 then
441 c_t="$c_t CREATE TABLE tables_priv ("
442 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
443 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
444 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
445 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
446 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
447 c_t="$c_t Timestamp timestamp(14),"
448 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
449 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
450 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
451 c_t="$c_t KEY Grantor (Grantor)"
452 c_t="$c_t )"
453 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
454 c_t="$c_t comment='Table privileges';"
455 fi
456
457 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
458 then
459 c_c="$c_c CREATE TABLE columns_priv ("
460 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
461 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
462 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
463 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
464 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
465 c_c="$c_c Timestamp timestamp(14),"
466 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
467 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
468 c_c="$c_c )"
469 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
470 c_c="$c_c comment='Column privileges';"
471 fi
472
473 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
474 then
475 c_ht="$c_ht CREATE TABLE help_topic ("
476 c_ht="$c_ht help_topic_id int unsigned not null,"
477 c_ht="$c_ht name varchar(64) not null,"
478 c_ht="$c_ht help_category_id smallint unsigned not null,"
479 c_ht="$c_ht description text not null,"
480 c_ht="$c_ht example text not null,"
481 c_ht="$c_ht url varchar(128) not null,"
482 c_ht="$c_ht primary key (help_topic_id),"
483 c_ht="$c_ht unique index (name)"
484 c_ht="$c_ht )"
485 c_ht="$c_ht CHARACTER SET utf8"
486 c_ht="$c_ht comment='help topics';"
487 fi
488
489 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
490 then
491 c_hc="$c_hc CREATE TABLE help_category ("
492 c_hc="$c_hc help_category_id smallint unsigned not null,"
493 c_hc="$c_hc name varchar(64) not null,"
494 c_hc="$c_hc parent_category_id smallint unsigned null,"
495 c_hc="$c_hc url varchar(128) not null,"
496 c_hc="$c_hc primary key (help_category_id),"
497 c_hc="$c_hc unique index (name)"
498 c_hc="$c_hc )"
499 c_hc="$c_hc CHARACTER SET utf8"
500 c_hc="$c_hc comment='help categories';"
501 fi
502
503 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
504 then
505 c_hk="$c_hk CREATE TABLE help_keyword ("
506 c_hk="$c_hk help_keyword_id int unsigned not null,"
507 c_hk="$c_hk name varchar(64) not null,"
508 c_hk="$c_hk primary key (help_keyword_id),"
509 c_hk="$c_hk unique index (name)"
510 c_hk="$c_hk )"
511 c_hk="$c_hk CHARACTER SET utf8"
512 c_hk="$c_hk comment='help keywords';"
513 fi
514
515 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
516 then
517 c_hr="$c_hr CREATE TABLE help_relation ("
518 c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
519 c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
520 c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
521 c_hr="$c_hr )"
522 c_hr="$c_hr CHARACTER SET utf8"
523 c_hr="$c_hr comment='keyword-topic relation';"
524 fi
525
526 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
527 then
528 c_tzn="$c_tzn CREATE TABLE time_zone_name ("
529 c_tzn="$c_tzn Name char(64) NOT NULL,"
530 c_tzn="$c_tzn Time_zone_id int unsigned NOT NULL,"
531 c_tzn="$c_tzn PRIMARY KEY Name (Name)"
532 c_tzn="$c_tzn )"
533 c_tzn="$c_tzn CHARACTER SET utf8"
534 c_tzn="$c_tzn comment='Time zone names';"
535 fi
536
537 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
538 then
539 c_tz="$c_tz CREATE TABLE time_zone ("
540 c_tz="$c_tz Time_zone_id int unsigned NOT NULL auto_increment,"
541 c_tz="$c_tz Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
542 c_tz="$c_tz PRIMARY KEY TzId (Time_zone_id)"
543 c_tz="$c_tz )"
544 c_tz="$c_tz CHARACTER SET utf8"
545 c_tz="$c_tz comment='Time zones';"
546 fi
547
548 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
549 then
550 c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
551 c_tzt="$c_tzt Time_zone_id int unsigned NOT NULL,"
552 c_tzt="$c_tzt Transition_time bigint signed NOT NULL,"
553 c_tzt="$c_tzt Transition_type_id int unsigned NOT NULL,"
554 c_tzt="$c_tzt PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
555 c_tzt="$c_tzt )"
556 c_tzt="$c_tzt CHARACTER SET utf8"
557 c_tzt="$c_tzt comment='Time zone transitions';"
558 fi
559
560 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
561 then
562 c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
563 c_tztt="$c_tztt Time_zone_id int unsigned NOT NULL,"
564 c_tztt="$c_tztt Transition_type_id int unsigned NOT NULL,"
565 c_tztt="$c_tztt Offset int signed DEFAULT 0 NOT NULL,"
566 c_tztt="$c_tztt Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
567 c_tztt="$c_tztt Abbreviation char(8) DEFAULT '' NOT NULL,"
568 c_tztt="$c_tztt PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
569 c_tztt="$c_tztt )"
570 c_tztt="$c_tztt CHARACTER SET utf8"
571 c_tztt="$c_tztt comment='Time zone transition types';"
572 fi
573
574 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
575 then
576 c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
577 c_tzls="$c_tzls Transition_time bigint signed NOT NULL,"
578 c_tzls="$c_tzls Correction int signed NOT NULL,"
579 c_tzls="$c_tzls PRIMARY KEY TranTime (Transition_time)"
580 c_tzls="$c_tzls )"
581 c_tzls="$c_tzls CHARACTER SET utf8"
582 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
583 fi
584
585 mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
586 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
587 chown root:root "$MYSQL_CLUSTER_DIR"
588 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
589 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
590
591 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
592 sed -e "s#datadir.*=.*#datadir = $MYSQL_DATA_DIR#g" \
593 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
594 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
595 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
596 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
597 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
598 fi
599
600 if [ ! -e /var/lib/mysql/mysql.sock ]; then
601 ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
602 fi
603
604 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
605 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
606CREATE DATABASE mysql;
607use mysql;
608$c_d
609$i_d
610
611$c_h
612$i_h
613
614$c_u
615$i_u
616
617$c_f
618$i_f
619
620$c_t
621$c_c
622
623$c_ht
624$c_hc
625$c_hk
626$c_hr
627
628$c_tzn
629$c_tz
630$c_tzt
631$c_tztt
632$c_tzls
633END_OF_DATA
634 then
635 ok
636 cat << END_OF_MSG
637
638PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
639This is done (after starting database) with:
640
641/usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
642/usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
643/usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
644
645NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
646mysqladmin section. See the manual for more instructions.
647
648END_OF_MSG
649 else
650 fail
651 cat << END_OF_MSG
652Installation of grant tables FAILED!
653
654Examine the logs in $MYSQL_DATA_DIR for more information. You can
655also try to start the mysqld demon with:
656
657/usr/sbin/mysqld --skip-grant &
658
659You can use the command line tool /usr/bin/mysql to connect to the mysql
660database and look at the grant tables:
661
662shell> /usr/bin/mysql -u mysql mysql
663mysql> show tables
664
665Try 'mysqld --help' if you have problems with paths. Setting on
666logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
667may be helpful. The latest information about MySQL is available on the
668web at http://www.mysql.com/.
669
670Please check PLD Linux ftp site for newer versions of this package.
671
672Please consult the MySQL manual section: 'Problems running
673mysql_install_db', and the manual section that describes problems on
674your OS. Another information source is the MySQL email archive.
675Please check all of the above before mailing us! And if you do mail
676us, you MUST use the /usr/bin/mysqlbug script!
677
678END_OF_MSG
679
680 exit 1
681 fi
682}
683
684#
685# End of useful functions.
686#
687
688RETVAL=0
689case "$action" in
690 start)
691 if [ ! -f $MYSQL_ERRLOG ]; then
692 touch $MYSQL_ERRLOG
693 fi
694 chown mysql:mysql $MYSQL_ERRLOG
695 chmod 640 $MYSQL_ERRLOG
696
697 for mysqldir in $DB_CLUSTERS; do
698 mysqlstatus "$mysqldir"
699 if [ "$MYSQL_STATUS" = "running" ]; then
700 msg_already_running "MySQL $mysqldir"
701 else
702 mysqlstart "$mysqldir"
703 fi
704 done
705 mysqlsubsys
706 ;;
707 stop)
708 for mysqldir in $DB_CLUSTERS; do
709 mysqlstatus "$mysqldir"
710 if [ "$MYSQL_STATUS" = "not running" ]; then
711 msg_not_running "MySQL $mysqldir"
712 else
713 mysqlstop "$mysqldir"
714 fi
715 done
716 mysqlsubsys
717 ;;
718 status)
719 status mysqld
720 for mysqldir in $DB_CLUSTERS; do
721 mysqlstatus "$mysqldir"
722 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
723 done
724 exit $?
725 ;;
726 restart|force-reload)
727 $0 stop $DB_CLUSTERS
728 $0 start $DB_CLUSTERS
729 exit $?
730 ;;
731 init)
732 for mysqldir in $DB_CLUSTERS; do
733 mysqlinit "$mysqldir"
734 done
735 exit $?
736 ;;
737 flush-logs)
738 for mysqldir in $DB_CLUSTERS; do
739 mysqlgetconfig "$mysqldir"
740 # just if mysqld is really running
741 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
742 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
743 fi
744 done
745 ;;
746 *)
747 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
748 exit 3
749esac
750
751exit $RETVAL
752
753# vi: shiftwidth=4 tabstop=4
This page took 0.065018 seconds and 4 git commands to generate.