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
72 # check for mysql status
78 # MYSQL_STATUS = running | not running | died
79 # MYSQL_PID = pid of mysqld process
83 mysqlgetconfig "$clusterdir"
85 MYSQL_STATUS="not running"
88 [ -f "$MYSQL_PIDFILE" ] && MYSQL_PID=$(cat "$MYSQL_PIDFILE")
90 if [ ! -d "/proc/$MYSQL_PID" -a "$MYSQL_PID" != "unknown" ]; then
92 elif [ -d "/proc/$MYSQL_PID" ]; then
93 grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline && MYSQL_STATUS="running" || MYSQL_STATUS="not running"
97 # get mysql configuration in variables
98 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
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
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
118 config_file="$clusterdir/mysqld.conf"
122 MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
124 if [ -z "$config_file" ]; then
125 nls "Error: Can't find config file for %s cluster" "$clusterdir"
128 MYSQL_CONFIG="$config_file"; export MYSQL_CONFIG
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'?"
138 /^[ \t]*\[.*\][ \t]*$/ {
140 section=substr($0,RSTART+1,RSTART+RLENGTH-3)
142 section=="mysqld" && $2~"=" {
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)
154 print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
159 if is_yes "$MYSQL_RA_COMPAT"; then
160 MYSQL_DATA_DIR_SUB=""
162 MYSQL_DATA_DIR_SUB="/mysqldb"
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."
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."
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
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"
194 msg_starting "MySQL $clusterdir"
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 &
199 mysqlstatus "$clusterdir"
200 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
202 elif [ "$MYSQL_STATUS" = "died" ]; then
214 mysqlstatus "$clusterdir"
215 msg_stopping "MySQL $clusterdir"
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)?
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"
227 [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
230 [ -d "/proc/$MYSQL_PID" ] && sleep 1
232 mysqlstatus "$clusterdir"
233 if [ "$MYSQL_STATUS" = "died" ]; then
235 elif [ "$MYSQL_STATUS" = "running" ]; then
241 # FIXME: should let mysqld remove pid by itself?
242 rm -f "$MYSQL_PIDFILE"
246 # check for running mysql instances; if any instance is running then
247 # create subsys lock file
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
258 rm -f /var/lock/subsys/mysql
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)."
270 if [ -f "$clusterdir/mysqld.conf" ]; then
271 mysqlgetconfig "$clusterdir"
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"
280 nls "Initializing cluster %s" "$clusterdir"
282 # Check if not exist init database
283 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
284 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
285 nls "before initializing database."
286 nls "For now skipping cluster %s." "$clusterdir"
290 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
295 # Install this in the user table, too
296 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
297 [ -z "$hostname" ] && hostname="localhost-unknown"
299 # Check if hostname is valid
300 if [ -z "$hostname" ]; then
303 nls "Sorry, the host name is not configured."
304 nls "Please configure the 'hostname' command to return a hostname."
306 elif ! hostname -i >/dev/null 2>&1; then
309 nls "Sorry, the host '%s' could not be looked up." "$hostname"
310 nls "Please configure the 'hostname' command to return a correct hostname."
314 # Initialize variables
315 c_d="" i_d="" c_ht="" c_tz=""
316 c_h="" i_h="" c_hc="" c_tzt=""
317 c_u="" i_u="" c_hk="" c_tztt=""
318 c_f="" i_f="" c_hr="" c_tzls=""
319 c_t="" c_c="" c_tzn=""
321 # Check for old tables
322 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
324 # mysqld --bootstrap wants one command/line
325 c_d="$c_d CREATE TABLE db ("
326 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
327 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
328 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
329 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
330 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
331 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
332 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
333 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
334 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
335 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
336 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
337 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
338 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
339 c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
340 c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
341 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
342 c_d="$c_d KEY User (User)"
344 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
345 c_d="$c_d comment='Database privileges';"
347 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
348 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
352 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
354 c_h="$c_h CREATE TABLE host ("
355 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
356 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
357 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
358 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
359 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
360 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
361 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
362 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
363 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
367 c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368 c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
369 c_h="$c_h PRIMARY KEY Host (Host,Db)"
371 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
372 c_h="$c_h comment='Host privileges; Merged with database privileges';"
375 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
377 c_u="$c_u CREATE TABLE user ("
378 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
379 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
380 c_u="$c_u Password char(41) DEFAULT '' NOT NULL,"
381 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
382 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
383 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
384 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
394 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
395 c_u="$c_u Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
396 c_u="$c_u Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
397 c_u="$c_u Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
398 c_u="$c_u Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
399 c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
400 c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
401 c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
402 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
403 c_u="$c_u ssl_cipher BLOB NOT NULL,"
404 c_u="$c_u x509_issuer BLOB NOT NULL,"
405 c_u="$c_u x509_subject BLOB NOT NULL,"
406 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
407 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
408 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
409 c_u="$c_u PRIMARY KEY Host (Host,User)"
411 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
412 c_u="$c_u comment='Users and global privileges';"
414 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);
415 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);
417 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);
418 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);
420 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);"
423 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
425 c_f="$c_f CREATE TABLE func ("
426 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
427 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
428 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
429 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
430 c_f="$c_f PRIMARY KEY (name)"
432 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
433 c_f="$c_f comment='User defined functions';"
436 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
438 c_t="$c_t CREATE TABLE tables_priv ("
439 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
440 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
441 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
442 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
443 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
444 c_t="$c_t Timestamp timestamp(14),"
445 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
446 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
447 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
448 c_t="$c_t KEY Grantor (Grantor)"
450 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
451 c_t="$c_t comment='Table privileges';"
454 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
456 c_c="$c_c CREATE TABLE columns_priv ("
457 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
458 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
459 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
460 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
461 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
462 c_c="$c_c Timestamp timestamp(14),"
463 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
464 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
466 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
467 c_c="$c_c comment='Column privileges';"
470 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
472 c_ht="$c_ht CREATE TABLE help_topic ("
473 c_ht="$c_ht help_topic_id int unsigned not null,"
474 c_ht="$c_ht name varchar(64) not null,"
475 c_ht="$c_ht help_category_id smallint unsigned not null,"
476 c_ht="$c_ht description text not null,"
477 c_ht="$c_ht example text not null,"
478 c_ht="$c_ht url varchar(128) not null,"
479 c_ht="$c_ht primary key (help_topic_id),"
480 c_ht="$c_ht unique index (name)"
482 c_ht="$c_ht CHARACTER SET utf8"
483 c_ht="$c_ht comment='help topics';"
486 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
488 c_hc="$c_hc CREATE TABLE help_category ("
489 c_hc="$c_hc help_category_id smallint unsigned not null,"
490 c_hc="$c_hc name varchar(64) not null,"
491 c_hc="$c_hc parent_category_id smallint unsigned null,"
492 c_hc="$c_hc url varchar(128) not null,"
493 c_hc="$c_hc primary key (help_category_id),"
494 c_hc="$c_hc unique index (name)"
496 c_hc="$c_hc CHARACTER SET utf8"
497 c_hc="$c_hc comment='help categories';"
500 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
502 c_hk="$c_hk CREATE TABLE help_keyword ("
503 c_hk="$c_hk help_keyword_id int unsigned not null,"
504 c_hk="$c_hk name varchar(64) not null,"
505 c_hk="$c_hk primary key (help_keyword_id),"
506 c_hk="$c_hk unique index (name)"
508 c_hk="$c_hk CHARACTER SET utf8"
509 c_hk="$c_hk comment='help keywords';"
512 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
514 c_hr="$c_hr CREATE TABLE help_relation ("
515 c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
516 c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
517 c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
519 c_hr="$c_hr CHARACTER SET utf8"
520 c_hr="$c_hr comment='keyword-topic relation';"
523 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
525 c_tzn="$c_tzn CREATE TABLE time_zone_name ("
526 c_tzn="$c_tzn Name char(64) NOT NULL,"
527 c_tzn="$c_tzn Time_zone_id int unsigned NOT NULL,"
528 c_tzn="$c_tzn PRIMARY KEY Name (Name)"
530 c_tzn="$c_tzn CHARACTER SET utf8"
531 c_tzn="$c_tzn comment='Time zone names';"
534 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
536 c_tz="$c_tz CREATE TABLE time_zone ("
537 c_tz="$c_tz Time_zone_id int unsigned NOT NULL auto_increment,"
538 c_tz="$c_tz Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
539 c_tz="$c_tz PRIMARY KEY TzId (Time_zone_id)"
541 c_tz="$c_tz CHARACTER SET utf8"
542 c_tz="$c_tz comment='Time zones';"
545 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
547 c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
548 c_tzt="$c_tzt Time_zone_id int unsigned NOT NULL,"
549 c_tzt="$c_tzt Transition_time bigint signed NOT NULL,"
550 c_tzt="$c_tzt Transition_type_id int unsigned NOT NULL,"
551 c_tzt="$c_tzt PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
553 c_tzt="$c_tzt CHARACTER SET utf8"
554 c_tzt="$c_tzt comment='Time zone transitions';"
557 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
559 c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
560 c_tztt="$c_tztt Time_zone_id int unsigned NOT NULL,"
561 c_tztt="$c_tztt Transition_type_id int unsigned NOT NULL,"
562 c_tztt="$c_tztt Offset int signed DEFAULT 0 NOT NULL,"
563 c_tztt="$c_tztt Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
564 c_tztt="$c_tztt Abbreviation char(8) DEFAULT '' NOT NULL,"
565 c_tztt="$c_tztt PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
567 c_tztt="$c_tztt CHARACTER SET utf8"
568 c_tztt="$c_tztt comment='Time zone transition types';"
571 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
573 c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
574 c_tzls="$c_tzls Transition_time bigint signed NOT NULL,"
575 c_tzls="$c_tzls Correction int signed NOT NULL,"
576 c_tzls="$c_tzls PRIMARY KEY TranTime (Transition_time)"
578 c_tzls="$c_tzls CHARACTER SET utf8"
579 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
582 mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
583 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
584 chown root:root "$MYSQL_CLUSTER_DIR"
585 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
586 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
588 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
589 sed -e "s#datadir.*=.*#datadir = $MYSQL_DATA_DIR#g" \
590 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
591 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
592 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
593 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
594 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
597 if [ ! -e /var/lib/mysql/mysql.sock ]; then
598 ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
601 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
602 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
603 CREATE DATABASE mysql;
635 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
636 This is done (after starting database) with:
638 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
639 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
640 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
642 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
643 mysqladmin section. See the manual for more instructions.
645 IMPORTANT: The configuration file is mysqld.conf in MYSQL_DB_CLUSTERS directories.
651 Installation of grant tables FAILED!
653 Examine the logs in $MYSQL_DATA_DIR for more information. You can
654 also try to start the mysqld demon with:
656 /usr/sbin/mysqld --skip-grant &
658 You can use the command line tool /usr/bin/mysql to connect to the mysql
659 database and look at the grant tables:
661 shell> /usr/bin/mysql -u mysql mysql
664 Try 'mysqld --help' if you have problems with paths. Setting on
665 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
666 may be helpful. The latest information about MySQL is available on the
667 web at http://www.mysql.com/.
669 Please check PLD ftp site for newer versions of this package.
671 Please consult the MySQL manual section: 'Problems running
672 mysql_install_db', and the manual section that describes problems on
673 your OS. Another information source is the MySQL email archive.
674 Please check all of the above before mailing us! And if you do mail
675 us, you MUST use the /usr/bin/mysqlbug script!
684 # End of useful functions.
690 if [ ! -f $MYSQL_ERRLOG ]; then
693 chown mysql:mysql $MYSQL_ERRLOG
694 chmod 640 $MYSQL_ERRLOG
696 for mysqldir in $DB_CLUSTERS; do
697 mysqlstatus "$mysqldir"
698 if [ "$MYSQL_STATUS" = "running" ]; then
699 msg_already_running "MySQL $mysqldir"
701 mysqlstart "$mysqldir"
707 for mysqldir in $DB_CLUSTERS; do
708 mysqlstatus "$mysqldir"
709 if [ "$MYSQL_STATUS" = "not running" ]; then
710 msg_not_running "MySQL $mysqldir"
712 mysqlstop "$mysqldir"
719 for mysqldir in $DB_CLUSTERS; do
720 mysqlstatus "$mysqldir"
721 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
725 restart|force-reload)
727 $0 start $DB_CLUSTERS
731 for mysqldir in $DB_CLUSTERS; do
732 mysqlinit "$mysqldir"
737 for mysqldir in $DB_CLUSTERS; do
738 mysqlgetconfig "$mysqldir"
739 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
743 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
749 # vi: shiftwidth=4 tabstop=4