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 [ -z "$BASE_TABLETYPE" ] && BASE_TABLETYPE="InnoDB"
26 if [ -n "$MYSQL_DB_CLUSTERS" ]; then
27 nls "Warning: MYSQL_DB_CLUSTERS is set. It's obsolete. Use %s instead." /etc/mysql/clusters.conf
30 if [ -f /etc/mysql/clusters.conf ]; then
31 MYSQL_DB_CLUSTERS=$(awk -F= '!/^#/{print $2}' /etc/mysql/clusters.conf)
32 if [ -z "$MYSQL_DB_CLUSTERS" ]; then
33 nls "Warning: there are no configured clusters."
37 nls "Warning: Missing clusters config file %s" /etc/mysql/clusters.conf
38 if [ -z "$MYSQL_DB_CLUSTERS" ]; then
39 nls "Warning: there are no configured clusters."
40 nls "Using default cluster /var/lib/mysql (compatibility mode)"
41 MYSQL_DB_CLUSTERS=/var/lib/mysql
46 # Check that networking is up
47 if is_yes "${NETWORKING}"; then
48 if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
49 msg_network_down MySQL
58 # any db cluster as command line argument?
61 # perform action for specified clusters only
63 # try auto resolving from /etc/mysql/clusters.conf
64 if [[ "$a" != /* ]]; then
65 m=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $1}' /etc/mysql/clusters.conf)
67 echo >&2 "Cluster name '$a' did not match anything!"
70 if [ $(echo "$m" | wc -l) -gt 1 ]; then
71 echo >&2 "Cluster name '$a' ambiguous:" $m
74 a=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $2}' /etc/mysql/clusters.conf)
76 DB_CLUSTERS="$DB_CLUSTERS $a"
79 DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
82 MYSQL_ERRLOG=/var/log/mysql/err
83 MYSQL_START_WAIT_TIME=${MYSQL_START_WAIT_TIME:-15}
84 MYSQL_STOP_WAIT_TIME=${MYSQL_STOP_WAIT_TIME:-900}
91 # check for mysql status
98 # MYSQL_STATUS = starting | running | not running | died
99 # MYSQL_PID = pid of mysqld process
105 mysqlgetconfig "$clusterdir"
107 MYSQL_STATUS="not running"
112 if [ -f "$MYSQL_PIDFILE" ]; then
113 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
116 if [ -n "$MYSQL_PIDFILE_PID" ]; then
117 MYSQL_PID=$MYSQL_PIDFILE_PID
118 if [ ! -d "/proc/$MYSQL_PID" ]; then
121 elif (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null); then
122 MYSQL_STATUS="running"
127 if [ "$mode" = "start" ]; then
128 MYSQL_GREP_PID=$(grep -lE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline 2> /dev/null | awk -F "/" '{ print $3; exit; }')
129 if [ -n "$MYSQL_GREP_PID" ]; then
130 MYSQL_PID=$MYSQL_GREP_PID
131 if grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null; then
132 if [ -f "$MYSQL_PIDFILE" ]; then
133 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
135 if [ -n "$MYSQL_PIDFILE_PID" ]; then
136 MYSQL_PID=$MYSQL_PIDFILE_PID
137 MYSQL_STATUS="running"
140 MYSQL_STATUS="starting"
147 # else default, "not running"
150 # get mysql configuration in variables
151 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
159 # emulate old behaviour if only one cluster specified
160 if [ "$clusterdir" = "$MYSQL_DB_CLUSTERS" -a "$clusterdir" = "/var/lib/mysql" -a -f /etc/mysqld.conf ]; then
162 config_file=/etc/mysqld.conf
164 config=$(awk -F= -vclusterdir="$clusterdir" '!/^#/{ if (clusterdir == $2) print $1}' /etc/mysql/clusters.conf)
165 if [[ $config = /* ]]; then
166 config_file="$config"
167 elif [ -f "/etc/mysql/$config" ]; then
168 config_file="/etc/mysql/$config"
170 config_file="$clusterdir/mysqld.conf"
174 MYSQL_CLUSTER_DIR="$clusterdir"
176 if [ -z "$config_file" ]; then
177 nls "Error: Can't find config file for %s cluster" "$clusterdir"
180 MYSQL_CONFIG="$config_file"
183 if [ ! -f "$config_file" ]; then
184 nls "Error: config file %s not found" "$config_file"
185 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
190 /^[ \t]*\[.*\][ \t]*$/ {
192 section=substr($0, RSTART + 1, RSTART + RLENGTH - 3)
194 section == "mysqld" && $2 ~ "=" {
195 if ($1 == "datadir") {
196 printf("MYSQL_DATA_DIR=%s;", $3)
197 } else if ($1 == "user") {
198 printf("MYSQL_USER=%s;", $3)
199 } else if ($1 == "pid-file") {
200 printf("MYSQL_PIDFILE=%s;", $3)
201 } else if ($1 == "socket") {
202 printf("MYSQL_SOCKET=%s;", $3)
208 if is_yes "$MYSQL_RA_COMPAT"; then
209 MYSQL_DATA_DIR_SUB=""
211 MYSQL_DATA_DIR_SUB="/mysqldb"
214 if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
215 nls "Error: datadir specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/db"
216 nls " MySQL can't be run."
220 if [ -z "$MYSQL_PIDFILE" -o "$MYSQL_PIDFILE" != "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid" ]; then
221 nls "Error: pid-file specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid"
222 nls " MySQL can't be run."
226 if [ -z $MYSQL_USER ]; then
227 echo "$(nls 'MySQL user not configured properly')"'!' >&2
228 nls "Edit %s and configure it." "$config_file" >&2
236 mysqlgetconfig "$clusterdir"
237 if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
238 nls "MySQL cluster %s not initialized." "$clusterdir"
239 nls "Try \`%s init %s' before start." "$0" "$clusterdir"
243 msg_starting "MySQL $clusterdir"
245 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
246 rm -f "$MYSQL_PIDFILE"
247 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 &
249 mysqlstatus "$clusterdir" start
250 # it takes longer for mysqld to start and create pidfile if it has to recover innodb transactions
251 if [ "$MYSQL_STATUS" = "starting" ]; then
252 for nr in $(seq 1 $(($MYSQL_START_WAIT_TIME*10))); do
253 [ -f "$MYSQL_PIDFILE" ] && break
258 mysqlstatus "$clusterdir" start
259 if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
261 elif [ "$MYSQL_STATUS" = "died" ]; then
273 mysqlstatus "$clusterdir" stop
274 msg_stopping "MySQL $clusterdir"
277 # try graceful shutdown -- send shutdown command
278 # requires mysql_logrotate user proper privs
279 /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown >/dev/null 2>&1
280 mysqlstatus "$clusterdir" stop
282 if [ "$MYSQL_PID" != "unknown" ]; then
283 kill -TERM "$MYSQL_PID" 2> /dev/null
284 for nr in $(seq 1 $(($MYSQL_STOP_WAIT_TIME*10))); do
285 [ -d "/proc/$MYSQL_PID" ] || break
290 mysqlstatus "$clusterdir" stop
291 if [ "$MYSQL_STATUS" = "died" ]; then
293 elif [ "$MYSQL_STATUS" = "running" -o "$MYSQL_STATUS" = "starting" ]; then
301 # check for running mysql instances; if any instance is running then
302 # create subsys lock file
305 # check for every defined db cluster in sysconfig file
306 for mysqldir in $DB_CLUSTERS; do
307 mysqlstatus "$mysqldir"
308 if [ "$MYSQL_STATUS" = "running" ]; then
309 touch /var/lock/subsys/mysql
313 rm -f /var/lock/subsys/mysql
319 if [ -f /etc/mysqld.conf ]; then
320 nls "Running in \`no cluster compat' mode: can't initialize database."
321 nls "Move /etc/mysqld.conf away and rerun \`$0 init' (new config will be in $clusterdir)."
325 if [ -f "$clusterdir/mysqld.conf" ]; then
326 mysqlgetconfig "$clusterdir"
329 MYSQL_CLUSTER_DIR="$clusterdir"
330 MYSQL_DATA_DIR="$clusterdir/mysqldb/db"
331 MYSQL_PIDFILE="$clusterdir/mysqldb/mysql.pid"
332 MYSQL_SOCKET="$clusterdir/mysqldb/mysql.sock"
334 # this $MYSQL_CONFIG will be created later
335 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
338 nls "Initializing cluster %s" "$clusterdir"
340 # Check if not exist init database
341 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
342 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
343 nls "before initializing database."
344 nls "For now skipping cluster %s." "$clusterdir"
348 show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
352 # Install this in the user table, too
353 hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
354 [ -z "$hostname" ] && hostname="localhost-unknown"
356 # Check if hostname is valid
357 if [ -z "$hostname" ]; then
360 nls "Sorry, the host name is not configured."
361 nls "Please configure the 'hostname' command to return a hostname."
363 elif ! hostname -i >/dev/null 2>&1; then
366 nls "Sorry, the host '%s' could not be looked up." "$hostname"
367 nls "Please configure the 'hostname' command to return a correct hostname."
371 # Initialize variables
372 c_d="" i_d="" c_ht="" c_tz=""
373 c_h="" i_h="" c_hc="" c_tzt=""
374 c_u="" i_u="" c_hk="" c_tztt=""
375 c_f="" i_f="" c_hr="" c_tzls=""
376 c_t="" c_c="" c_tzn="" c_p=""
379 # Check for old tables
380 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
382 # mysqld --bootstrap wants one command/line
383 c_d="$c_d CREATE TABLE db ("
384 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
385 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
386 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
387 c_d="$c_d Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
388 c_d="$c_d Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
389 c_d="$c_d Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
390 c_d="$c_d Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
391 c_d="$c_d Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
392 c_d="$c_d Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
393 c_d="$c_d Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
394 c_d="$c_d References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
395 c_d="$c_d Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
396 c_d="$c_d Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
397 c_d="$c_d Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
398 c_d="$c_d Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
399 c_d="$c_d Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
400 c_d="$c_d Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
401 c_d="$c_d Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
402 c_d="$c_d Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
403 c_d="$c_d Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
404 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
405 c_d="$c_d KEY User (User)"
406 c_d="$c_d ) engine=MyISAM "
407 c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
408 c_d="$c_d comment='Database privileges';"
410 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N');
411 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N');"
415 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
417 c_h="$c_h CREATE TABLE host ("
418 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
419 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
420 c_h="$c_h Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
421 c_h="$c_h Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
422 c_h="$c_h Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
423 c_h="$c_h Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
424 c_h="$c_h Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
425 c_h="$c_h Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
426 c_h="$c_h Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
427 c_h="$c_h References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
428 c_h="$c_h Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
429 c_h="$c_h Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
430 c_h="$c_h Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
431 c_h="$c_h Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
432 c_h="$c_h Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
433 c_h="$c_h Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
434 c_h="$c_h Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
435 c_h="$c_h Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
436 c_h="$c_h Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
437 c_h="$c_h PRIMARY KEY Host (Host,Db)"
438 c_h="$c_h ) engine=MyISAM "
439 c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
440 c_h="$c_h comment='Host privileges; Merged with database privileges';"
443 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
445 c_u="$c_u CREATE TABLE user ("
446 c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
447 c_u="$c_u User char(16) binary DEFAULT '' NOT NULL,"
448 c_u="$c_u Password char(41) character set latin1 collate latin1_bin DEFAULT '' NOT NULL,"
449 c_u="$c_u Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
450 c_u="$c_u Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
451 c_u="$c_u Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
452 c_u="$c_u Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
453 c_u="$c_u Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
454 c_u="$c_u Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
455 c_u="$c_u Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
456 c_u="$c_u Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
457 c_u="$c_u Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
458 c_u="$c_u File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
459 c_u="$c_u Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
460 c_u="$c_u References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
461 c_u="$c_u Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
462 c_u="$c_u Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
463 c_u="$c_u Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
464 c_u="$c_u Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
465 c_u="$c_u Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
466 c_u="$c_u Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
467 c_u="$c_u Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
468 c_u="$c_u Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
469 c_u="$c_u Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
470 c_u="$c_u Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
471 c_u="$c_u Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
472 c_u="$c_u Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
473 c_u="$c_u Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
474 c_u="$c_u Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
475 c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
476 c_u="$c_u ssl_cipher BLOB NOT NULL,"
477 c_u="$c_u x509_issuer BLOB NOT NULL,"
478 c_u="$c_u x509_subject BLOB NOT NULL,"
479 c_u="$c_u max_questions int(11) unsigned DEFAULT 0 NOT NULL,"
480 c_u="$c_u max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
481 c_u="$c_u max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
482 c_u="$c_u max_user_connections int(11) unsigned DEFAULT 0 NOT NULL,"
483 c_u="$c_u PRIMARY KEY Host (Host,User)"
484 c_u="$c_u ) engine=MyISAM "
485 c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
486 c_u="$c_u comment='Users and global privileges';"
489 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','Y','Y','Y','Y','Y','','','','',0,0,0,0);
490 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','Y','Y','Y','Y','Y','','','','',0,0,0,0);
491 INSERT INTO user (host,user) values ('localhost','');
492 INSERT INTO user (host,user) values ('$hostname','');
493 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','N','N','N','N','N','','','','',0,0,0,0);"
496 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
498 c_f="$c_f CREATE TABLE func ("
499 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
500 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
501 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
502 c_f="$c_f type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL,"
503 c_f="$c_f PRIMARY KEY (name)"
504 c_f="$c_f ) engine=${BASE_TABLETYPE} "
505 c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
506 c_f="$c_f comment='User defined functions';"
509 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
511 c_t="$c_t CREATE TABLE tables_priv ("
512 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
513 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
514 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
515 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
516 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
517 c_t="$c_t Timestamp timestamp(14),"
518 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index', 'Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
519 c_t="$c_t Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
520 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
521 c_t="$c_t KEY Grantor (Grantor)"
522 c_t="$c_t ) engine=${BASE_TABLETYPE} "
523 c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
524 c_t="$c_t comment='Table privileges';"
527 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
529 c_c="$c_c CREATE TABLE columns_priv ("
530 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
531 c_c="$c_c Db char(64) DEFAULT '' NOT NULL,"
532 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
533 c_c="$c_c Table_name char(64) DEFAULT '' NOT NULL,"
534 c_c="$c_c Column_name char(64) DEFAULT '' NOT NULL,"
535 c_c="$c_c Timestamp timestamp(14),"
536 c_c="$c_c Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
537 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
538 c_c="$c_c ) engine=${BASE_TABLETYPE} "
539 c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
540 c_c="$c_c comment='Column privileges';"
543 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/procs_priv.frm
545 c_pp="$c_pp CREATE TABLE procs_priv ("
546 c_pp="$c_pp Host char(60) binary DEFAULT '' NOT NULL,"
547 c_pp="$c_pp Db char(64) binary DEFAULT '' NOT NULL,"
548 c_pp="$c_pp User char(16) binary DEFAULT '' NOT NULL,"
549 c_pp="$c_pp Routine_name char(64) binary DEFAULT '' NOT NULL,"
550 c_pp="$c_pp Routine_type enum('FUNCTION','PROCEDURE') NOT NULL,"
551 c_pp="$c_pp Grantor char(77) DEFAULT '' NOT NULL,"
552 c_pp="$c_pp Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
553 c_pp="$c_pp Timestamp timestamp(14),"
554 c_pp="$c_pp PRIMARY KEY (Host,Db,User,Routine_name,Routine_type),"
555 c_pp="$c_pp KEY Grantor (Grantor)"
556 c_pp="$c_pp ) engine=${BASE_TABLETYPE} "
557 c_pp="$c_pp CHARACTER SET utf8 COLLATE utf8_bin"
558 c_pp="$c_pp comment='Procedure privileges';"
562 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
564 c_ht="$c_ht CREATE TABLE help_topic ("
565 c_ht="$c_ht help_topic_id int unsigned not null,"
566 c_ht="$c_ht name varchar(64) not null,"
567 c_ht="$c_ht help_category_id smallint unsigned not null,"
568 c_ht="$c_ht description text not null,"
569 c_ht="$c_ht example text not null,"
570 c_ht="$c_ht url varchar(128) not null,"
571 c_ht="$c_ht primary key (help_topic_id),"
572 c_ht="$c_ht unique index (name)"
573 c_ht="$c_ht ) engine=${BASE_TABLETYPE} "
574 c_ht="$c_ht CHARACTER SET utf8"
575 c_ht="$c_ht comment='help topics';"
578 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
580 c_hc="$c_hc CREATE TABLE help_category ("
581 c_hc="$c_hc help_category_id smallint unsigned not null,"
582 c_hc="$c_hc name varchar(64) not null,"
583 c_hc="$c_hc parent_category_id smallint unsigned null,"
584 c_hc="$c_hc url varchar(128) not null,"
585 c_hc="$c_hc primary key (help_category_id),"
586 c_hc="$c_hc unique index (name)"
587 c_hc="$c_hc ) engine=${BASE_TABLETYPE} "
588 c_hc="$c_hc CHARACTER SET utf8"
589 c_hc="$c_hc comment='help categories';"
592 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
594 c_hk="$c_hk CREATE TABLE help_keyword ("
595 c_hk="$c_hk help_keyword_id int unsigned not null,"
596 c_hk="$c_hk name varchar(64) not null,"
597 c_hk="$c_hk primary key (help_keyword_id),"
598 c_hk="$c_hk unique index (name)"
599 c_hk="$c_hk ) engine=${BASE_TABLETYPE} "
600 c_hk="$c_hk CHARACTER SET utf8"
601 c_hk="$c_hk comment='help keywords';"
604 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
606 c_hr="$c_hr CREATE TABLE help_relation ("
607 c_hr="$c_hr help_topic_id int unsigned not null references help_topic,"
608 c_hr="$c_hr help_keyword_id int unsigned not null references help_keyword,"
609 c_hr="$c_hr primary key (help_keyword_id, help_topic_id)"
610 c_hr="$c_hr ) engine=${BASE_TABLETYPE} "
611 c_hr="$c_hr CHARACTER SET utf8"
612 c_hr="$c_hr comment='keyword-topic relation';"
615 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
617 c_tzn="$c_tzn CREATE TABLE time_zone_name ("
618 c_tzn="$c_tzn Name char(64) NOT NULL,"
619 c_tzn="$c_tzn Time_zone_id int unsigned NOT NULL,"
620 c_tzn="$c_tzn PRIMARY KEY Name (Name)"
621 c_tzn="$c_tzn ) engine=${BASE_TABLETYPE} "
622 c_tzn="$c_tzn CHARACTER SET utf8"
623 c_tzn="$c_tzn comment='Time zone names';"
626 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
628 c_tz="$c_tz CREATE TABLE time_zone ("
629 c_tz="$c_tz Time_zone_id int unsigned NOT NULL auto_increment,"
630 c_tz="$c_tz Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
631 c_tz="$c_tz PRIMARY KEY TzId (Time_zone_id)"
632 c_tz="$c_tz ) engine=${BASE_TABLETYPE} "
633 c_tz="$c_tz CHARACTER SET utf8"
634 c_tz="$c_tz comment='Time zones';"
637 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
639 c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
640 c_tzt="$c_tzt Time_zone_id int unsigned NOT NULL,"
641 c_tzt="$c_tzt Transition_time bigint signed NOT NULL,"
642 c_tzt="$c_tzt Transition_type_id int unsigned NOT NULL,"
643 c_tzt="$c_tzt PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
644 c_tzt="$c_tzt ) engine=${BASE_TABLETYPE} "
645 c_tzt="$c_tzt CHARACTER SET utf8"
646 c_tzt="$c_tzt comment='Time zone transitions';"
649 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
651 c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
652 c_tztt="$c_tztt Time_zone_id int unsigned NOT NULL,"
653 c_tztt="$c_tztt Transition_type_id int unsigned NOT NULL,"
654 c_tztt="$c_tztt Offset int signed DEFAULT 0 NOT NULL,"
655 c_tztt="$c_tztt Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
656 c_tztt="$c_tztt Abbreviation char(8) DEFAULT '' NOT NULL,"
657 c_tztt="$c_tztt PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
658 c_tztt="$c_tztt ) engine=${BASE_TABLETYPE} "
659 c_tztt="$c_tztt CHARACTER SET utf8"
660 c_tztt="$c_tztt comment='Time zone transition types';"
663 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
665 c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
666 c_tzls="$c_tzls Transition_time bigint signed NOT NULL,"
667 c_tzls="$c_tzls Correction int signed NOT NULL,"
668 c_tzls="$c_tzls PRIMARY KEY TranTime (Transition_time)"
669 c_tzls="$c_tzls ) engine=${BASE_TABLETYPE} "
670 c_tzls="$c_tzls CHARACTER SET utf8"
671 c_tzls="$c_tzls comment='Leap seconds information for time zones';"
674 if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/proc.frm
676 c_p="$c_p CREATE TABLE proc ("
677 c_p="$c_p db char(64) collate utf8_bin DEFAULT '' NOT NULL,"
678 c_p="$c_p name char(64) DEFAULT '' NOT NULL,"
679 c_p="$c_p type enum('FUNCTION','PROCEDURE') NOT NULL,"
680 c_p="$c_p specific_name char(64) DEFAULT '' NOT NULL,"
681 c_p="$c_p language enum('SQL') DEFAULT 'SQL' NOT NULL,"
682 c_p="$c_p sql_data_access enum('CONTAINS_SQL',"
684 c_p="$c_p 'READS_SQL_DATA',"
685 c_p="$c_p 'MODIFIES_SQL_DATA'"
686 c_p="$c_p ) DEFAULT 'CONTAINS_SQL' NOT NULL,"
687 c_p="$c_p is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL,"
688 c_p="$c_p security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL,"
689 c_p="$c_p param_list blob DEFAULT '' NOT NULL,"
690 c_p="$c_p returns char(64) DEFAULT '' NOT NULL,"
691 c_p="$c_p body longblob DEFAULT '' NOT NULL,"
692 c_p="$c_p definer char(77) collate utf8_bin DEFAULT '' NOT NULL,"
693 c_p="$c_p created timestamp,"
694 c_p="$c_p modified timestamp,"
695 c_p="$c_p sql_mode set("
696 c_p="$c_p 'REAL_AS_FLOAT',"
697 c_p="$c_p 'PIPES_AS_CONCAT',"
698 c_p="$c_p 'ANSI_QUOTES',"
699 c_p="$c_p 'IGNORE_SPACE',"
700 c_p="$c_p 'NOT_USED',"
701 c_p="$c_p 'ONLY_FULL_GROUP_BY',"
702 c_p="$c_p 'NO_UNSIGNED_SUBTRACTION',"
703 c_p="$c_p 'NO_DIR_IN_CREATE',"
704 c_p="$c_p 'POSTGRESQL',"
709 c_p="$c_p 'NO_KEY_OPTIONS',"
710 c_p="$c_p 'NO_TABLE_OPTIONS',"
711 c_p="$c_p 'NO_FIELD_OPTIONS',"
712 c_p="$c_p 'MYSQL323',"
713 c_p="$c_p 'MYSQL40',"
715 c_p="$c_p 'NO_AUTO_VALUE_ON_ZERO',"
716 c_p="$c_p 'NO_BACKSLASH_ESCAPES',"
717 c_p="$c_p 'STRICT_TRANS_TABLES',"
718 c_p="$c_p 'STRICT_ALL_TABLES',"
719 c_p="$c_p 'NO_ZERO_IN_DATE',"
720 c_p="$c_p 'NO_ZERO_DATE',"
721 c_p="$c_p 'INVALID_DATES',"
722 c_p="$c_p 'ERROR_FOR_DIVISION_BY_ZERO',"
723 c_p="$c_p 'TRADITIONAL',"
724 c_p="$c_p 'NO_AUTO_CREATE_USER',"
725 c_p="$c_p 'HIGH_NOT_PRECEDENCE'"
726 c_p="$c_p ) DEFAULT '' NOT NULL,"
727 c_p="$c_p comment char(64) collate utf8_bin DEFAULT '' NOT NULL,"
728 c_p="$c_p PRIMARY KEY (db,name,type)"
729 c_p="$c_p ) engine=${BASE_TABLETYPE} "
730 c_p="$c_p character set utf8"
731 c_p="$c_p comment='Stored Procedures';"
734 mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
735 # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
736 chown root:root "$MYSQL_CLUSTER_DIR"
737 chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
738 chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
740 if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
742 s#\(datadir.*\)=.*#\1= $MYSQL_DATA_DIR#g;
743 s#\(pid-file.*\)=.*#\1= $MYSQL_PIDFILE#g;
744 s#\(socket.*\)=.*#\1= $MYSQL_SOCKET#g;
745 s#@clusterdir@#$MYSQL_CLUSTER_DIR#g;
746 " /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
747 chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
748 chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
751 if [ ! -e /var/lib/mysql/mysql.sock ] || [ -L /var/lib/mysql/mysql.sock ] && [ -z "$(readlink /var/lib/mysql/mysql.sock)" ]; then
752 sock=${MYSQL_SOCKET#/var/lib/mysql/} # make it relative if possible
753 ln -s "$sock" /var/lib/mysql/mysql.sock
756 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
757 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
758 CREATE DATABASE mysql;
793 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
794 This is done (after starting database; press enter when asked for password) with:
796 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
797 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
798 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
800 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
801 mysqladmin section. See the manual for more instructions.
803 If you want to use new help tables in MySQL 4.1.x then you'll need to import the help data:
804 /usr/bin/mysql -u mysql -p -S $MYSQL_SOCKET mysql < /usr/share/mysql/fill_help_tables.sql
810 Installation of grant tables FAILED!
812 Examine the logs in $MYSQL_DATA_DIR for more information. You can
813 also try to start the mysqld demon with:
815 /usr/sbin/mysqld --skip-grant &
817 You can use the command line tool /usr/bin/mysql to connect to the mysql
818 database and look at the grant tables:
820 shell> /usr/bin/mysql -u mysql mysql
823 Try 'mysqld --help' if you have problems with paths. Setting on
824 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
825 may be helpful. The latest information about MySQL is available on the
826 web at http://www.mysql.com/.
828 Please check PLD Linux ftp site for newer versions of this package.
830 Please consult the MySQL manual section: 'Problems running
831 mysql_install_db', and the manual section that describes problems on
832 your OS. Another information source is the MySQL email archive.
833 Please check all of the above before mailing us! And if you do mail
834 us, you MUST use the /usr/bin/mysqlbug script!
843 # End of useful functions.
847 if [ ! -f $MYSQL_ERRLOG ]; then
850 chown mysql:mysql $MYSQL_ERRLOG
851 chmod 640 $MYSQL_ERRLOG
853 for mysqldir in $DB_CLUSTERS; do
854 mysqlstatus "$mysqldir" start
855 if [ "$MYSQL_STATUS" = "running" ]; then
856 msg_already_running "MySQL $mysqldir"
858 mysqlstart "$mysqldir"
865 for mysqldir in $DB_CLUSTERS; do
866 mysqlstatus "$mysqldir" stop
867 if [ "$MYSQL_STATUS" = "not running" ]; then
868 msg_not_running "MySQL $mysqldir"
870 mysqlstop "$mysqldir"
885 for mysqldir in $DB_CLUSTERS; do
886 mysqlstatus "$mysqldir"
887 if [ "$MYSQL_STATUS" = "running" ]; then
888 show "MySQL cluster %s, PID %s" "$mysqldir" "$MYSQL_PID"
889 progress "$MYSQL_STATUS"
891 show "MySQL cluster %s" "$mysqldir"
892 progress "$MYSQL_STATUS" "$CFAIL"
898 restart|force-reload)
903 for mysqldir in $DB_CLUSTERS; do
904 mysqlinit "$mysqldir"
909 for mysqldir in $DB_CLUSTERS; do
910 mysqlgetconfig "$mysqldir"
911 # just if mysqld is really running
912 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
913 /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
918 msg_usage "$0 {start|stop|init|restart|force-reload|status}"
924 # vi: shiftwidth=4 tabstop=4