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=$(awk -F= '!/^#/{print $2}' /etc/mysql/clusters.conf)
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
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)
65 echo >&2 "Cluster name '$a' did not match anything!"
68 if [ $(echo "$m" | wc -l) -gt 1 ]; then
69 echo >&2 "Cluster name '$a' ambiguous:" $m
72 a=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $2}' /etc/mysql/clusters.conf)
74 DB_CLUSTERS="$DB_CLUSTERS $a"
77 DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
80 MYSQL_ERRLOG=/var/log/mysql/err
81 MYSQL_START_WAIT_TIME=${MYSQL_START_WAIT_TIME:-15}
82 MYSQL_STOP_WAIT_TIME=${MYSQL_STOP_WAIT_TIME:-900}
89 # check for mysql status
96 # MYSQL_STATUS = starting | running | not running | died
97 # MYSQL_PID = pid of mysqld process
103 mysqlgetconfig "$clusterdir"
105 MYSQL_STATUS="not running"
110 if [ -f "$MYSQL_PIDFILE" ]; then
111 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
114 if [ -n "$MYSQL_PIDFILE_PID" ]; then
115 MYSQL_PID=$MYSQL_PIDFILE_PID
116 if [ ! -d "/proc/$MYSQL_PID" ]; then
119 elif (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null); then
120 MYSQL_STATUS="running"
125 if [ "$mode" = "start" ]; then
126 MYSQL_GREP_PID=$(grep -lE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline 2> /dev/null | awk -F "/" '{ print $3; exit; }')
127 if [ -n "$MYSQL_GREP_PID" ]; then
128 MYSQL_PID=$MYSQL_GREP_PID
129 if (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null); then
130 if [ -f "$MYSQL_PIDFILE" ]; then
131 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
133 if [ -n "$MYSQL_PIDFILE_PID" ]; then
134 MYSQL_PID=$MYSQL_PIDFILE_PID
135 MYSQL_STATUS="running"
138 MYSQL_STATUS="starting"
145 # else default, "not running"
148 # get mysql configuration in variables
149 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
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
160 config_file=/etc/mysqld.conf
162 config=$(awk -F= -vclusterdir="$clusterdir" '!/^#/{ if (clusterdir == $2) print $1}' /etc/mysql/clusters.conf)
163 if [[ $config = /* ]]; then
164 config_file="$config"
165 elif [ -f "/etc/mysql/$config" ]; then
166 config_file="/etc/mysql/$config"
168 config_file="$clusterdir/mysqld.conf"
172 MYSQL_CLUSTER_DIR="$clusterdir"
174 if [ -z "$config_file" ]; then
175 nls "Error: Can't find config file for %s cluster" "$clusterdir"
178 MYSQL_CONFIG="$config_file"
181 if [ ! -f "$config_file" ]; then
182 nls "Error: config file %s not found" "$config_file"
183 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
188 /^[ \t]*\[.*\][ \t]*$/ {
190 section=substr($0, RSTART + 1, RSTART + RLENGTH - 3)
192 section == "mysqld" && $2 ~ "=" {
193 if ($1 == "datadir") {
194 printf("MYSQL_DATA_DIR=%s;", $3)
195 } else if ($1 == "user") {
196 printf("MYSQL_USER=%s;", $3)
197 } else if ($1 == "pid-file") {
198 printf("MYSQL_PIDFILE=%s;", $3)
199 } else if ($1 == "socket") {
200 printf("MYSQL_SOCKET=%s;", $3)
206 if is_yes "$MYSQL_RA_COMPAT"; then
207 MYSQL_DATA_DIR_SUB=""
209 MYSQL_DATA_DIR_SUB="/mysqldb"
212 if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
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."
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."
224 if [ -z $MYSQL_USER ]; then
225 echo "$(nls 'MySQL user not configured properly')"'!' >&2
226 nls "Edit %s and configure it." "$config_file" >&2
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"
241 msg_starting "MySQL $clusterdir"
243 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
244 rm -f "$MYSQL_PIDFILE"
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 &
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
256 mysqlstatus "$clusterdir" start
257 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
259 elif [ "$MYSQL_STATUS" = "died" ]; then
271 mysqlstatus "$clusterdir" stop
272 msg_stopping "MySQL $clusterdir"
275 # try graceful shutdown -- send shutdown command
276 # requires mysql_logrotate user proper privs
277 /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown >/dev/null 2>&1
278 mysqlstatus "$clusterdir" stop
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
288 mysqlstatus "$clusterdir" stop
289 if [ "$MYSQL_STATUS" = "died" ]; then
291 elif [ "$MYSQL_STATUS" = "running" -o "$MYSQL_STATUS" = "starting" ]; then
299 # check for running mysql instances; if any instance is running then
300 # create subsys lock file
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
311 rm -f /var/lock/subsys/mysql
317 if [ -f /etc/mysqld.conf ]; then
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)."
323 if [ -f "$clusterdir/mysqld.conf" ]; then
324 mysqlgetconfig "$clusterdir"
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"
332 # this $MYSQL_CONFIG will be created later
333 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
336 nls "Initializing cluster %s" "$clusterdir"
338 # Check if not exist init database
339 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
340 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
341 nls "before initializing database."
342 nls "For now skipping cluster %s." "$clusterdir"
346 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
350 # Install this in the user table, too
351 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
352 [ -z "$hostname" ] && hostname="localhost-unknown"
354 # Check if hostname is valid
355 if [ -z "$hostname" ]; then
358 nls "Sorry, the host name is not configured."
359 nls "Please configure the 'hostname' command to return a hostname."
361 elif ! hostname -i >/dev/null 2>&1; then
364 nls "Sorry, the host '%s' could not be looked up." "$hostname"
365 nls "Please configure the 'hostname' command to return a correct hostname."
369 # Initialize variables
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=""
376 # Check for old tables
377 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
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,"
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,"
396 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
397 c_d="$c_d KEY User (User)"
399 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
400 c_d="$c_d comment='Database privileges';"
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');"
407 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
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,"
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,"
424 c_h="$c_h PRIMARY KEY Host (Host,Db)"
426 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
427 c_h="$c_h comment='Host privileges; Merged with database privileges';"
430 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
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,"
435 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
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,"
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,"
464 c_u="$c_u PRIMARY KEY Host (Host,User)"
466 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
467 c_u="$c_u comment='Users and global privileges';"
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);
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);
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);"
478 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
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)"
487 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
488 c_f="$c_f comment='User defined functions';"
491 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
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)"
505 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
506 c_t="$c_t comment='Table privileges';"
509 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
511 c_c="$c_c CREATE TABLE columns_priv ("
512 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
513 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
514 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
515 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
516 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
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)"
521 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
522 c_c="$c_c comment='Column privileges';"
525 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
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)"
537 c_ht="$c_ht CHARACTER SET utf8"
538 c_ht="$c_ht comment='help topics';"
541 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
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)"
551 c_hc="$c_hc CHARACTER SET utf8"
552 c_hc="$c_hc comment='help categories';"
555 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
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)"
563 c_hk="$c_hk CHARACTER SET utf8"
564 c_hk="$c_hk comment='help keywords';"
567 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
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)"
574 c_hr="$c_hr CHARACTER SET utf8"
575 c_hr="$c_hr comment='keyword-topic relation';"
578 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
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)"
585 c_tzn="$c_tzn CHARACTER SET utf8"
586 c_tzn="$c_tzn comment='Time zone names';"
589 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
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)"
596 c_tz="$c_tz CHARACTER SET utf8"
597 c_tz="$c_tz comment='Time zones';"
600 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
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)"
608 c_tzt="$c_tzt CHARACTER SET utf8"
609 c_tzt="$c_tzt comment='Time zone transitions';"
612 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
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)"
622 c_tztt="$c_tztt CHARACTER SET utf8"
623 c_tztt="$c_tztt comment='Time zone transition types';"
626 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
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)"
633 c_tzls="$c_tzls CHARACTER SET utf8"
634 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
637 mkdir -p "$MYSQL_DATA_DIR"
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
641 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
643 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
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"
650 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
651 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
654 if [ ! -e /var/lib/mysql/mysql.sock ] || [ -L /var/lib/mysql/mysql.sock ] && [ -z "$(readlink /var/lib/mysql/mysql.sock)" ]; then
655 sock=${MYSQL_SOCKET#/var/lib/mysql/} # make it relative if possible
656 ln -s "$sock" /var/lib/mysql/mysql.sock
659 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
660 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
661 CREATE DATABASE mysql;
693 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
694 This is done (after starting database; press enter when asked for password) with:
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'
700 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
701 mysqladmin section. See the manual for more instructions.
707 Installation of grant tables FAILED!
709 Examine the logs in $MYSQL_DATA_DIR for more information. You can
710 also try to start the mysqld demon with:
712 /usr/sbin/mysqld --skip-grant &
714 You can use the command line tool /usr/bin/mysql to connect to the mysql
715 database and look at the grant tables:
717 shell> /usr/bin/mysql -u mysql mysql
720 Try 'mysqld --help' if you have problems with paths. Setting on
721 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
722 may be helpful. The latest information about MySQL is available on the
723 web at http://www.mysql.com/.
725 Please check PLD Linux ftp site for newer versions of this package.
727 Please consult the MySQL manual section: 'Problems running
728 mysql_install_db', and the manual section that describes problems on
729 your OS. Another information source is the MySQL email archive.
730 Please check all of the above before mailing us! And if you do mail
731 us, you MUST use the /usr/bin/mysqlbug script!
740 # End of useful functions.
744 if [ ! -f $MYSQL_ERRLOG ]; then
747 chown mysql:mysql $MYSQL_ERRLOG
748 chmod 640 $MYSQL_ERRLOG
750 for mysqldir in $DB_CLUSTERS; do
751 mysqlstatus "$mysqldir" start
752 if [ "$MYSQL_STATUS" = "running" ]; then
753 msg_already_running "MySQL $mysqldir"
755 mysqlstart "$mysqldir"
762 for mysqldir in $DB_CLUSTERS; do
763 mysqlstatus "$mysqldir" stop
764 if [ "$MYSQL_STATUS" = "not running" ]; then
765 msg_not_running "MySQL $mysqldir"
767 mysqlstop "$mysqldir"
782 for mysqldir in $DB_CLUSTERS; do
783 mysqlstatus "$mysqldir"
784 if [ "$MYSQL_STATUS" = "running" ]; then
785 show "MySQL cluster %s, PID %s" "$mysqldir" "$MYSQL_PID"
786 progress "$MYSQL_STATUS"
788 show "MySQL cluster %s" "$mysqldir"
789 progress "$MYSQL_STATUS" "$CFAIL"
795 restart|force-reload)
800 for mysqldir in $DB_CLUSTERS; do
801 mysqlinit "$mysqldir"
806 for mysqldir in $DB_CLUSTERS; do
807 mysqlgetconfig "$mysqldir"
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
815 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
821 # vi: shiftwidth=4 tabstop=4