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