]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
- preserve indenting in mysqld.conf
[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="" c_p=""
319         c_pp=""
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') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
330           c_d="$c_d   Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
331           c_d="$c_d   Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
332           c_d="$c_d   Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
333           c_d="$c_d   Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
334           c_d="$c_d   Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
335           c_d="$c_d   Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
336           c_d="$c_d   References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
337           c_d="$c_d   Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
338           c_d="$c_d   Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
339           c_d="$c_d   Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
340           c_d="$c_d   Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
341           c_d="$c_d   Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
342           c_d="$c_d   Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
343           c_d="$c_d   Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
344           c_d="$c_d   Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
345           c_d="$c_d   Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
346           c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
347           c_d="$c_d KEY User (User)"
348           c_d="$c_d )"
349           c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
350           c_d="$c_d comment='Database privileges';"
351
352           i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N');
353           INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N');"
354                 
355         fi
356
357         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
358         then
359           c_h="$c_h CREATE TABLE host ("
360           c_h="$c_h  Host char(60) DEFAULT '' NOT NULL,"
361           c_h="$c_h  Db char(64) DEFAULT '' NOT NULL,"
362           c_h="$c_h  Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
363           c_h="$c_h  Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
364           c_h="$c_h  Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
365           c_h="$c_h  Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
366           c_h="$c_h  Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
367           c_h="$c_h  Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
368           c_h="$c_h  Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
369           c_h="$c_h  References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
370           c_h="$c_h  Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
371           c_h="$c_h  Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
372           c_h="$c_h  Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
373           c_h="$c_h  Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
374           c_h="$c_h  Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
375           c_h="$c_h  Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
376           c_h="$c_h  Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
377           c_h="$c_h  Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
378           c_h="$c_h  Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
379           c_h="$c_h  PRIMARY KEY Host (Host,Db)"
380           c_h="$c_h )"
381           c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
382           c_h="$c_h comment='Host privileges;  Merged with database privileges';"
383         fi
384
385         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
386         then
387           c_u="$c_u CREATE TABLE user ("
388           c_u="$c_u   Host char(60) binary DEFAULT '' NOT NULL,"
389           c_u="$c_u   User char(16) binary DEFAULT '' NOT NULL,"
390           c_u="$c_u   Password char(41) character set latin1 collate latin1_bin DEFAULT '' NOT NULL,"
391           c_u="$c_u   Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
392           c_u="$c_u   Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
393           c_u="$c_u   Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
394           c_u="$c_u   Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
395           c_u="$c_u   Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
396           c_u="$c_u   Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
397           c_u="$c_u   Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
398           c_u="$c_u   Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
399           c_u="$c_u   Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
400           c_u="$c_u   File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
401           c_u="$c_u   Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
402           c_u="$c_u   References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
403           c_u="$c_u   Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
404           c_u="$c_u   Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
405           c_u="$c_u   Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
406           c_u="$c_u   Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
407           c_u="$c_u   Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
408           c_u="$c_u   Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
409           c_u="$c_u   Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
410           c_u="$c_u   Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
411           c_u="$c_u   Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
412           c_u="$c_u   Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
413           c_u="$c_u   Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
414           c_u="$c_u   Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
415           c_u="$c_u   Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
416           c_u="$c_u   Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
417           c_u="$c_u   ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
418           c_u="$c_u   ssl_cipher BLOB NOT NULL,"
419           c_u="$c_u   x509_issuer BLOB NOT NULL,"
420           c_u="$c_u   x509_subject BLOB NOT NULL,"
421           c_u="$c_u   max_questions int(11) unsigned DEFAULT 0  NOT NULL,"
422           c_u="$c_u   max_updates int(11) unsigned DEFAULT 0  NOT NULL,"
423           c_u="$c_u   max_connections int(11) unsigned DEFAULT 0  NOT NULL,"
424           c_u="$c_u   max_user_connections int(11) unsigned DEFAULT 0  NOT NULL,"
425           c_u="$c_u   PRIMARY KEY Host (Host,User)"
426           c_u="$c_u ) engine=MyISAM"
427           c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
428           c_u="$c_u comment='Users and global privileges';"
429
430
431           i_u="INSERT INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
432           INSERT INTO user VALUES ('$hostname',          'mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
433           INSERT INTO user (host,user) values ('localhost','');
434           INSERT INTO user (host,user) values ('$hostname','');
435           INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0);"
436         fi
437
438         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
439         then
440           c_f="$c_f CREATE TABLE func ("
441           c_f="$c_f   name char(64) DEFAULT '' NOT NULL,"
442           c_f="$c_f   ret tinyint(1) DEFAULT '0' NOT NULL,"
443           c_f="$c_f   dl char(128) DEFAULT '' NOT NULL,"
444           c_f="$c_f   type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL,"
445           c_f="$c_f   PRIMARY KEY (name)"
446           c_f="$c_f )"
447           c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
448           c_f="$c_f comment='User defined functions';"
449         fi
450
451         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
452         then
453           c_t="$c_t CREATE TABLE tables_priv ("
454           c_t="$c_t   Host char(60) DEFAULT '' NOT NULL,"
455           c_t="$c_t   Db char(64) DEFAULT '' NOT NULL,"
456           c_t="$c_t   User char(16) DEFAULT '' NOT NULL,"
457           c_t="$c_t   Table_name char(60) DEFAULT '' NOT NULL,"
458           c_t="$c_t   Grantor char(77) DEFAULT '' NOT NULL,"
459           c_t="$c_t   Timestamp timestamp(14),"
460           c_t="$c_t   Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index', 'Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
461           c_t="$c_t   Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
462           c_t="$c_t   PRIMARY KEY (Host,Db,User,Table_name),"
463           c_t="$c_t   KEY Grantor (Grantor)"
464           c_t="$c_t )"
465           c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
466           c_t="$c_t comment='Table privileges';"
467         fi
468
469         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
470         then
471           c_c="$c_c CREATE TABLE columns_priv ("
472           c_c="$c_c   Host char(60) DEFAULT '' NOT NULL,"
473           c_c="$c_c   Db char(64) DEFAULT '' NOT NULL,"
474           c_c="$c_c   User char(16) DEFAULT '' NOT NULL,"
475           c_c="$c_c   Table_name char(64) DEFAULT '' NOT NULL,"
476           c_c="$c_c   Column_name char(64) DEFAULT '' NOT NULL,"
477           c_c="$c_c   Timestamp timestamp(14),"
478           c_c="$c_c   Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
479           c_c="$c_c   PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
480           c_c="$c_c )"
481           c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
482           c_c="$c_c comment='Column privileges';"
483         fi
484
485         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/procs_priv.frm
486         then
487       c_pp="$c_pp CREATE TABLE procs_priv ("
488           c_pp="$c_pp   Host char(60) binary DEFAULT '' NOT NULL,"
489           c_pp="$c_pp   Db char(64) binary DEFAULT '' NOT NULL,"
490           c_pp="$c_pp   User char(16) binary DEFAULT '' NOT NULL,"
491           c_pp="$c_pp   Routine_name char(64) binary DEFAULT '' NOT NULL,"
492           c_pp="$c_pp   Routine_type enum('FUNCTION','PROCEDURE') NOT NULL,"
493           c_pp="$c_pp   Grantor char(77) DEFAULT '' NOT NULL,"
494           c_pp="$c_pp   Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
495           c_pp="$c_pp   Timestamp timestamp(14),"
496           c_pp="$c_pp   PRIMARY KEY (Host,Db,User,Routine_name,Routine_type),"
497           c_pp="$c_pp   KEY Grantor (Grantor)"
498           c_pp="$c_pp )"
499           c_pp="$c_pp CHARACTER SET utf8 COLLATE utf8_bin"
500           c_pp="$c_pp   comment='Procedure privileges';"
501     fi
502
503
504         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_topic.frm
505         then
506           c_ht="$c_ht CREATE TABLE help_topic ("
507           c_ht="$c_ht   help_topic_id    int unsigned not null,"
508           c_ht="$c_ht   name             varchar(64) not null,"
509       c_ht="$c_ht   help_category_id smallint unsigned not null,"
510           c_ht="$c_ht   description      text not null,"
511           c_ht="$c_ht   example          text not null,"
512           c_ht="$c_ht   url              varchar(128) not null,"
513           c_ht="$c_ht   primary key      (help_topic_id),"
514           c_ht="$c_ht   unique index     (name)"
515           c_ht="$c_ht )"
516           c_ht="$c_ht CHARACTER SET utf8"
517           c_ht="$c_ht comment='help topics';"
518         fi
519
520         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_category.frm
521         then
522           c_hc="$c_hc CREATE TABLE help_category ("
523           c_hc="$c_hc   help_category_id   smallint unsigned not null,"
524           c_hc="$c_hc   name               varchar(64) not null,"
525           c_hc="$c_hc   parent_category_id smallint unsigned null,"
526           c_hc="$c_hc   url                varchar(128) not null,"
527           c_hc="$c_hc   primary key        (help_category_id),"
528           c_hc="$c_hc   unique index       (name)"
529           c_hc="$c_hc )"
530           c_hc="$c_hc   CHARACTER SET utf8"
531           c_hc="$c_hc comment='help categories';"
532         fi
533
534         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_keyword.frm
535         then
536           c_hk="$c_hk CREATE TABLE help_keyword ("
537           c_hk="$c_hk   help_keyword_id  int unsigned not null,"
538           c_hk="$c_hk   name             varchar(64) not null,"
539           c_hk="$c_hk   primary key      (help_keyword_id),"
540           c_hk="$c_hk   unique index     (name)"
541           c_hk="$c_hk )"
542           c_hk="$c_hk   CHARACTER SET utf8"
543           c_hk="$c_hk comment='help keywords';"
544         fi
545
546         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/help_relation.frm
547         then
548           c_hr="$c_hr CREATE TABLE help_relation ("
549           c_hr="$c_hr   help_topic_id    int unsigned not null references help_topic,"
550           c_hr="$c_hr   help_keyword_id  int unsigned not null references help_keyword,"
551           c_hr="$c_hr   primary key      (help_keyword_id, help_topic_id)"
552           c_hr="$c_hr )"
553           c_hr="$c_hr   CHARACTER SET utf8"
554           c_hr="$c_hr comment='keyword-topic relation';"
555         fi
556
557         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_name.frm
558         then
559           c_tzn="$c_tzn CREATE TABLE time_zone_name ("
560           c_tzn="$c_tzn   Name char(64) NOT NULL,"
561           c_tzn="$c_tzn   Time_zone_id int unsigned NOT NULL,"
562           c_tzn="$c_tzn   PRIMARY KEY Name (Name)"
563           c_tzn="$c_tzn )"
564           c_tzn="$c_tzn   CHARACTER SET utf8"
565           c_tzn="$c_tzn comment='Time zone names';"
566         fi
567
568         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone.frm
569         then
570           c_tz="$c_tz CREATE TABLE time_zone ("
571           c_tz="$c_tz   Time_zone_id int unsigned NOT NULL auto_increment,"
572           c_tz="$c_tz   Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
573           c_tz="$c_tz   PRIMARY KEY TzId (Time_zone_id)"
574           c_tz="$c_tz )"
575           c_tz="$c_tz   CHARACTER SET utf8"
576           c_tz="$c_tz comment='Time zones';"
577         fi
578
579         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition.frm
580         then
581           c_tzt="$c_tzt CREATE TABLE time_zone_transition ("
582           c_tzt="$c_tzt   Time_zone_id int unsigned NOT NULL,"
583           c_tzt="$c_tzt   Transition_time bigint signed NOT NULL,"
584           c_tzt="$c_tzt   Transition_type_id int unsigned NOT NULL,"
585           c_tzt="$c_tzt   PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
586           c_tzt="$c_tzt )"
587           c_tzt="$c_tzt   CHARACTER SET utf8"
588           c_tzt="$c_tzt comment='Time zone transitions';"
589         fi
590
591         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_transition_type.frm
592         then
593           c_tztt="$c_tztt CREATE TABLE time_zone_transition_type ("
594           c_tztt="$c_tztt   Time_zone_id int unsigned NOT NULL,"
595           c_tztt="$c_tztt   Transition_type_id int unsigned NOT NULL,"
596           c_tztt="$c_tztt   Offset int signed DEFAULT 0 NOT NULL,"
597           c_tztt="$c_tztt   Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
598           c_tztt="$c_tztt   Abbreviation char(8) DEFAULT '' NOT NULL,"
599           c_tztt="$c_tztt   PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
600           c_tztt="$c_tztt )"
601           c_tztt="$c_tztt   CHARACTER SET utf8"
602           c_tztt="$c_tztt comment='Time zone transition types';"
603         fi
604
605         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/time_zone_leap_second.frm
606         then
607           c_tzls="$c_tzls CREATE TABLE time_zone_leap_second ("
608           c_tzls="$c_tzls   Transition_time bigint signed NOT NULL,"
609           c_tzls="$c_tzls   Correction int signed NOT NULL,"
610           c_tzls="$c_tzls   PRIMARY KEY TranTime (Transition_time)"
611           c_tzls="$c_tzls )"
612           c_tzls="$c_tzls CHARACTER SET utf8"
613           c_tzls="$c_tzls   comment='Leap seconds information for time zones';"
614         fi
615
616         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/proc.frm
617         then
618           c_p="$c_p CREATE TABLE proc ("
619           c_p="$c_p   db                char(64) collate utf8_bin DEFAULT '' NOT NULL,"
620           c_p="$c_p   name              char(64) DEFAULT '' NOT NULL,"
621           c_p="$c_p   type              enum('FUNCTION','PROCEDURE') NOT NULL,"
622           c_p="$c_p   specific_name     char(64) DEFAULT '' NOT NULL,"
623           c_p="$c_p   language          enum('SQL') DEFAULT 'SQL' NOT NULL,"
624           c_p="$c_p   sql_data_access   enum('CONTAINS_SQL',"
625           c_p="$c_p                          'NO_SQL',"
626           c_p="$c_p                          'READS_SQL_DATA',"
627           c_p="$c_p                          'MODIFIES_SQL_DATA'"
628           c_p="$c_p                     ) DEFAULT 'CONTAINS_SQL' NOT NULL,"
629           c_p="$c_p   is_deterministic  enum('YES','NO') DEFAULT 'NO' NOT NULL,"
630           c_p="$c_p   security_type     enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL,"
631           c_p="$c_p   param_list        blob DEFAULT '' NOT NULL,"
632           c_p="$c_p   returns           char(64) DEFAULT '' NOT NULL,"
633           c_p="$c_p   body              longblob DEFAULT '' NOT NULL,"
634           c_p="$c_p   definer           char(77) collate utf8_bin DEFAULT '' NOT NULL,"
635           c_p="$c_p   created           timestamp,"
636           c_p="$c_p   modified          timestamp,"
637           c_p="$c_p   sql_mode          set("
638           c_p="$c_p                         'REAL_AS_FLOAT',"
639           c_p="$c_p                         'PIPES_AS_CONCAT',"
640           c_p="$c_p                         'ANSI_QUOTES',"
641           c_p="$c_p                         'IGNORE_SPACE',"
642           c_p="$c_p                         'NOT_USED',"
643           c_p="$c_p                         'ONLY_FULL_GROUP_BY',"
644           c_p="$c_p                         'NO_UNSIGNED_SUBTRACTION',"
645           c_p="$c_p                         'NO_DIR_IN_CREATE',"
646           c_p="$c_p                         'POSTGRESQL',"
647           c_p="$c_p                         'ORACLE',"
648           c_p="$c_p                         'MSSQL',"
649           c_p="$c_p                         'DB2',"
650           c_p="$c_p                         'MAXDB',"
651           c_p="$c_p                         'NO_KEY_OPTIONS',"
652           c_p="$c_p                         'NO_TABLE_OPTIONS',"
653           c_p="$c_p                         'NO_FIELD_OPTIONS',"
654           c_p="$c_p                         'MYSQL323',"
655           c_p="$c_p                         'MYSQL40',"
656           c_p="$c_p                         'ANSI',"
657           c_p="$c_p                         'NO_AUTO_VALUE_ON_ZERO',"
658           c_p="$c_p                         'NO_BACKSLASH_ESCAPES',"
659           c_p="$c_p                         'STRICT_TRANS_TABLES',"
660           c_p="$c_p                         'STRICT_ALL_TABLES',"
661           c_p="$c_p                         'NO_ZERO_IN_DATE',"
662           c_p="$c_p                         'NO_ZERO_DATE',"
663           c_p="$c_p                         'INVALID_DATES',"
664           c_p="$c_p                         'ERROR_FOR_DIVISION_BY_ZERO',"
665           c_p="$c_p                         'TRADITIONAL',"
666           c_p="$c_p                         'NO_AUTO_CREATE_USER',"
667           c_p="$c_p                         'HIGH_NOT_PRECEDENCE'"
668           c_p="$c_p                     ) DEFAULT '' NOT NULL,"
669           c_p="$c_p   comment           char(64) collate utf8_bin DEFAULT '' NOT NULL,"
670           c_p="$c_p   PRIMARY KEY (db,name,type)"
671           c_p="$c_p )"
672           c_p="$c_p character set utf8"
673           c_p="$c_p comment='Stored Procedures';"
674         fi
675
676         mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
677         # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
678         chown root:root "$MYSQL_CLUSTER_DIR"
679     chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
680         chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
681
682         if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
683             sed -e "s#\(datadir.*\)=.*#\1= $MYSQL_DATA_DIR#g" \
684                 -e "s#\(pid-file.*\)=.*#\1= $MYSQL_PIDFILE#g" \
685                 -e "s#\(socket.*\)=.*#\1= $MYSQL_SOCKET#g" \
686                 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
687             chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
688             chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
689         fi
690
691         if [ ! -e /var/lib/mysql/mysql.sock ]; then
692             ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
693         fi
694
695         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
696             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
697 CREATE DATABASE mysql;
698 use mysql;
699 $c_d
700 $i_d
701
702 $c_h
703 $i_h
704
705 $c_u
706 $i_u
707
708 $c_f
709 $i_f
710
711 $c_t
712 $c_c
713
714 $c_ht
715 $c_hc
716 $c_hk
717 $c_hr
718
719 $c_tzn
720 $c_tz
721 $c_tzt
722 $c_tztt
723 $c_tzls
724
725 $c_p
726 $c_pp
727 END_OF_DATA
728         then
729             ok
730         cat << END_OF_MSG
731
732 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
733 This is done (after starting database; press enter when asked for password) with:
734
735 /usr/bin/mysqladmin -u mysql -p -S $MYSQL_SOCKET password 'password'
736 /usr/bin/mysqladmin -h $hostname -u mysql -p -S $MYSQL_SOCKET password 'password'
737 /usr/bin/mysqladmin -u mysql_logrotate -p -S $MYSQL_SOCKET password 'password'
738
739 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
740 mysqladmin section. See the manual for more instructions.
741
742 END_OF_MSG
743       else
744             fail
745             cat << END_OF_MSG
746 Installation of grant tables FAILED!
747
748 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
749 also try to start the mysqld demon with:
750
751 /usr/sbin/mysqld --skip-grant &
752
753 You can use the command line tool /usr/bin/mysql to connect to the mysql
754 database and look at the grant tables:
755
756 shell> /usr/bin/mysql -u mysql mysql
757 mysql> show tables
758
759 Try 'mysqld --help' if you have problems with paths. Setting on
760 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
761 may be helpful. The latest information about MySQL is available on the
762 web at http://www.mysql.com/.
763
764 Please check PLD Linux ftp site for newer versions of this package.
765
766 Please consult the MySQL manual section: 'Problems running
767 mysql_install_db', and the manual section that describes problems on
768 your OS.  Another information source is the MySQL email archive.
769 Please check all of the above before mailing us!  And if you do mail
770 us, you MUST use the /usr/bin/mysqlbug script!
771
772 END_OF_MSG
773
774         exit 1
775         fi
776 }
777
778 #
779 # End of useful functions.
780 #
781
782 RETVAL=0
783 case "$action" in
784   start)
785         if [ ! -f $MYSQL_ERRLOG ]; then
786                 touch $MYSQL_ERRLOG
787         fi
788         chown mysql:mysql $MYSQL_ERRLOG
789         chmod 640 $MYSQL_ERRLOG
790
791         for mysqldir in $DB_CLUSTERS; do
792                 mysqlstatus "$mysqldir"
793                 if [ "$MYSQL_STATUS" = "running" ]; then
794                         msg_already_running "MySQL $mysqldir"
795                 else
796                         mysqlstart "$mysqldir"
797                 fi
798         done
799         mysqlsubsys
800         ;;
801   stop)
802         for mysqldir in $DB_CLUSTERS; do
803                 mysqlstatus "$mysqldir"
804                 if [ "$MYSQL_STATUS" = "not running" ]; then
805                         msg_not_running "MySQL $mysqldir"
806                 else
807                         mysqlstop "$mysqldir"
808                 fi
809         done
810         mysqlsubsys
811         ;;
812   status)
813         status mysqld
814         for mysqldir in $DB_CLUSTERS; do
815                 mysqlstatus "$mysqldir"
816                 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
817         done
818         exit $?
819         ;;
820   restart|force-reload)
821         $0 stop $DB_CLUSTERS
822         $0 start $DB_CLUSTERS
823         exit $?
824         ;;
825   init)
826         for mysqldir in $DB_CLUSTERS; do
827                 mysqlinit "$mysqldir"
828         done
829         exit $?
830         ;;
831   flush-logs)
832         for mysqldir in $DB_CLUSTERS; do
833             mysqlgetconfig "$mysqldir"
834                 # just if mysqld is really running
835                 if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
836                         /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
837                 fi
838         done
839         ;;
840   *)
841         msg_usage "$0 {start|stop|init|restart|force-reload|status}"
842         exit 3
843 esac
844
845 exit $RETVAL
846
847 # vi: shiftwidth=4 tabstop=4
This page took 0.419305 seconds and 4 git commands to generate.