]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
- full patch for sql file
[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
10 # Source function library
11 . /etc/rc.d/init.d/functions
12
13 # Get network config
14 . /etc/sysconfig/network
15
16 # Get service config
17 if [ -f /etc/sysconfig/mysql ]; then
18         . /etc/sysconfig/mysql
19 else
20         nls "Error: %s not found" /etc/sysconfig/mysql
21         nls " MySQL can't be run."
22         exit 1
23 fi
24
25 if [ -n "$MYSQL_DB_CLUSTERS" ]; then
26         nls "Warning: MYSQL_DB_CLUSTERS is set. It's obsolete. Use %s instead." /etc/mysql/clusters.conf
27 fi
28
29 [ -f /etc/mysql/clusters.conf ]&& MYSQL_DB_CLUSTERS=$(grep -v '^#' /etc/mysql/clusters.conf | cut -s -f 2 -d '=')
30
31 if [ -z "$MYSQL_DB_CLUSTERS"  ]; then
32         nls "Warning: Missing clusters config file %s" /etc/mysql/clusters.conf
33         nls "Warning: or there is no configured clusters in it."
34         nls "Using default cluster /var/lib/mysql (compatibility mode)"
35         MYSQL_DB_CLUSTERS=/var/lib/mysql
36 fi
37
38 # Check that networking is up
39 if is_yes "${NETWORKING}"; then
40         if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
41                 msg_network_down MySQL
42                 exit 1
43         fi
44 else
45         exit 0
46 fi
47
48 action="$1"
49
50 # any db cluster as command line argument?
51 if [ $# -gt 1 ]; then
52         shift
53         # perform action for specified clusters only
54         DB_CLUSTERS="$@"
55 else
56         DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
57 fi
58
59 MYSQL_ERRLOG=/var/log/mysql/err
60
61 #
62 # Useful functions.
63 #
64
65 #
66 # check for mysql status
67 #
68 # arguments:
69 # $1 - db cluster
70 #
71 # sets variables:
72 # MYSQL_STATUS = running | not running
73 # MYSQL_PID    = pid of mysqld process
74 #
75 mysqlstatus() {
76         clusterdir="$1"
77         mysqlgetconfig "$clusterdir"
78         
79         MYSQL_STATUS="not running"
80         MYSQL_PID="unknown"
81
82         [ -f "$MYSQL_PIDFILE" ] && MYSQL_PID=$(cat "$MYSQL_PIDFILE")
83
84         if [ ! -d "/proc/$MYSQL_PID" -a "$MYSQL_PID" != "unknown" ]; then
85                 MYSQL_STATUS="died"
86         elif [ -d "/proc/$MYSQL_PID" ]; then
87                 grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline && MYSQL_STATUS="running" || MYSQL_STATUS="not running"
88         fi
89 }
90
91 # get mysql configuration in variables
92 # MYSQL_CONFIG MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE
93 #
94 # arguments
95 # $1 - db cluster
96
97 mysqlgetconfig() {
98         clusterdir="$1"
99
100         # emulate old behaviour if only one cluster specified
101         if [ "$clusterdir" = "$MYSQL_DB_CLUSTERS" -a "$clusterdir" = "/var/lib/mysql" -a -f /etc/mysqld.conf ]; then
102                 MYSQL_RA_COMPAT=yes; export MYSQL_RA_COMPAT
103                 config_file=/etc/mysqld.conf
104         else
105                 # TODO: convert this piece of crap to awk
106                 config=`grep -v "^#" /etc/mysql/clusters.conf | grep "${clusterdir}$" | cut -s -f 1 -d '='`
107                 if echo "$config" | grep -q '^/'; then
108                         config_file="$config"
109                 elif [ -f "/etc/mysql/$config" ]; then
110                         config_file=/etc/mysql/$config
111                 else
112                         config_file="$clusterdir/mysqld.conf"
113                 fi
114         fi
115
116         MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
117         
118         if [ -z "$config_file" ]; then
119                 nls "Error: Can't find config file for %s cluster" "$clusterdir"
120                 exit 6
121         else
122                 MYSQL_CONFIG="$config_file"; export MYSQL_CONFIG
123         fi
124         
125         if [ ! -f "$config_file" ]; then
126                 nls "Error: config file %s not found" "$config_file"
127                 nls "MySQL can't be run. Did you initialize DB by doing \`$0 init'?"
128                 exit 6
129         fi
130
131         eval `awk '
132 /^[ \t]*\[.*\][ \t]*$/ {
133         match($0,/\[.*\]/)
134         section=substr($0,RSTART+1,RSTART+RLENGTH-3)
135 }
136 section=="mysqld" && $2~"=" {
137         if ($1=="datadir") {
138                 printf("MYSQL_DATA_DIR=%s;", $3)
139         } else if ($1=="user") {
140                 printf("MYSQL_USER=%s;", $3)
141         } else if ($1=="pid-file") {
142                 printf("MYSQL_PIDFILE=%s;", $3)
143         } else if ($1=="socket") {
144                 printf("MYSQL_SOCKET=%s;", $3)
145         }
146 }
147 END {
148         print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
149 }
150 ' $config_file`
151
152
153         if is_yes "$MYSQL_RA_COMPAT"; then
154                 MYSQL_DATA_DIR_SUB=""
155         else
156                 MYSQL_DATA_DIR_SUB="/mysqldb"
157         fi
158                 
159         if [ -z "$MYSQL_DATA_DIR" -o "$MYSQL_DATA_DIR" != "${clusterdir}${MYSQL_DATA_DIR_SUB}/db" ]; then
160                 nls "Error: datadir specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/db"
161                 nls " MySQL can't be run."
162                 exit 6
163         fi
164         
165         if [ -z "$MYSQL_PIDFILE" -o "$MYSQL_PIDFILE" != "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid" ]; then
166                 nls "Error: pid-file specified in %s should be %s" "$config_file" "$clusterdir${MYSQL_DATA_DIR_SUB}/mysql.pid"
167                 nls " MySQL can't be run."
168                 exit 6
169         fi
170
171         if [ -z $MYSQL_USER ]; then
172                 echo "$(nls 'MySQL user not configured properly')"'!' >&2
173                 nls "Edit %s and configure it." "$config_file" >&2
174                 exit 6
175         fi
176 }
177
178 # start mysql
179 mysqlstart() {
180         clusterdir="$1"
181         mysqlgetconfig "$clusterdir"
182         if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
183                 nls "MySQL cluster %s not initialized." "$clusterdir"
184                 nls "Try \`%s init %s' before start." "$0" "$clusterdir"
185                 exit 6
186         fi
187
188         msg_starting "MySQL $clusterdir"
189         busy
190         [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
191         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 &
192         sleep 2
193         mysqlstatus "$clusterdir"
194         if [ "$MYSQL_STATUS" = "running" -a "$MYSQL_PID" != "unknown" ]; then
195                 ok
196         elif [ "$MYSQL_STATUS" = "died" ]; then
197                 RETVAL=1
198                 died
199         else
200                 RETVAL=1
201                 fail
202         fi
203 }
204
205 # stop mysql
206 mysqlstop() {
207         clusterdir="$1"
208         mysqlstatus "$clusterdir"
209         msg_stopping "MySQL $clusterdir"
210         busy
211         [ "$MYSQL_PID" != "unknown" ] && kill -TERM "$MYSQL_PID" 2> /dev/null
212         # 3 seconds
213         for nr in 1 2 3; do
214                 [ -d "/proc/$MYSQL_PID" ] && sleep 1
215         done
216         mysqlstatus "$clusterdir"
217         if [ "$MYSQL_STATUS" = "died" ]; then
218                 died
219         elif [ "$MYSQL_STATUS" = "running" ]; then
220                 fail
221         else
222                 ok
223         fi
224         rm -f "$MYSQL_PIDFILE"
225 }
226
227 #
228 # check for running mysql instances; if any instance is running then
229 # create subsys lock file
230 #
231 mysqlsubsys() {
232         # check for every defined db cluster in sysconfig file
233         for mysqldir in $DB_CLUSTERS; do
234                 mysqlstatus "$mysqldir"
235                 if [ "$MYSQL_STATUS" = "running" ]; then
236                         touch /var/lock/subsys/mysql
237                         return
238                 fi
239         done
240         rm -f /var/lock/subsys/mysql
241 }
242
243 mysqlinit() {
244         clusterdir="$1"
245
246         if [ -f /etc/mysqld.conf ]; then
247                 nls "Running in \`no cluster compat' mode: can't initialize database."
248                 nls "Move /etc/mysqld.conf away and rerun \`$0 init' (new config will be in $clusterdir)."
249                 exit 1
250         fi
251
252         if [ -f "$clusterdir/mysqld.conf" ]; then
253                 mysqlgetconfig "$clusterdir"
254         else
255                 MYSQL_USER="mysql"
256                 MYSQL_CLUSTER_DIR="$clusterdir"
257                 MYSQL_DATA_DIR="$clusterdir/mysqldb/db"
258                 MYSQL_PIDFILE="$clusterdir/mysqldb/mysql.pid"
259                 MYSQL_SOCKET="$clusterdir/mysqldb/mysql.sock"
260         fi
261
262         nls "Initializing cluster %s" "$clusterdir"
263
264         # Check if not exist init database
265         if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
266                 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysqldb/mysql"
267                 nls "before initializing database."
268                 nls "For now skipping cluster %s." "$clusterdir"
269                 return
270         fi
271
272         show "Creating privilege mysql tables for $MYSQL_DATA_DIR"
273         busy
274         TMP=/tmp TMPDIR=/tmp 
275
276                 
277         # Install this in the user table, too
278         hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
279         [ -z "$hostname" ] && hostname="localhost-unknown"
280                 
281         # Check if hostname is valid
282         if [ -z "$hostname" ]; then
283                 deltext
284                 fail
285                 nls "Sorry, the host name is not configured."
286                 nls "Please configure the 'hostname' command to return a hostname."
287                 exit 1
288         elif ! hostname -i >/dev/null 2>&1; then 
289                 deltext
290                 fail
291                 nls "Sorry, the host '%s' could not be looked up." "$hostname"
292                 nls "Please configure the 'hostname' command to return a correct hostname."
293                 exit 1
294         fi
295
296         # Initialize variables
297         c_d="" i_d=""
298         c_h="" i_h=""
299         c_u="" i_u=""
300         c_f="" i_f=""
301         c_t="" c_c=""
302
303         # Check for old tables
304         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/db.frm
305         then
306           # mysqld --bootstrap wants one command/line
307           c_d="$c_d CREATE TABLE db ("
308           c_d="$c_d   Host char(60) DEFAULT '' NOT NULL,"
309           c_d="$c_d   Db char(64) DEFAULT '' NOT NULL,"
310           c_d="$c_d   User char(16) DEFAULT '' NOT NULL,"
311           c_d="$c_d   Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
312           c_d="$c_d   Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
313           c_d="$c_d   Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
314           c_d="$c_d   Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
315           c_d="$c_d   Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
316           c_d="$c_d   Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
317           c_d="$c_d   Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
318           c_d="$c_d   References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
319           c_d="$c_d   Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
320           c_d="$c_d   Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
321           c_d="$c_d   Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
322           c_d="$c_d   Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
323           c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
324           c_d="$c_d KEY User (User)"
325           c_d="$c_d )"
326           c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
327           c_d="$c_d comment='Database privileges';"
328
329           i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
330           INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
331             
332         fi
333
334         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/host.frm
335         then
336           c_h="$c_h CREATE TABLE host ("
337           c_h="$c_h  Host char(60) DEFAULT '' NOT NULL,"
338           c_h="$c_h  Db char(64) DEFAULT '' NOT NULL,"
339           c_h="$c_h  Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
340           c_h="$c_h  Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
341           c_h="$c_h  Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
342           c_h="$c_h  Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
343           c_h="$c_h  Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
344           c_h="$c_h  Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
345           c_h="$c_h  Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
346           c_h="$c_h  References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
347           c_h="$c_h  Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
348           c_h="$c_h  Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
349           c_h="$c_h  Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
350           c_h="$c_h  Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
351           c_h="$c_h  PRIMARY KEY Host (Host,Db)"
352           c_h="$c_h )"
353           c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
354           c_h="$c_h comment='Host privileges;  Merged with database privileges';"
355         fi
356
357         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/user.frm
358         then
359           c_u="$c_u CREATE TABLE user ("
360           c_u="$c_u   Host char(60) DEFAULT '' NOT NULL,"
361           c_u="$c_u   User char(16) DEFAULT '' NOT NULL,"
362           c_u="$c_u   Password char(41) DEFAULT '' NOT NULL,"
363           c_u="$c_u   Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
364           c_u="$c_u   Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
365           c_u="$c_u   Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
366           c_u="$c_u   Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
367           c_u="$c_u   Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
368           c_u="$c_u   Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
369           c_u="$c_u   Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
370           c_u="$c_u   Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
371           c_u="$c_u   Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
372           c_u="$c_u   File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
373           c_u="$c_u   Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
374           c_u="$c_u   References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
375           c_u="$c_u   Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
376           c_u="$c_u   Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
377           c_u="$c_u   Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
378           c_u="$c_u   Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
379           c_u="$c_u   Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
380           c_u="$c_u   Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
381           c_u="$c_u   Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
382           c_u="$c_u   Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
383           c_u="$c_u   Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
384           c_u="$c_u   ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
385           c_u="$c_u   ssl_cipher BLOB NOT NULL,"
386           c_u="$c_u   x509_issuer BLOB NOT NULL,"
387           c_u="$c_u   x509_subject BLOB NOT NULL,"
388           c_u="$c_u   max_questions int(11) unsigned DEFAULT 0  NOT NULL,"
389           c_u="$c_u   max_updates int(11) unsigned DEFAULT 0  NOT NULL,"
390           c_u="$c_u   max_connections int(11) unsigned DEFAULT 0  NOT NULL,"
391           c_u="$c_u   PRIMARY KEY Host (Host,User)"
392           c_u="$c_u )"
393           c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
394           c_u="$c_u comment='Users and global privileges';"
395
396           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);
397           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);
398
399           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);
400           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);
401
402           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);"
403         fi
404
405         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/func.frm
406         then
407           c_f="$c_f CREATE TABLE func ("
408           c_f="$c_f   name char(64) DEFAULT '' NOT NULL,"
409           c_f="$c_f   ret tinyint(1) DEFAULT '0' NOT NULL,"
410           c_f="$c_f   dl char(128) DEFAULT '' NOT NULL,"
411           c_f="$c_f   type enum ('function','aggregate') NOT NULL,"
412           c_f="$c_f   PRIMARY KEY (name)"
413           c_f="$c_f )"
414           c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
415           c_f="$c_f   comment='User defined functions';"
416         fi
417
418         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/tables_priv.frm
419         then
420           c_t="$c_t CREATE TABLE tables_priv ("
421           c_t="$c_t   Host char(60) DEFAULT '' NOT NULL,"
422           c_t="$c_t   Db char(64) DEFAULT '' NOT NULL,"
423           c_t="$c_t   User char(16) DEFAULT '' NOT NULL,"
424           c_t="$c_t   Table_name char(60) DEFAULT '' NOT NULL,"
425           c_t="$c_t   Grantor char(77) DEFAULT '' NOT NULL,"
426           c_t="$c_t   Timestamp timestamp(14),"
427           c_t="$c_t   Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
428           c_t="$c_t   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
429           c_t="$c_t   PRIMARY KEY (Host,Db,User,Table_name),"
430           c_t="$c_t   KEY Grantor (Grantor)"
431           c_t="$c_t )"
432           c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
433           c_t="$c_t   comment='Table privileges';"
434         fi
435
436         if test ! -f $MYSQL_DATA_DIR/mysqldb/mysql/columns_priv.frm
437         then
438           c_c="$c_c CREATE TABLE columns_priv ("
439           c_c="$c_c   Host char(60) DEFAULT '' NOT NULL,"
440           c_c="$c_c   Db char(64) DEFAULT '' NOT NULL,"
441           c_c="$c_c   User char(16) DEFAULT '' NOT NULL,"
442           c_c="$c_c   Table_name char(64) DEFAULT '' NOT NULL,"
443           c_c="$c_c   Column_name char(64) DEFAULT '' NOT NULL,"
444           c_c="$c_c   Timestamp timestamp(14),"
445           c_c="$c_c   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
446           c_c="$c_c   PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
447           c_c="$c_c )"
448           c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
449           c_c="$c_c   comment='Column privileges';"
450         fi
451
452         mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
453         # Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
454         chown root:root "$MYSQL_CLUSTER_DIR"
455     chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
456         chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
457
458         if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
459             sed -e "s#datadir.*=.*#datadir      = $MYSQL_DATA_DIR#g" \
460                 -e "s#pid-file.*=.*#pid-file = $MYSQL_PIDFILE#g" \
461                 -e "s#socket.*=.*#socket = $MYSQL_SOCKET#g" \
462                 /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
463             chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
464             chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
465         fi
466
467         if [ ! -e /var/lib/mysql/mysql.sock ]; then
468             ln -s "$MYSQL_SOCKET" /var/lib/mysql/mysql.sock
469         fi
470
471         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
472             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
473 CREATE DATABASE mysql;
474 use mysql;
475 $c_d
476 $i_d
477
478 $c_h
479 $i_h
480
481 $c_u
482 $i_u
483
484 $c_f
485 $i_f
486
487 $c_t
488 $c_c
489 END_OF_DATA
490         then 
491             ok
492         cat << END_OF_MSG
493
494 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
495 This is done (after starting database) with:
496
497 /usr/bin/mysqladmin -u mysql -S $MYSQL_SOCKET password 'password'
498 /usr/bin/mysqladmin -h $hostname -u mysql -S $MYSQL_SOCKET password 'password'
499 /usr/bin/mysqladmin -u mysql_logrotate -S $MYSQL_SOCKET password 'password'
500
501 NOTE: mysql_logrotate password should be placed to $MYSQL_CONFIG in
502 mysqladmin section. See the manual for more instructions.
503
504 IMPORTANT: The configuration file is mysqld.conf in MYSQ_DB_CLUSTERS directories.
505
506 END_OF_MSG
507       else  
508             fail
509             cat << END_OF_MSG
510 Installation of grant tables FAILED!
511
512 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
513 also try to start the mysqld demon with:
514
515 /usr/sbin/mysqld --skip-grant &
516
517 You can use the command line tool /usr/bin/mysql to connect to the mysql
518 database and look at the grant tables:
519
520 shell> /usr/bin/mysql -u mysql mysql
521 mysql> show tables
522
523 Try 'mysqld --help' if you have problems with paths. Setting on
524 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
525 may be helpful. The latest information about MySQL is available on the
526 web at http://www.mysql.com/.
527
528 Please check PLD ftp site for newer versions of this package.
529
530 Please consult the MySQL manual section: 'Problems running
531 mysql_install_db', and the manual section that describes problems on
532 your OS.  Another information source is the MySQL email archive.
533 Please check all of the above before mailing us!  And if you do mail
534 us, you MUST use the /usr/bin/mysqlbug script!  
535
536 END_OF_MSG
537
538         exit 1
539         fi
540 }
541
542 #
543 # End of useful functions.
544 #
545
546 RETVAL=0
547 case "$action" in
548   start)
549         if [ ! -f $MYSQL_ERRLOG ]; then
550                 touch $MYSQL_ERRLOG
551         fi
552         chown mysql:mysql $MYSQL_ERRLOG
553         chmod 640 $MYSQL_ERRLOG
554
555         for mysqldir in $DB_CLUSTERS; do
556                 mysqlstatus "$mysqldir"
557                 if [ "$MYSQL_STATUS" = "running" ]; then
558                         msg_already_running "MySQL $mysqldir"
559                 else
560                         mysqlstart "$mysqldir"
561                 fi
562         done
563         mysqlsubsys
564         ;;
565   stop)
566         for mysqldir in $DB_CLUSTERS; do
567                 mysqlstatus "$mysqldir"
568                 if [ "$MYSQL_STATUS" = "not running" ]; then
569                         msg_not_running "MySQL $mysqldir"
570                 else
571                         mysqlstop "$mysqldir"
572                 fi
573         done
574         mysqlsubsys
575         ;;
576   status)
577         status mysqld
578         for mysqldir in $DB_CLUSTERS; do
579                 mysqlstatus "$mysqldir"
580                 echo "MySQL cluster $mysqldir: $MYSQL_STATUS"
581         done
582         exit $?
583         ;;
584   restart|force-reload)
585         $0 stop
586         $0 start
587         exit $?
588         ;;
589   init)
590         for mysqldir in $DB_CLUSTERS; do
591                 mysqlinit "$mysqldir"
592         done
593         exit $?
594         ;;
595   flush-logs)
596         for mysqldir in $DB_CLUSTERS; do
597             mysqlgetconfig "$mysqldir"
598             /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
599         done
600         ;;
601   *)
602         msg_usage "$0 {start|stop|init|restart|force-reload|status}"
603         exit 3
604 esac
605
606 exit $RETVAL
607
608 # vi: shiftwidth=4 tabstop=4
This page took 0.096913 seconds and 3 git commands to generate.