3 # mysql A very fast and reliable SQL database engine
5 # chkconfig: 2345 84 25
7 # description: A very fast and reliable SQL database engine.
9 # Source function library
10 . /etc/rc.d/init.d/functions
13 . /etc/sysconfig/network
16 if [ -f /etc/sysconfig/mysql ]; then
17 . /etc/sysconfig/mysql
19 nls "Error: %s not found" /etc/sysconfig/mysql
20 nls "%s can't be run." MySQL
24 if [ -n "$MYSQL_DB_CLUSTERS" ]; then
25 nls "Warning: MYSQL_DB_CLUSTERS is set. It's obsolete. Use %s instead." /etc/mysql/clusters.conf
28 if [ -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."
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
44 # Check that networking is up
45 if 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
56 # any db cluster as command line argument?
59 # perform action for specified clusters only
62 DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
65 MYSQL_ERRLOG=/var/log/mysql/err
66 MYSQL_START_WAIT_TIME=${MYSQL_START_WAIT_TIME:-15}
67 MYSQL_STOP_WAIT_TIME=${MYSQL_STOP_WAIT_TIME:-900}
74 # check for mysql status
81 # MYSQL_STATUS = starting | running | not running | died
82 # MYSQL_PID = pid of mysqld process
88 mysqlgetconfig "$clusterdir"
90 MYSQL_STATUS="not running"
95 if [ -f "$MYSQL_PIDFILE" ]; then
96 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
99 if [ -n "$MYSQL_PIDFILE_PID" ]; then
100 MYSQL_PID=$MYSQL_PIDFILE_PID
101 if [ ! -d "/proc/$MYSQL_PID" ]; then
104 elif (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline); then
105 MYSQL_STATUS="running"
110 if [ "$mode" = "start" ]; then
111 MYSQL_GREP_PID=$(grep -lE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline | awk -F "/" '{ print $3; exit; }')
112 if [ -n "$MYSQL_GREP_PID" ]; then
113 MYSQL_PID=$MYSQL_GREP_PID
114 if (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline); then
115 if [ -f "$MYSQL_PIDFILE" ]; then
116 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
118 if [ -n "$MYSQL_PIDFILE_PID" ]; then
119 MYSQL_PID=$MYSQL_PIDFILE_PID
120 MYSQL_STATUS="running"
123 MYSQL_STATUS="starting"
130 # else default, "not running"
133 # get mysql configuration in variables
134 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
142 # emulate old behaviour if only one cluster specified
143 if [ "$clusterdir" = "$MYSQL_DB_CLUSTERS" -a "$clusterdir" = "/var/lib/mysql" -a -f /etc/mysqld.conf ]; then
144 MYSQL_RA_COMPAT=yes; export MYSQL_RA_COMPAT
145 config_file=/etc/mysqld.conf
147 # TODO: convert this piece of crap to awk
148 config=`grep -v "^#" /etc/mysql/clusters.conf | grep "${clusterdir}$" | cut -s -f 1 -d '='`
149 if echo "$config" | grep -q '^/'; then
150 config_file="$config"
151 elif [ -f "/etc/mysql/$config" ]; then
152 config_file=/etc/mysql/$config
154 config_file="$clusterdir/mysqld.conf"
158 MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
160 if [ -z "$config_file" ]; then
161 nls "Error: Can't find config file for %s cluster" "$clusterdir"
164 MYSQL_CONFIG="$config_file"; export MYSQL_CONFIG
167 if [ ! -f "$config_file" ]; then
168 nls "Error: config file %s not found" "$config_file"
169 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
174 /^[ \t]*\[.*\][ \t]*$/ {
176 section=substr($0,RSTART+1,RSTART+RLENGTH-3)
178 section=="mysqld" && $2~"=" {
180 printf("MYSQL_DATA_DIR=%s;", $3)
181 } else if ($1=="user") {
182 printf("MYSQL_USER=%s;", $3)
183 } else if ($1=="pid-file") {
184 printf("MYSQL_PIDFILE=%s;", $3)
185 } else if ($1=="socket") {
186 printf("MYSQL_SOCKET=%s;", $3)
190 print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
195 if is_yes "$MYSQL_RA_COMPAT"; then
196 MYSQL_DATA_DIR_SUB=""
198 MYSQL_DATA_DIR_SUB="/mysqldb"
201 if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
202 nls "Error: datadir specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/db"
203 nls " MySQL can't be run."
207 if [ -z "$MYSQL_PIDFILE" -o "$MYSQL_PIDFILE" != "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid" ]; then
208 nls "Error: pid-file specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid"
209 nls " MySQL can't be run."
213 if [ -z $MYSQL_USER ]; then
214 echo "$(nls 'MySQL user not configured properly')"'!' >&2
215 nls "Edit %s and configure it." "$config_file" >&2
223 mysqlgetconfig "$clusterdir"
224 if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
225 nls "MySQL cluster %s not initialized." "$clusterdir"
226 nls "Try \`%s init %s' before start." "$0" "$clusterdir"
230 msg_starting "MySQL $clusterdir"
232 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
233 rm -f "$MYSQL_PIDFILE"
234 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 &
236 mysqlstatus "$clusterdir" start
237 # it takes longer for mysqld to start and create pidfile if it has to recover innodb transactions
238 if [ "$MYSQL_STATUS" = "starting" ]; then
239 for nr in $(seq 1 $(($MYSQL_START_WAIT_TIME*10))); do
240 [ -f "$MYSQL_PIDFILE" ] && break
245 mysqlstatus "$clusterdir" start
246 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
248 elif [ "$MYSQL_STATUS" = "died" ]; then
260 mysqlstatus "$clusterdir" stop
261 msg_stopping "MySQL $clusterdir"
264 # try graceful shutdown -- send shutdown command
265 # requires mysql_logrotate user proper privs
266 /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown >/dev/null 2>&1
267 mysqlstatus "$clusterdir" stop
269 if [ "$MYSQL_PID" != "unknown" ]; then
270 kill -TERM "$MYSQL_PID" 2> /dev/null
271 for nr in $(seq 1 $(($MYSQL_STOP_WAIT_TIME*10))); do
272 [ -d "/proc/$MYSQL_PID" ] || break
277 mysqlstatus "$clusterdir" stop
278 if [ "$MYSQL_STATUS" = "died" ]; then
280 elif [ "$MYSQL_STATUS" = "running" -o "$MYSQL_STATUS" = "starting" ]; then
288 # check for running mysql instances; if any instance is running then
289 # create subsys lock file
292 # check for every defined db cluster in sysconfig file
293 for mysqldir in $DB_CLUSTERS; do
294 mysqlstatus "$mysqldir"
295 if [ "$MYSQL_STATUS" = "running" ]; then
296 touch /var/lock/subsys/mysql
300 rm -f /var/lock/subsys/mysql
306 if [ -f /etc/mysqld.conf ]; then
307 nls "Running in \`no cluster compat' mode: can't initialize database."
308 nls "Move /etc/mysqld.conf away and rerun \`$0 init' (new config will be in $clusterdir)."
312 if [ -f "$clusterdir/mysqld.conf" ]; then
313 mysqlgetconfig "$clusterdir"
316 MYSQL_CLUSTER_DIR="$clusterdir"
317 MYSQL_DATA_DIR="$clusterdir/mysqldb/db"
318 MYSQL_PIDFILE="$clusterdir/mysqldb/mysql.pid"
319 MYSQL_SOCKET="$clusterdir/mysqldb/mysql.sock"
321 # this $MYSQL_CONFIG will be created later
322 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
325 nls "Initializing cluster %s" "$clusterdir"
327 # Check if not exist init database
328 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
329 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
330 nls "before initializing database."
331 nls "For now skipping cluster %s." "$clusterdir"
335 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
340 # Install this in the user table, too
341 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
342 [ -z "$hostname" ] && hostname="localhost-unknown"
344 # Check if hostname is valid
345 if [ -z "$hostname" ]; then
348 nls "Sorry, the host name is not configured."
349 nls "Please configure the 'hostname' command to return a hostname."
351 elif ! hostname -i >/dev/null 2>&1; then
354 nls "Sorry, the host '%s' could not be looked up." "$hostname"
355 nls "Please configure the 'hostname' command to return a correct hostname."
359 # Initialize variables
360 c_d="" i_d="" c_ht="" c_tz=""
361 c_h="" i_h="" c_hc="" c_tzt=""
362 c_u="" i_u="" c_hk="" c_tztt=""
363 c_f="" i_f="" c_hr="" c_tzls=""
364 c_t="" c_c="" c_tzn=""
366 # Check for old tables
367 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
369 # mysqld --bootstrap wants one command/line
370 c_d="$c_d CREATE TABLE db ("
371 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
372 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
373 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
374 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
375 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
376 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
377 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
378 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
379 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
380 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
381 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
382 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
383 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
384 c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385 c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
387 c_d="$c_d KEY User (User)"
389 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
390 c_d="$c_d comment='Database privileges';"
392 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
393 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
397 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
399 c_h="$c_h CREATE TABLE host ("
400 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
401 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
402 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
403 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
404 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
405 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
406 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
407 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
408 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
409 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
410 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
411 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
412 c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
413 c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
414 c_h="$c_h PRIMARY KEY Host (Host,Db)"
416 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
417 c_h="$c_h comment='Host privileges; Merged with database privileges';"
420 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
422 c_u="$c_u CREATE TABLE user ("
423 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
424 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
425 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
426 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
427 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
428 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
429 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
430 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
431 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
432 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
433 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
434 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
435 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
436 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
437 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
438 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
439 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
440 c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
441 c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
442 c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
443 c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
444 c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
445 c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
446 c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
447 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
448 c_u="$c_u ssl_cipher BLOB NOT NULL,"
449 c_u="$c_u x509_issuer BLOB NOT NULL,"
450 c_u="$c_u x509_subject BLOB NOT NULL,"
451 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
452 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
453 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
454 c_u="$c_u PRIMARY KEY Host (Host,User)"
456 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
457 c_u="$c_u comment='Users and global privileges';"
459 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);
460 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);
462 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);
463 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);
465 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);"
468 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
470 c_f="$c_f CREATE TABLE func ("
471 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
472 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
473 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
474 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
475 c_f="$c_f PRIMARY KEY (name)"
477 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
478 c_f="$c_f comment='User defined functions';"
481 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
483 c_t="$c_t CREATE TABLE tables_priv ("
484 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
485 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
486 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
487 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
488 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
489 c_t="$c_t Timestamp timestamp(14),"
490 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
491 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
492 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
493 c_t="$c_t KEY Grantor (Grantor)"
495 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
496 c_t="$c_t comment='Table privileges';"
499 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
501 c_c="$c_c CREATE TABLE columns_priv ("
502 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
503 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
504 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
505 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
506 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
507 c_c="$c_c Timestamp timestamp(14),"
508 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
509 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
511 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
512 c_c="$c_c comment='Column privileges';"
515 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
517 c_ht="$c_ht CREATE TABLE help_topic ("
518 c_ht="$c_ht help_topic_id int unsigned not null,"
519 c_ht="$c_ht name varchar(64) not null,"
520 c_ht="$c_ht help_category_id smallint unsigned not null,"
521 c_ht="$c_ht description text not null,"
522 c_ht="$c_ht example text not null,"
523 c_ht="$c_ht url varchar(128) not null,"
524 c_ht="$c_ht primary key (help_topic_id),"
525 c_ht="$c_ht unique index (name)"
527 c_ht="$c_ht CHARACTER SET utf8"
528 c_ht="$c_ht comment='help topics';"
531 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
533 c_hc="$c_hc CREATE TABLE help_category ("
534 c_hc="$c_hc help_category_id smallint unsigned not null,"
535 c_hc="$c_hc name varchar(64) not null,"
536 c_hc="$c_hc parent_category_id smallint unsigned null,"
537 c_hc="$c_hc url varchar(128) not null,"
538 c_hc="$c_hc primary key (help_category_id),"
539 c_hc="$c_hc unique index (name)"
541 c_hc="$c_hc CHARACTER SET utf8"
542 c_hc="$c_hc comment='help categories';"
545 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
547 c_hk="$c_hk CREATE TABLE help_keyword ("
548 c_hk="$c_hk help_keyword_id int unsigned not null,"
549 c_hk="$c_hk name varchar(64) not null,"
550 c_hk="$c_hk primary key (help_keyword_id),"
551 c_hk="$c_hk unique index (name)"
553 c_hk="$c_hk CHARACTER SET utf8"
554 c_hk="$c_hk comment='help keywords';"
557 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
559 c_hr="$c_hr CREATE TABLE help_relation ("
560 c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
561 c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
562 c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
564 c_hr="$c_hr CHARACTER SET utf8"
565 c_hr="$c_hr comment='keyword-topic relation';"
568 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
570 c_tzn="$c_tzn CREATE TABLE time_zone_name ("
571 c_tzn="$c_tzn Name char(64) NOT NULL,"
572 c_tzn="$c_tzn Time_zone_id int unsigned NOT NULL,"
573 c_tzn="$c_tzn PRIMARY KEY Name (Name)"
575 c_tzn="$c_tzn CHARACTER SET utf8"
576 c_tzn="$c_tzn comment='Time zone names';"
579 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
581 c_tz="$c_tz CREATE TABLE time_zone ("
582 c_tz="$c_tz Time_zone_id int unsigned NOT NULL auto_increment,"
583 c_tz="$c_tz Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
584 c_tz="$c_tz PRIMARY KEY TzId (Time_zone_id)"
586 c_tz="$c_tz CHARACTER SET utf8"
587 c_tz="$c_tz comment='Time zones';"
590 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
592 c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
593 c_tzt="$c_tzt Time_zone_id int unsigned NOT NULL,"
594 c_tzt="$c_tzt Transition_time bigint signed NOT NULL,"
595 c_tzt="$c_tzt Transition_type_id int unsigned NOT NULL,"
596 c_tzt="$c_tzt PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
598 c_tzt="$c_tzt CHARACTER SET utf8"
599 c_tzt="$c_tzt comment='Time zone transitions';"
602 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
604 c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
605 c_tztt="$c_tztt Time_zone_id int unsigned NOT NULL,"
606 c_tztt="$c_tztt Transition_type_id int unsigned NOT NULL,"
607 c_tztt="$c_tztt Offset int signed DEFAULT 0 NOT NULL,"
608 c_tztt="$c_tztt Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
609 c_tztt="$c_tztt Abbreviation char(8) DEFAULT '' NOT NULL,"
610 c_tztt="$c_tztt PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
612 c_tztt="$c_tztt CHARACTER SET utf8"
613 c_tztt="$c_tztt comment='Time zone transition types';"
616 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
618 c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
619 c_tzls="$c_tzls Transition_time bigint signed NOT NULL,"
620 c_tzls="$c_tzls Correction int signed NOT NULL,"
621 c_tzls="$c_tzls PRIMARY KEY TranTime (Transition_time)"
623 c_tzls="$c_tzls CHARACTER SET utf8"
624 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
627 mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
628 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
629 chown root:root "$MYSQL_CLUSTER_DIR"
630 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
631 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
633 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
634 sed -e "s#datadir.*=.*#datadir = $MYSQL_DATA_DIR#g" \
635 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
636 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
637 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
638 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
639 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
642 if [ ! -e /var/lib/mysql/mysql.sock ]; then
643 ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
646 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
647 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
648 CREATE DATABASE mysql;
680 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
681 This is done (after starting database) with:
683 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
684 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
685 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
687 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
688 mysqladmin section. See the manual for more instructions.
694 Installation of grant tables FAILED!
696 Examine the logs in $MYSQL_DATA_DIR for more information. You can
697 also try to start the mysqld demon with:
699 /usr/sbin/mysqld --skip-grant &
701 You can use the command line tool /usr/bin/mysql to connect to the mysql
702 database and look at the grant tables:
704 shell> /usr/bin/mysql -u mysql mysql
707 Try 'mysqld --help' if you have problems with paths. Setting on
708 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
709 may be helpful. The latest information about MySQL is available on the
710 web at http://www.mysql.com/.
712 Please check PLD Linux ftp site for newer versions of this package.
714 Please consult the MySQL manual section: 'Problems running
715 mysql_install_db', and the manual section that describes problems on
716 your OS. Another information source is the MySQL email archive.
717 Please check all of the above before mailing us! And if you do mail
718 us, you MUST use the /usr/bin/mysqlbug script!
727 # End of useful functions.
733 if [ ! -f $MYSQL_ERRLOG ]; then
736 chown mysql:mysql $MYSQL_ERRLOG
737 chmod 640 $MYSQL_ERRLOG
739 for mysqldir in $DB_CLUSTERS; do
740 mysqlstatus "$mysqldir" start
741 if [ "$MYSQL_STATUS" = "running" ]; then
742 msg_already_running "MySQL $mysqldir"
744 mysqlstart "$mysqldir"
750 for mysqldir in $DB_CLUSTERS; do
751 mysqlstatus "$mysqldir" stop
752 if [ "$MYSQL_STATUS" = "not running" ]; then
753 msg_not_running "MySQL $mysqldir"
755 mysqlstop "$mysqldir"
762 for mysqldir in $DB_CLUSTERS; do
763 mysqlstatus "$mysqldir"
764 show "MySQL cluster %s" "$mysqldir"
765 if [ "$MYSQL_STATUS" = "running" ]; then
766 progress "$MYSQL_STATUS"
768 progress "$MYSQL_STATUS" "$CFAIL"
774 restart|force-reload)
776 $0 start $DB_CLUSTERS
780 for mysqldir in $DB_CLUSTERS; do
781 mysqlinit "$mysqldir"
786 for mysqldir in $DB_CLUSTERS; do
787 mysqlgetconfig "$mysqldir"
788 # just if mysqld is really running
789 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
790 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
795 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
801 # vi: shiftwidth=4 tabstop=4