]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
- fixed overmysqldbization
[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 if [ -n "$MYSQL_DB_CLUSTERS" ]; then
25         nls "Warning: MYSQL_DB_CLUSTERS is set. It's obsolete. Use %s instead." /etc/mysql/clusters.conf
26 fi
27
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."
32         fi
33
34 else
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
40         fi
41 fi
42
43
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
48                 exit 1
49         fi
50 else
51         exit 0
52 fi
53
54 action="$1"
55
56 # any db cluster as command line argument?
57 if [ $# -gt 1 ]; then
58         shift
59         # perform action for specified clusters only
60         DB_CLUSTERS="$@"
61 else
62         DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
63 fi
64
65 MYSQL_ERRLOG=/var/log/mysql/err
66
67 #
68 # Useful functions.
69 #
70
71 #
72 # check for mysql status
73 #
74 # arguments:
75 # $1 - db cluster
76 #
77 # sets variables:
78 # MYSQL_STATUS = running | not running | died
79 # MYSQL_PID    = pid of mysqld process
80 #
81 mysqlstatus() {
82         clusterdir="$1"
83         mysqlgetconfig "$clusterdir"
84         
85         MYSQL_STATUS="not running"
86         MYSQL_PID="unknown"
87
88         [ -f "$MYSQL_PIDFILE" ] && MYSQL_PID=$(cat "$MYSQL_PIDFILE")
89
90         if [ ! -d "/proc/$MYSQL_PID" -a "$MYSQL_PID" != "unknown" ]; then
91                 MYSQL_STATUS="died"
92         elif [ -d "/proc/$MYSQL_PID" ]; then
93                 grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline && MYSQL_STATUS="running" || MYSQL_STATUS="not running"
94         fi
95 }
96
97 # get mysql configuration in variables
98 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
99 #
100 # arguments
101 # $1 - db cluster
102
103 mysqlgetconfig() {
104         clusterdir="$1"
105
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
110         else
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
117                 else
118                         config_file="$clusterdir/mysqld.conf"
119                 fi
120         fi
121
122         MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
123         
124         if [ -z "$config_file" ]; then
125                 nls "Error: Can't find config file for %s cluster" "$clusterdir"
126                 exit 6
127         else
128                 MYSQL_CONFIG="$config_file"; export MYSQL_CONFIG
129         fi
130         
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'?"
134                 exit 6
135         fi
136
137         eval `awk '
138 /^[ \t]*\[.*\][ \t]*$/ {
139         match($0,/\[.*\]/)
140         section=substr($0,RSTART+1,RSTART+RLENGTH-3)
141 }
142 section=="mysqld" && $2~"=" {
143         if ($1=="datadir") {
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)
151         }
152 }
153 END {
154         print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
155 }
156 ' $config_file`
157
158
159         if is_yes "$MYSQL_RA_COMPAT"; then
160                 MYSQL_DATA_DIR_SUB=""
161         else
162                 MYSQL_DATA_DIR_SUB="/mysqldb"
163         fi
164                 
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."
168                 exit 6
169         fi
170         
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."
174                 exit 6
175         fi
176
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
180                 exit 6
181         fi
182 }
183
184 # start mysql
185 mysqlstart() {
186         clusterdir="$1"
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"
191                 exit 6
192         fi
193
194         msg_starting "MySQL $clusterdir"
195         busy
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 &
198         sleep 2
199         mysqlstatus "$clusterdir"
200         if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
201                 ok
202         elif [ "$MYSQL_STATUS" = "died" ]; then
203                 RETVAL=1
204                 died
205         else
206                 RETVAL=1
207                 fail
208         fi
209 }
210
211 # stop mysql
212 mysqlstop() {
213         clusterdir="$1"
214         mysqlstatus "$clusterdir"
215         msg_stopping "MySQL $clusterdir"
216         busy
217
218 # TODO
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)?
222
223         # try graceful shutdown -- send shutdown command
224         /usr/bin/mysqladmin --defaults-file=$MYSQL_CONFIG ${MYSQL_SOCKET:+--socket=$MYSQL_SOCKET} shutdown 2>/dev/null
225         mysqlstatus "$clusterdir"
226
227         [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
228         # 3 seconds
229         for nr in 1 2 3; do
230                 [ -d "/proc/$MYSQL_PID" ] && sleep 1
231         done
232         mysqlstatus "$clusterdir"
233         if [ "$MYSQL_STATUS" = "died" ]; then
234                 died
235         elif [ "$MYSQL_STATUS" = "running" ]; then
236                 fail
237         else
238                 ok
239         fi
240
241         # FIXME: should let mysqld remove pid by itself?
242         rm -f "$MYSQL_PIDFILE"
243 }
244
245 #
246 # check for running mysql instances; if any instance is running then
247 # create subsys lock file
248 #
249 mysqlsubsys() {
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
255                         return
256                 fi
257         done
258         rm -f /var/lock/subsys/mysql
259 }
260
261 mysqlinit() {
262         clusterdir="$1"
263
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)."
267                 exit 1
268         fi
269
270         if [ -f "$clusterdir/mysqld.conf" ]; then
271                 mysqlgetconfig "$clusterdir"
272         else
273                 MYSQL_USER="mysql"
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"
278         fi
279
280         nls "Initializing cluster %s" "$clusterdir"
281
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"
287                 return
288         fi
289
290         show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
291         busy
292         TMP=/tmp TMPDIR=/tmp 
293
294                 
295         # Install this in the user table, too
296         hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
297         [ -z "$hostname" ] && hostname="localhost-unknown"
298                 
299         # Check if hostname is valid
300         if [ -z "$hostname" ]; then
301                 deltext
302                 fail
303                 nls "Sorry, the host name is not configured."
304                 nls "Please configure the 'hostname' command to return a hostname."
305                 exit 1
306         elif ! hostname -i >/dev/null 2>&1; then 
307                 deltext
308                 fail
309                 nls "Sorry, the host '%s' could not be looked up." "$hostname"
310                 nls "Please configure the 'hostname' command to return a correct hostname."
311                 exit 1
312         fi
313
314         # Initialize variables
315         c_d="" i_d=""
316         c_h="" i_h=""
317         c_u="" i_u=""
318         c_f="" i_f=""
319         c_t="" c_c=""
320
321         # Check for old tables
322         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
323         then
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)"
343           c_d="$c_d )"
344           c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
345           c_d="$c_d comment='Database privileges';"
346
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');"
349             
350         fi
351
352         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
353         then
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)"
370           c_h="$c_h )"
371           c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
372           c_h="$c_h comment='Host privileges;  Merged with database privileges';"
373         fi
374
375         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
376         then
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)"
410           c_u="$c_u )"
411           c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
412           c_u="$c_u comment='Users and global privileges';"
413
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);
416
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);
419
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);"
421         fi
422
423         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
424         then
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)"
431           c_f="$c_f )"
432           c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
433           c_f="$c_f   comment='User defined functions';"
434         fi
435
436         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
437         then
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)"
449           c_t="$c_t )"
450           c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
451           c_t="$c_t   comment='Table privileges';"
452         fi
453
454         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
455         then
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)"
465           c_c="$c_c )"
466           c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
467           c_c="$c_c   comment='Column privileges';"
468         fi
469
470         mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
471         # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
472         chown root:root "$MYSQL_CLUSTER_DIR"
473     chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
474         chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
475
476         if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
477             sed -e "s#datadir.*=.*#datadir      = $MYSQL_DATA_DIR#g" \
478                 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
479                 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
480                 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
481             chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
482             chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
483         fi
484
485         if [ ! -e /var/lib/mysql/mysql.sock ]; then
486             ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
487         fi
488
489         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
490             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
491 CREATE DATABASE mysql;
492 use mysql;
493 $c_d
494 $i_d
495
496 $c_h
497 $i_h
498
499 $c_u
500 $i_u
501
502 $c_f
503 $i_f
504
505 $c_t
506 $c_c
507 END_OF_DATA
508         then 
509             ok
510         cat << END_OF_MSG
511
512 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
513 This is done (after starting database) with:
514
515 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
516 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
517 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
518
519 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
520 mysqladmin section. See the manual for more instructions.
521
522 IMPORTANT: The configuration file is mysqld.conf in MYSQL_DB_CLUSTERS directories.
523
524 END_OF_MSG
525       else  
526             fail
527             cat << END_OF_MSG
528 Installation of grant tables FAILED!
529
530 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
531 also try to start the mysqld demon with:
532
533 /usr/sbin/mysqld --skip-grant &
534
535 You can use the command line tool /usr/bin/mysql to connect to the mysql
536 database and look at the grant tables:
537
538 shell> /usr/bin/mysql -u mysql mysql
539 mysql> show tables
540
541 Try 'mysqld --help' if you have problems with paths. Setting on
542 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
543 may be helpful. The latest information about MySQL is available on the
544 web at http://www.mysql.com/.
545
546 Please check PLD ftp site for newer versions of this package.
547
548 Please consult the MySQL manual section: 'Problems running
549 mysql_install_db', and the manual section that describes problems on
550 your OS.  Another information source is the MySQL email archive.
551 Please check all of the above before mailing us!  And if you do mail
552 us, you MUST use the /usr/bin/mysqlbug script!  
553
554 END_OF_MSG
555
556         exit 1
557         fi
558 }
559
560 #
561 # End of useful functions.
562 #
563
564 RETVAL=0
565 case "$action" in
566   start)
567         if [ ! -f $MYSQL_ERRLOG ]; then
568                 touch $MYSQL_ERRLOG
569         fi
570         chown mysql:mysql $MYSQL_ERRLOG
571         chmod 640 $MYSQL_ERRLOG
572
573         for mysqldir in $DB_CLUSTERS; do
574                 mysqlstatus "$mysqldir"
575                 if [ "$MYSQL_STATUS" = "running" ]; then
576                         msg_already_running "MySQL $mysqldir"
577                 else
578                         mysqlstart "$mysqldir"
579                 fi
580         done
581         mysqlsubsys
582         ;;
583   stop)
584         for mysqldir in $DB_CLUSTERS; do
585                 mysqlstatus "$mysqldir"
586                 if [ "$MYSQL_STATUS" = "not running" ]; then
587                         msg_not_running "MySQL $mysqldir"
588                 else
589                         mysqlstop "$mysqldir"
590                 fi
591         done
592         mysqlsubsys
593         ;;
594   status)
595         status mysqld
596         for mysqldir in $DB_CLUSTERS; do
597                 mysqlstatus "$mysqldir"
598                 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
599         done
600         exit $?
601         ;;
602   restart|force-reload)
603         $0 stop $DB_CLUSTERS
604         $0 start $DB_CLUSTERS
605         exit $?
606         ;;
607   init)
608         for mysqldir in $DB_CLUSTERS; do
609                 mysqlinit "$mysqldir"
610         done
611         exit $?
612         ;;
613   flush-logs)
614         for mysqldir in $DB_CLUSTERS; do
615             mysqlgetconfig "$mysqldir"
616             /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
617         done
618         ;;
619   *)
620         msg_usage "$0 {start|stop|init|restart|force-reload|status}"
621         exit 3
622 esac
623
624 exit $RETVAL
625
626 # vi: shiftwidth=4 tabstop=4
This page took 0.126292 seconds and 4 git commands to generate.