]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
- introduce some completion logic so you could call
[packages/mysql.git] / mysql.init
1 #!/bin/sh
2 #
3 # mysql         A very fast and reliable SQL database engine
4 #
5 # chkconfig:    2345 84 25
6 #
7 # description:  A very fast and reliable SQL database engine.
8 #
9 # Source function library
10 . /etc/rc.d/init.d/functions
11
12 # Get network config
13 . /etc/sysconfig/network
14
15 # Get service config
16 if [ -f /etc/sysconfig/mysql ]; then
17         . /etc/sysconfig/mysql
18 else
19         nls "Error: %s not found" /etc/sysconfig/mysql
20         nls "%s can't be run." MySQL
21         exit 1
22 fi
23
24 [ -z "$BASE_TABLETYPE" ] && BASE_TABLETYPE="InnoDB"
25
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
28 fi
29
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."
34         fi
35
36 else
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
42         fi
43 fi
44
45
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
50                 exit 1
51         fi
52 else
53         exit 0
54 fi
55
56 action="$1"
57
58 # any db cluster as command line argument?
59 if [ $# -gt 1 ]; then
60         shift
61         # perform action for specified clusters only
62         for a in "$@"; do
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)
66                         if [ -z "$m" ]; then
67                                 echo >&2 "Cluster name '$a' did not match anything!"
68                                 exit 1
69                         fi
70                         if [ $(echo "$m" | wc -l) -gt 1 ]; then
71                                 echo >&2 "Cluster name '$a' ambiguous:" $m
72                                 exit 1
73                         fi
74                         a=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $2}' /etc/mysql/clusters.conf)
75                 fi
76                 DB_CLUSTERS="$DB_CLUSTERS $a"
77         done
78 else
79         DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
80 fi
81
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}
85
86 #
87 # Useful functions.
88 #
89
90 #
91 # check for mysql status
92 #
93 # arguments:
94 # $1 - db cluster
95 # $2 - start|stop
96 #
97 # sets variables:
98 # MYSQL_STATUS = starting | running | not running | died
99 # MYSQL_PID    = pid of mysqld process
100 #
101 mysqlstatus() {
102         clusterdir="$1"
103         mode="$2"
104         
105         mysqlgetconfig "$clusterdir"
106
107         MYSQL_STATUS="not running"
108         MYSQL_PID="unknown"
109         MYSQL_PIDFILE_PID=""
110         MYSQL_GREP_PID=""
111
112         if [ -f "$MYSQL_PIDFILE" ]; then
113                 MYSQL_PIDFILE_PID=$(cat "$MYSQL_PIDFILE")
114         fi
115         
116         if [ -n "$MYSQL_PIDFILE_PID" ]; then
117                 MYSQL_PID=$MYSQL_PIDFILE_PID
118                 if [ ! -d "/proc/$MYSQL_PID" ]; then
119                         MYSQL_STATUS="died"
120                         return
121                 elif (grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null); then
122                         MYSQL_STATUS="running"
123                         return
124                 fi
125         fi
126
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")
134                                 fi
135                                 if [ -n "$MYSQL_PIDFILE_PID" ]; then
136                                         MYSQL_PID=$MYSQL_PIDFILE_PID
137                                         MYSQL_STATUS="running"
138                                         return
139                                 else
140                                         MYSQL_STATUS="starting"
141                                         return
142                                 fi
143                         fi
144                 fi
145         fi
146
147         # else default, "not running"
148 }
149
150 # get mysql configuration in variables
151 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
152 #
153 # arguments
154 # $1 - db cluster
155
156 mysqlgetconfig() {
157         clusterdir="$1"
158
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
161                 MYSQL_RA_COMPAT=yes
162                 config_file=/etc/mysqld.conf
163         else
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"
169                 else
170                         config_file="$clusterdir/mysqld.conf"
171                 fi
172         fi
173
174         MYSQL_CLUSTER_DIR="$clusterdir"
175
176         if [ -z "$config_file" ]; then
177                 nls "Error: Can't find config file for %s cluster" "$clusterdir"
178                 exit 6
179         else
180                 MYSQL_CONFIG="$config_file"
181         fi
182
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'?"
186                 exit 6
187         fi
188
189         eval `awk '
190 /^[ \t]*\[.*\][ \t]*$/ {
191         match($0,/\[.*\]/)
192         section=substr($0, RSTART + 1, RSTART + RLENGTH - 3)
193 }
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)
203         }
204 }
205 ' $config_file`
206
207
208         if is_yes "$MYSQL_RA_COMPAT"; then
209                 MYSQL_DATA_DIR_SUB=""
210         else
211                 MYSQL_DATA_DIR_SUB="/mysqldb"
212         fi
213
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."
217                 exit 6
218         fi
219
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."
223                 exit 6
224         fi
225
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
229                 exit 6
230         fi
231 }
232
233 # start mysql
234 mysqlstart() {
235         clusterdir="$1"
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"
240                 exit 6
241         fi
242
243         msg_starting "MySQL $clusterdir"
244         busy
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 &
248         sleep 0.2
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
254                         sleep 0.1
255                 done
256         fi
257
258         mysqlstatus "$clusterdir" start
259         if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
260                 ok
261         elif [ "$MYSQL_STATUS" = "died" ]; then
262                 RETVAL=1
263                 died
264         else
265                 RETVAL=1
266                 fail
267         fi
268 }
269
270 # stop mysql
271 mysqlstop() {
272         clusterdir="$1"
273         mysqlstatus "$clusterdir" stop
274         msg_stopping "MySQL $clusterdir"
275         busy
276
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
281
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
286                         sleep 0.1
287                 done
288         fi
289         
290         mysqlstatus "$clusterdir" stop
291         if [ "$MYSQL_STATUS" = "died" ]; then
292                 died
293         elif [ "$MYSQL_STATUS" = "running" -o "$MYSQL_STATUS" = "starting" ]; then
294                 fail
295         else
296                 ok
297         fi
298 }
299
300 #
301 # check for running mysql instances; if any instance is running then
302 # create subsys lock file
303 #
304 mysqlsubsys() {
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
310                         return
311                 fi
312         done
313         rm -f /var/lock/subsys/mysql
314 }
315
316 mysqlinit() {
317         clusterdir="$1"
318
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)."
322                 exit 1
323         fi
324
325         if [ -f "$clusterdir/mysqld.conf" ]; then
326                 mysqlgetconfig "$clusterdir"
327         else
328                 MYSQL_USER="mysql"
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"
333
334                 # this $MYSQL_CONFIG will be created later
335                 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
336         fi
337
338         nls "Initializing cluster %s" "$clusterdir"
339
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"
345                 return
346         fi
347
348         show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
349         busy
350         TMP=/tmp TMPDIR=/tmp
351
352         # Install this in the user table, too
353         hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
354         [ -z "$hostname" ] && hostname="localhost-unknown"
355
356         # Check if hostname is valid
357         if [ -z "$hostname" ]; then
358                 deltext
359                 fail
360                 nls "Sorry, the host name is not configured."
361                 nls "Please configure the 'hostname' command to return a hostname."
362                 exit 1
363         elif ! hostname -i >/dev/null 2>&1; then
364                 deltext
365                 fail
366                 nls "Sorry, the host '%s' could not be looked up." "$hostname"
367                 nls "Please configure the 'hostname' command to return a correct hostname."
368                 exit 1
369         fi
370
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=""
377         c_pp=""
378
379         # Check for old tables
380         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
381         then
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';"
409
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');"
412
413         fi
414
415         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
416         then
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';"
441         fi
442
443         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
444         then
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';"
487
488
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);"
494         fi
495
496         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
497         then
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';"
507         fi
508
509         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
510         then
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';"
525         fi
526
527         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
528         then
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';"
541         fi
542
543         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/procs_priv.frm
544         then
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';"
559     fi
560
561
562         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
563         then
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';"
576         fi
577
578         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
579         then
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';"
590         fi
591
592         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
593         then
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';"
602         fi
603
604         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
605         then
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';"
613         fi
614
615         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
616         then
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';"
624         fi
625
626         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
627         then
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';"
635         fi
636
637         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
638         then
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';"
647         fi
648
649         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
650         then
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';"
661         fi
662
663         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
664         then
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';"
672         fi
673
674         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/proc.frm
675         then
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',"
683           c_p="$c_p                          'NO_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',"
705           c_p="$c_p                         'ORACLE',"
706           c_p="$c_p                         'MSSQL',"
707           c_p="$c_p                         'DB2',"
708           c_p="$c_p                         'MAXDB',"
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',"
714           c_p="$c_p                         'ANSI',"
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';"
732         fi
733
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"
739
740         if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
741             sed -e "
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"
749         fi
750
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
754         fi
755
756         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
757             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
758 CREATE DATABASE mysql;
759 use mysql;
760 $c_d
761 $i_d
762
763 $c_h
764 $i_h
765
766 $c_u
767 $i_u
768
769 $c_f
770 $i_f
771
772 $c_t
773 $c_c
774
775 $c_ht
776 $c_hc
777 $c_hk
778 $c_hr
779
780 $c_tzn
781 $c_tz
782 $c_tzt
783 $c_tztt
784 $c_tzls
785
786 $c_p
787 $c_pp
788 END_OF_DATA
789         then
790             ok
791         cat << END_OF_MSG
792
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:
795
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'
799
800 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
801 mysqladmin section. See the manual for more instructions.
802
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
805
806 END_OF_MSG
807       else
808             fail
809             cat << END_OF_MSG
810 Installation of grant tables FAILED!
811
812 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
813 also try to start the mysqld demon with:
814
815 /usr/sbin/mysqld --skip-grant &
816
817 You can use the command line tool /usr/bin/mysql to connect to the mysql
818 database and look at the grant tables:
819
820 shell> /usr/bin/mysql -u mysql mysql
821 mysql> show tables
822
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/.
827
828 Please check PLD Linux ftp site for newer versions of this package.
829
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!
835
836 END_OF_MSG
837
838         exit 1
839         fi
840 }
841
842 #
843 # End of useful functions.
844 #
845
846 start() {
847         if [ ! -f $MYSQL_ERRLOG ]; then
848                 touch $MYSQL_ERRLOG
849         fi
850         chown mysql:mysql $MYSQL_ERRLOG
851         chmod 640 $MYSQL_ERRLOG
852
853         for mysqldir in $DB_CLUSTERS; do
854                 mysqlstatus "$mysqldir" start
855                 if [ "$MYSQL_STATUS" = "running" ]; then
856                         msg_already_running "MySQL $mysqldir"
857                 else
858                         mysqlstart "$mysqldir"
859                 fi
860         done
861         mysqlsubsys
862 }
863
864 stop() {
865         for mysqldir in $DB_CLUSTERS; do
866                 mysqlstatus "$mysqldir" stop
867                 if [ "$MYSQL_STATUS" = "not running" ]; then
868                         msg_not_running "MySQL $mysqldir"
869                 else
870                         mysqlstop "$mysqldir"
871                 fi
872         done
873         mysqlsubsys
874 }
875
876 RETVAL=0
877 case "$action" in
878   start)
879         start
880         ;;
881   stop)
882         stop
883         ;;
884   status)
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"
890                 else
891                         show "MySQL cluster %s" "$mysqldir"
892                         progress "$MYSQL_STATUS" "$CFAIL"
893                 fi
894                 echo
895         done
896         exit $?
897         ;;
898   restart|force-reload)
899         stop
900         start
901         ;;
902   init)
903         for mysqldir in $DB_CLUSTERS; do
904                 mysqlinit "$mysqldir"
905         done
906         exit $?
907         ;;
908   flush-logs)
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
914                 fi
915         done
916         ;;
917   *)
918         msg_usage "$0 {start|stop|init|restart|force-reload|status}"
919         exit 3
920 esac
921
922 exit $RETVAL
923
924 # vi: shiftwidth=4 tabstop=4
This page took 0.755824 seconds and 4 git commands to generate.