]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
- removed obsolete nptl patch
[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
279                 # this $MYSQL_CONFIG will be created later
280                 MYSQL_CONFIG="$MYSQL_CLUSTER_DIR/mysqld.conf"
281         fi
282
283         nls "Initializing cluster %s" "$clusterdir"
284
285         # Check if not exist init database
286         if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
287                 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
288                 nls "before initializing database."
289                 nls "For now skipping cluster %s." "$clusterdir"
290                 return
291         fi
292
293         show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
294         busy
295         TMP=/tmp TMPDIR=/tmp
296
297
298         # Install this in the user table, too
299         hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
300         [ -z "$hostname" ] && hostname="localhost-unknown"
301
302         # Check if hostname is valid
303         if [ -z "$hostname" ]; then
304                 deltext
305                 fail
306                 nls "Sorry, the host name is not configured."
307                 nls "Please configure the 'hostname' command to return a hostname."
308                 exit 1
309         elif ! hostname -i >/dev/null 2>&1; then
310                 deltext
311                 fail
312                 nls "Sorry, the host '%s' could not be looked up." "$hostname"
313                 nls "Please configure the 'hostname' command to return a correct hostname."
314                 exit 1
315         fi
316
317         # Initialize variables
318         c_d="" i_d="" c_ht=""  c_tz=""
319         c_h="" i_h="" c_hc=""  c_tzt=""
320         c_u="" i_u="" c_hk=""  c_tztt=""
321         c_f="" i_f="" c_hr=""  c_tzls=""
322         c_t="" c_c="" c_tzn=""
323
324         # Check for old tables
325         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
326         then
327           # mysqld --bootstrap wants one command/line
328           c_d="$c_d CREATE TABLE db ("
329           c_d="$c_d   Host char(60) DEFAULT '' NOT NULL,"
330           c_d="$c_d   Db char(64) DEFAULT '' NOT NULL,"
331           c_d="$c_d   User char(16) DEFAULT '' NOT NULL,"
332           c_d="$c_d   Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
333           c_d="$c_d   Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
334           c_d="$c_d   Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
335           c_d="$c_d   Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
336           c_d="$c_d   Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
337           c_d="$c_d   Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
338           c_d="$c_d   Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
339           c_d="$c_d   References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
340           c_d="$c_d   Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
341           c_d="$c_d   Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
342           c_d="$c_d   Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
343           c_d="$c_d   Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
344           c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
345           c_d="$c_d KEY User (User)"
346           c_d="$c_d )"
347           c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
348           c_d="$c_d comment='Database privileges';"
349
350           i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
351           INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
352
353         fi
354
355         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
356         then
357           c_h="$c_h CREATE TABLE host ("
358           c_h="$c_h  Host char(60) DEFAULT '' NOT NULL,"
359           c_h="$c_h  Db char(64) DEFAULT '' NOT NULL,"
360           c_h="$c_h  Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
361           c_h="$c_h  Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
362           c_h="$c_h  Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
363           c_h="$c_h  Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364           c_h="$c_h  Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365           c_h="$c_h  Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366           c_h="$c_h  Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
367           c_h="$c_h  References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368           c_h="$c_h  Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
369           c_h="$c_h  Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
370           c_h="$c_h  Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
371           c_h="$c_h  Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
372           c_h="$c_h  PRIMARY KEY Host (Host,Db)"
373           c_h="$c_h )"
374           c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
375           c_h="$c_h comment='Host privileges;  Merged with database privileges';"
376         fi
377
378         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
379         then
380           c_u="$c_u CREATE TABLE user ("
381           c_u="$c_u   Host char(60) DEFAULT '' NOT NULL,"
382           c_u="$c_u   User char(16) DEFAULT '' NOT NULL,"
383           c_u="$c_u   Password char(41) DEFAULT '' NOT NULL,"
384           c_u="$c_u   Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
385           c_u="$c_u   Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
386           c_u="$c_u   Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
387           c_u="$c_u   Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
388           c_u="$c_u   Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
389           c_u="$c_u   Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
390           c_u="$c_u   Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
391           c_u="$c_u   Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
392           c_u="$c_u   Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
393           c_u="$c_u   File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
394           c_u="$c_u   Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
395           c_u="$c_u   References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
396           c_u="$c_u   Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
397           c_u="$c_u   Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
398           c_u="$c_u   Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
399           c_u="$c_u   Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
400           c_u="$c_u   Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
401           c_u="$c_u   Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
402           c_u="$c_u   Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
403           c_u="$c_u   Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
404           c_u="$c_u   Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
405           c_u="$c_u   ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
406           c_u="$c_u   ssl_cipher BLOB NOT NULL,"
407           c_u="$c_u   x509_issuer BLOB NOT NULL,"
408           c_u="$c_u   x509_subject BLOB NOT NULL,"
409           c_u="$c_u   max_questions int(11) unsigned DEFAULT 0  NOT NULL,"
410           c_u="$c_u   max_updates int(11) unsigned DEFAULT 0  NOT NULL,"
411           c_u="$c_u   max_connections int(11) unsigned DEFAULT 0  NOT NULL,"
412           c_u="$c_u   PRIMARY KEY Host (Host,User)"
413           c_u="$c_u )"
414           c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
415           c_u="$c_u comment='Users and global privileges';"
416
417           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);
418           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);
419
420           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);
421           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);
422
423           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);"
424         fi
425
426         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
427         then
428           c_f="$c_f CREATE TABLE func ("
429           c_f="$c_f   name char(64) DEFAULT '' NOT NULL,"
430           c_f="$c_f   ret tinyint(1) DEFAULT '0' NOT NULL,"
431           c_f="$c_f   dl char(128) DEFAULT '' NOT NULL,"
432           c_f="$c_f   type enum ('function','aggregate') NOT NULL,"
433           c_f="$c_f   PRIMARY KEY (name)"
434           c_f="$c_f )"
435           c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
436           c_f="$c_f comment='User defined functions';"
437         fi
438
439         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
440         then
441           c_t="$c_t CREATE TABLE tables_priv ("
442           c_t="$c_t   Host char(60) DEFAULT '' NOT NULL,"
443           c_t="$c_t   Db char(64) DEFAULT '' NOT NULL,"
444           c_t="$c_t   User char(16) DEFAULT '' NOT NULL,"
445           c_t="$c_t   Table_name char(60) DEFAULT '' NOT NULL,"
446           c_t="$c_t   Grantor char(77) DEFAULT '' NOT NULL,"
447           c_t="$c_t   Timestamp timestamp(14),"
448           c_t="$c_t   Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
449           c_t="$c_t   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
450           c_t="$c_t   PRIMARY KEY (Host,Db,User,Table_name),"
451           c_t="$c_t   KEY Grantor (Grantor)"
452           c_t="$c_t )"
453           c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
454           c_t="$c_t comment='Table privileges';"
455         fi
456
457         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
458         then
459           c_c="$c_c CREATE TABLE columns_priv ("
460           c_c="$c_c   Host char(60) DEFAULT '' NOT NULL,"
461           c_c="$c_c   Db char(64) DEFAULT '' NOT NULL,"
462           c_c="$c_c   User char(16) DEFAULT '' NOT NULL,"
463           c_c="$c_c   Table_name char(64) DEFAULT '' NOT NULL,"
464           c_c="$c_c   Column_name char(64) DEFAULT '' NOT NULL,"
465           c_c="$c_c   Timestamp timestamp(14),"
466           c_c="$c_c   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
467           c_c="$c_c   PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
468           c_c="$c_c )"
469           c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
470           c_c="$c_c comment='Column privileges';"
471         fi
472
473         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
474         then
475           c_ht="$c_ht CREATE TABLE help_topic ("
476           c_ht="$c_ht   help_topic_id    int unsigned not null,"
477           c_ht="$c_ht   name             varchar(64) not null,"
478       c_ht="$c_ht   help_category_id smallint unsigned not null,"
479           c_ht="$c_ht   description      text not null,"
480           c_ht="$c_ht   example          text not null,"
481           c_ht="$c_ht   url              varchar(128) not null,"
482           c_ht="$c_ht   primary key      (help_topic_id),"
483           c_ht="$c_ht   unique index     (name)"
484           c_ht="$c_ht )"
485           c_ht="$c_ht CHARACTER SET utf8"
486           c_ht="$c_ht comment='help topics';"
487         fi
488
489         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
490         then
491           c_hc="$c_hc CREATE TABLE help_category ("
492           c_hc="$c_hc   help_category_id   smallint unsigned not null,"
493           c_hc="$c_hc   name               varchar(64) not null,"
494           c_hc="$c_hc   parent_category_id smallint unsigned null,"
495           c_hc="$c_hc   url                varchar(128) not null,"
496           c_hc="$c_hc   primary key        (help_category_id),"
497           c_hc="$c_hc   unique index       (name)"
498           c_hc="$c_hc )"
499           c_hc="$c_hc   CHARACTER SET utf8"
500           c_hc="$c_hc comment='help categories';"
501         fi
502
503         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
504         then
505           c_hk="$c_hk CREATE TABLE help_keyword ("
506           c_hk="$c_hk   help_keyword_id  int unsigned not null,"
507           c_hk="$c_hk   name             varchar(64) not null,"
508           c_hk="$c_hk   primary key      (help_keyword_id),"
509           c_hk="$c_hk   unique index     (name)"
510           c_hk="$c_hk )"
511           c_hk="$c_hk   CHARACTER SET utf8"
512           c_hk="$c_hk comment='help keywords';"
513         fi
514
515         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
516         then
517           c_hr="$c_hr CREATE TABLE help_relation ("
518           c_hr="$c_hr   help_topic_id    int unsigned not null references help_topic,"
519           c_hr="$c_hr   help_keyword_id  int unsigned not null references help_keyword,"
520           c_hr="$c_hr   primary key      (help_keyword_id, help_topic_id)"
521           c_hr="$c_hr )"
522           c_hr="$c_hr   CHARACTER SET utf8"
523           c_hr="$c_hr comment='keyword-topic relation';"
524         fi
525
526         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
527         then
528           c_tzn="$c_tzn CREATE TABLE time_zone_name ("
529           c_tzn="$c_tzn   Name char(64) NOT NULL,"
530           c_tzn="$c_tzn   Time_zone_id int unsigned NOT NULL,"
531           c_tzn="$c_tzn   PRIMARY KEY Name (Name)"
532           c_tzn="$c_tzn )"
533           c_tzn="$c_tzn   CHARACTER SET utf8"
534           c_tzn="$c_tzn comment='Time zone names';"
535         fi
536
537         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
538         then
539           c_tz="$c_tz CREATE TABLE time_zone ("
540           c_tz="$c_tz   Time_zone_id int unsigned NOT NULL auto_increment,"
541           c_tz="$c_tz   Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
542           c_tz="$c_tz   PRIMARY KEY TzId (Time_zone_id)"
543           c_tz="$c_tz )"
544           c_tz="$c_tz   CHARACTER SET utf8"
545           c_tz="$c_tz comment='Time zones';"
546         fi
547
548         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
549         then
550           c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
551           c_tzt="$c_tzt   Time_zone_id int unsigned NOT NULL,"
552           c_tzt="$c_tzt   Transition_time bigint signed NOT NULL,"
553           c_tzt="$c_tzt   Transition_type_id int unsigned NOT NULL,"
554           c_tzt="$c_tzt   PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
555           c_tzt="$c_tzt )"
556           c_tzt="$c_tzt   CHARACTER SET utf8"
557           c_tzt="$c_tzt comment='Time zone transitions';"
558         fi
559
560         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
561         then
562           c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
563           c_tztt="$c_tztt   Time_zone_id int unsigned NOT NULL,"
564           c_tztt="$c_tztt   Transition_type_id int unsigned NOT NULL,"
565           c_tztt="$c_tztt   Offset int signed DEFAULT 0 NOT NULL,"
566           c_tztt="$c_tztt   Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
567           c_tztt="$c_tztt   Abbreviation char(8) DEFAULT '' NOT NULL,"
568           c_tztt="$c_tztt   PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
569           c_tztt="$c_tztt )"
570           c_tztt="$c_tztt   CHARACTER SET utf8"
571           c_tztt="$c_tztt comment='Time zone transition types';"
572         fi
573
574         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
575         then
576           c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
577           c_tzls="$c_tzls   Transition_time bigint signed NOT NULL,"
578           c_tzls="$c_tzls   Correction int signed NOT NULL,"
579           c_tzls="$c_tzls   PRIMARY KEY TranTime (Transition_time)"
580           c_tzls="$c_tzls )"
581           c_tzls="$c_tzls CHARACTER SET utf8"
582           c_tzls="$c_tzls   comment='Leap seconds information for time zones';"
583         fi
584
585         mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
586         # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
587         chown root:root "$MYSQL_CLUSTER_DIR"
588     chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
589         chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
590
591         if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
592             sed -e "s#datadir.*=.*#datadir      = $MYSQL_DATA_DIR#g" \
593                 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
594                 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
595                 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
596             chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
597             chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
598         fi
599
600         if [ ! -e /var/lib/mysql/mysql.sock ]; then
601             ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
602         fi
603
604         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
605             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
606 CREATE DATABASE mysql;
607 use mysql;
608 $c_d
609 $i_d
610
611 $c_h
612 $i_h
613
614 $c_u
615 $i_u
616
617 $c_f
618 $i_f
619
620 $c_t
621 $c_c
622
623 $c_ht
624 $c_hc
625 $c_hk
626 $c_hr
627
628 $c_tzn
629 $c_tz
630 $c_tzt
631 $c_tztt
632 $c_tzls
633 END_OF_DATA
634         then
635             ok
636         cat << END_OF_MSG
637
638 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
639 This is done (after starting database) with:
640
641 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
642 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
643 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
644
645 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
646 mysqladmin section. See the manual for more instructions.
647
648 END_OF_MSG
649       else
650             fail
651             cat << END_OF_MSG
652 Installation of grant tables FAILED!
653
654 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
655 also try to start the mysqld demon with:
656
657 /usr/sbin/mysqld --skip-grant &
658
659 You can use the command line tool /usr/bin/mysql to connect to the mysql
660 database and look at the grant tables:
661
662 shell> /usr/bin/mysql -u mysql mysql
663 mysql> show tables
664
665 Try 'mysqld --help' if you have problems with paths. Setting on
666 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
667 may be helpful. The latest information about MySQL is available on the
668 web at http://www.mysql.com/.
669
670 Please check PLD Linux ftp site for newer versions of this package.
671
672 Please consult the MySQL manual section: 'Problems running
673 mysql_install_db', and the manual section that describes problems on
674 your OS.  Another information source is the MySQL email archive.
675 Please check all of the above before mailing us!  And if you do mail
676 us, you MUST use the /usr/bin/mysqlbug script!
677
678 END_OF_MSG
679
680         exit 1
681         fi
682 }
683
684 #
685 # End of useful functions.
686 #
687
688 RETVAL=0
689 case "$action" in
690   start)
691         if [ ! -f $MYSQL_ERRLOG ]; then
692                 touch $MYSQL_ERRLOG
693         fi
694         chown mysql:mysql $MYSQL_ERRLOG
695         chmod 640 $MYSQL_ERRLOG
696
697         for mysqldir in $DB_CLUSTERS; do
698                 mysqlstatus "$mysqldir"
699                 if [ "$MYSQL_STATUS" = "running" ]; then
700                         msg_already_running "MySQL $mysqldir"
701                 else
702                         mysqlstart "$mysqldir"
703                 fi
704         done
705         mysqlsubsys
706         ;;
707   stop)
708         for mysqldir in $DB_CLUSTERS; do
709                 mysqlstatus "$mysqldir"
710                 if [ "$MYSQL_STATUS" = "not running" ]; then
711                         msg_not_running "MySQL $mysqldir"
712                 else
713                         mysqlstop "$mysqldir"
714                 fi
715         done
716         mysqlsubsys
717         ;;
718   status)
719         status mysqld
720         for mysqldir in $DB_CLUSTERS; do
721                 mysqlstatus "$mysqldir"
722                 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
723         done
724         exit $?
725         ;;
726   restart|force-reload)
727         $0 stop $DB_CLUSTERS
728         $0 start $DB_CLUSTERS
729         exit $?
730         ;;
731   init)
732         for mysqldir in $DB_CLUSTERS; do
733                 mysqlinit "$mysqldir"
734         done
735         exit $?
736         ;;
737   flush-logs)
738         for mysqldir in $DB_CLUSTERS; do
739             mysqlgetconfig "$mysqldir"
740                 # just if mysqld is really running
741                 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
742                         /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
743                 fi
744         done
745         ;;
746   *)
747         msg_usage "$0 {start|stop|init|restart|force-reload|status}"
748         exit 3
749 esac
750
751 exit $RETVAL
752
753 # vi: shiftwidth=4 tabstop=4
This page took 0.094302 seconds and 3 git commands to generate.