]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
convert to utf8
[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 >/dev/null 2>&1
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/mysqldb/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 comment='Database privileges';"
345
346           i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
347           INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
348             
349         fi
350
351         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
352         then
353           c_h="$c_h CREATE TABLE host ("
354           c_h="$c_h  Host char(60) DEFAULT '' NOT NULL,"
355           c_h="$c_h  Db char(64) DEFAULT '' NOT NULL,"
356           c_h="$c_h  Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
357           c_h="$c_h  Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
358           c_h="$c_h  Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
359           c_h="$c_h  Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
360           c_h="$c_h  Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
361           c_h="$c_h  Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
362           c_h="$c_h  Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
363           c_h="$c_h  References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364           c_h="$c_h  Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365           c_h="$c_h  Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366           c_h="$c_h  Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
367           c_h="$c_h  Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368           c_h="$c_h  PRIMARY KEY Host (Host,Db)"
369           c_h="$c_h )"
370           c_h="$c_h comment='Host privileges;  Merged with database privileges';"
371         fi
372
373         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
374         then
375           c_u="$c_u CREATE TABLE user ("
376           c_u="$c_u   Host char(60) DEFAULT '' NOT NULL,"
377           c_u="$c_u   User char(16) DEFAULT '' NOT NULL,"
378           c_u="$c_u   Password char(16) DEFAULT '' NOT NULL,"
379           c_u="$c_u   Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
380           c_u="$c_u   Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
381           c_u="$c_u   Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
382           c_u="$c_u   Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
383           c_u="$c_u   Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
384           c_u="$c_u   Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385           c_u="$c_u   Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386           c_u="$c_u   Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387           c_u="$c_u   Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388           c_u="$c_u   File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389           c_u="$c_u   Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390           c_u="$c_u   References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391           c_u="$c_u   Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392           c_u="$c_u   Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393           c_u="$c_u   Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
394           c_u="$c_u   Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
395           c_u="$c_u   Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
396           c_u="$c_u   Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
397           c_u="$c_u   Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
398           c_u="$c_u   Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
399           c_u="$c_u   Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
400           c_u="$c_u   ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
401           c_u="$c_u   ssl_cipher BLOB NOT NULL,"
402           c_u="$c_u   x509_issuer BLOB NOT NULL,"
403           c_u="$c_u   x509_subject BLOB NOT NULL,"
404           c_u="$c_u   max_questions int(11) unsigned DEFAULT 0  NOT NULL,"
405           c_u="$c_u   max_updates int(11) unsigned DEFAULT 0  NOT NULL,"
406           c_u="$c_u   max_connections int(11) unsigned DEFAULT 0  NOT NULL,"
407           c_u="$c_u   PRIMARY KEY Host (Host,User)"
408           c_u="$c_u )"
409           c_u="$c_u comment='Users and global privileges';"
410
411           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);
412           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);
413
414           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);
415           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);
416
417           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);"
418         fi
419
420         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
421         then
422           c_f="$c_f CREATE TABLE func ("
423           c_f="$c_f   name char(64) DEFAULT '' NOT NULL,"
424           c_f="$c_f   ret tinyint(1) DEFAULT '0' NOT NULL,"
425           c_f="$c_f   dl char(128) DEFAULT '' NOT NULL,"
426           c_f="$c_f   type enum ('function','aggregate') NOT NULL,"
427           c_f="$c_f   PRIMARY KEY (name)"
428           c_f="$c_f )"
429           c_f="$c_f   comment='User defined functions';"
430         fi
431
432         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
433         then
434           c_t="$c_t CREATE TABLE tables_priv ("
435           c_t="$c_t   Host char(60) DEFAULT '' NOT NULL,"
436           c_t="$c_t   Db char(64) DEFAULT '' NOT NULL,"
437           c_t="$c_t   User char(16) DEFAULT '' NOT NULL,"
438           c_t="$c_t   Table_name char(60) DEFAULT '' NOT NULL,"
439           c_t="$c_t   Grantor char(77) DEFAULT '' NOT NULL,"
440           c_t="$c_t   Timestamp timestamp(14),"
441           c_t="$c_t   Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
442           c_t="$c_t   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
443           c_t="$c_t   PRIMARY KEY (Host,Db,User,Table_name),"
444           c_t="$c_t   KEY Grantor (Grantor)"
445           c_t="$c_t )"
446           c_t="$c_t   comment='Table privileges';"
447         fi
448
449         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
450         then
451           c_c="$c_c CREATE TABLE columns_priv ("
452           c_c="$c_c   Host char(60) DEFAULT '' NOT NULL,"
453           c_c="$c_c   Db char(60) DEFAULT '' NOT NULL,"
454           c_c="$c_c   User char(16) DEFAULT '' NOT NULL,"
455           c_c="$c_c   Table_name char(60) DEFAULT '' NOT NULL,"
456           c_c="$c_c   Column_name char(60) DEFAULT '' NOT NULL,"
457           c_c="$c_c   Timestamp timestamp(14),"
458           c_c="$c_c   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
459           c_c="$c_c   PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
460           c_c="$c_c )"
461           c_c="$c_c   comment='Column privileges';"
462         fi
463
464         mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
465         # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
466         chown root:root "$MYSQL_CLUSTER_DIR"
467     chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
468         chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
469
470         if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
471             sed -e "s#datadir.*=.*#datadir      = $MYSQL_DATA_DIR#g" \
472                 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
473                 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
474                 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
475             chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
476             chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
477         fi
478
479         if [ ! -e /var/lib/mysql/mysql.sock ]; then
480             ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
481         fi
482
483         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
484             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
485 CREATE DATABASE mysql;
486 use mysql;
487 $c_d
488 $i_d
489
490 $c_h
491 $i_h
492
493 $c_u
494 $i_u
495
496 $c_f
497 $i_f
498
499 $c_t
500 $c_c
501 END_OF_DATA
502         then 
503             ok
504         cat << END_OF_MSG
505
506 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
507 This is done (after starting database) with:
508
509 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
510 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
511 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
512
513 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
514 mysqladmin section. See the manual for more instructions.
515
516 IMPORTANT: The configuration file is mysqld.conf in MYSQL_DB_CLUSTERS directories.
517
518 END_OF_MSG
519       else  
520             fail
521             cat << END_OF_MSG
522 Installation of grant tables FAILED!
523
524 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
525 also try to start the mysqld demon with:
526
527 /usr/sbin/mysqld --skip-grant &
528
529 You can use the command line tool /usr/bin/mysql to connect to the mysql
530 database and look at the grant tables:
531
532 shell> /usr/bin/mysql -u mysql mysql
533 mysql> show tables
534
535 Try 'mysqld --help' if you have problems with paths. Setting on
536 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
537 may be helpful. The latest information about MySQL is available on the
538 web at http://www.mysql.com/.
539
540 Please check PLD ftp site for newer versions of this package.
541
542 Please consult the MySQL manual section: 'Problems running
543 mysql_install_db', and the manual section that describes problems on
544 your OS.  Another information source is the MySQL email archive.
545 Please check all of the above before mailing us!  And if you do mail
546 us, you MUST use the /usr/bin/mysqlbug script!  
547
548 END_OF_MSG
549
550         exit 1
551         fi
552 }
553
554 #
555 # End of useful functions.
556 #
557
558 RETVAL=0
559 case "$action" in
560   start)
561         if [ ! -f $MYSQL_ERRLOG ]; then
562                 touch $MYSQL_ERRLOG
563         fi
564         chown mysql:mysql $MYSQL_ERRLOG
565         chmod 640 $MYSQL_ERRLOG
566
567         for mysqldir in $DB_CLUSTERS; do
568                 mysqlstatus "$mysqldir"
569                 if [ "$MYSQL_STATUS" = "running" ]; then
570                         msg_already_running "MySQL $mysqldir"
571                 else
572                         mysqlstart "$mysqldir"
573                 fi
574         done
575         mysqlsubsys
576         ;;
577   stop)
578         for mysqldir in $DB_CLUSTERS; do
579                 mysqlstatus "$mysqldir"
580                 if [ "$MYSQL_STATUS" = "not running" ]; then
581                         msg_not_running "MySQL $mysqldir"
582                 else
583                         mysqlstop "$mysqldir"
584                 fi
585         done
586         mysqlsubsys
587         ;;
588   status)
589         status mysqld
590         for mysqldir in $DB_CLUSTERS; do
591                 mysqlstatus "$mysqldir"
592                 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
593         done
594         exit $?
595         ;;
596   restart|force-reload)
597         $0 stop $DB_CLUSTERS
598         $0 start $DB_CLUSTERS
599         exit $?
600         ;;
601   init)
602         for mysqldir in $DB_CLUSTERS; do
603                 mysqlinit "$mysqldir"
604         done
605         exit $?
606         ;;
607   flush-logs)
608         for mysqldir in $DB_CLUSTERS; do
609             mysqlgetconfig "$mysqldir"
610             /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
611         done
612         ;;
613   *)
614         msg_usage "$0 {start|stop|init|restart|force-reload|status}"
615         exit 3
616 esac
617
618 exit $RETVAL
619
620 # vi: shiftwidth=4 tabstop=4
This page took 0.093789 seconds and 3 git commands to generate.