]> git.pld-linux.org Git - packages/mysql.git/blob - mysql.init
- cosmeticts
[packages/mysql.git] / mysql.init
1 #!/bin/sh
2 #
3 # mysql         A very fast and reliable SQL database engine
4 #
5 # chkconfig:    2345 90 25
6 #
7 # description:  A very fast and reliable SQL database engine.
8 #
9 # pidfile:      /var/lib/mysql/mysqld.pid
10
11 # Source function library
12 . /etc/rc.d/init.d/functions
13
14 # Get network config
15 . /etc/sysconfig/network
16
17 # Check that networking is up.
18 if is_no "${NETWORKING}"; then
19         msg_Network_Down MySQL
20         exit 1
21 fi
22
23 MYSQLD_ERRLOG=/var/log/mysql/err
24 MYSQLD_CONFIG=/etc/mysqld.conf 
25
26 # Get service config
27 if [ -f /etc/sysconfig/mysql ] ; then
28         . /etc/sysconfig/mysql
29 fi
30
31 # Daemon don't dies if config doesn't exists
32 if [ ! -f $MYSQLD_CONFIG ]; then 
33     echo "MySQL config $MYSQLD_CONFIG not exists"
34     exit 1
35 fi
36
37 if [ ! -f $MYSQLD_CONFIG ]; then 
38     echo "MySQL config $MYSQLD_CONFIG not exists"
39     exit 1
40 fi
41
42 MYSQL_DATA_DIR=`grep -m 1 "^[[:space:]]*datadir" $MYSQLD_CONFIG 2>/dev/null| cut -f 2 -d= | tr -d '[:space:]'`
43 MYSQL_USER=`grep -m 1 "^[[:space:]]*user" $MYSQLD_CONFIG 2>/dev/null| cut -f 2 -d= | tr -d '[:space:]'` 
44 MYSQLD_PIDFILE=`grep -m 1 "^[[:space:]]*pid\-file" $MYSQLD_CONFIG 2>/dev/null| cut -f 2 -d= | tr -d '[:space:]'`
45
46 if [ -z $MYSQL_DATA_DIR ]; then 
47     echo "MySQL datadir $MYSQL_DATA_DIR not configured propely!"
48     echo "Edit $MYSQLD_CONFIG and configure it."
49     exit 1
50 fi
51
52 if [ -z $MYSQL_USER ]; then 
53     echo "MySQL user not configured propely!"
54     echo "Edit $MYSQLD_CONFIG and configure it."
55     exit 1
56 fi
57
58
59 case "$1" in
60     start)
61         if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
62                 echo "MySQL database not initialized. Try \"$0 init\" before start."
63                 exit 1
64         fi
65
66         # Check if the service is already running?              
67         if [ -f /var/lock/subsys/mysql ]; then
68                 msg_Already_Running MySQL
69         else    
70                 msg_starting MySQL
71                 busy
72                 
73                 if [ ! -f $MYSQLD_ERRLOG ]; then 
74                     touch $MYSQLD_ERRLOG
75                 fi
76                 chown mysql.mysql $MYSQLD_ERRLOG
77                 chmod 640 $MYSQLD_ERRLOG
78                     
79                 /usr/sbin/mysqld --defaults-file=$MYSQLD_CONFIG >>$MYSQLD_ERRLOG 2>&1 &
80                 sleep 1
81                 deltext
82                 if ps -C mysqld >/dev/null 2>&1; then
83                         RETVAL=0
84                         ok
85                 else
86                         RETVAL=1
87                         fail
88                 fi
89                 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql
90         fi
91         ;;
92   stop)
93         if [ -f /var/lock/subsys/mysql ]; then
94                 msg_stopping MySQL
95                 killproc mysqld
96                 sleep 1
97                 rm -f /var/lock/subsys/mysql $MYSQLD_PIDFILE >/dev/null 2>&1
98         else
99                 msg_Not_Running MySQL
100                 exit 1
101         fi
102         ;;
103   status)
104         status mysqld
105         exit $?
106         ;;
107   restart|reload)
108         $0 stop
109         $0 start
110         ;;
111   init)
112         # Check if not exist init database
113         if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
114             echo "Seems that database is initialized now. Remove by hand $MYSQL_DATA_DIR/mysql"
115             echo "before initialize database."
116             exit 1;
117         fi
118
119         show "Creating privilege mysql tables"
120         busy
121         TMP=/tmp TMPDIR=/tmp 
122         
123         # Install this too in the user table
124         hostname=`hostname --fqdn | tr -d '[:space:]'`
125                 
126         # Check if hostname is valid
127         if [ -z "$hostname" ]; then
128                 deltext
129                 fail
130                 echo "Sorry, the host name is not configured."
131                 echo "Please configure the 'hostname' command to return a hostname."
132                 exit 1
133         elif ! hostname -i >/dev/null 2>&1; then 
134                 deltext
135                 fail
136                 echo "Sorry, the host '$hostname' could not be looked up."
137                 echo "Please configure the 'hostname' command to return a correct hostname."
138                 exit 1
139         fi
140
141         #mysqld --bootstrap need whole (and only one) sql command in one line
142         create_db=""
143         create_db="$create_db CREATE TABLE db ( "
144         create_db="$create_db Host char(60) DEFAULT '' NOT NULL, "
145         create_db="$create_db Db char(32) DEFAULT '' NOT NULL," 
146         create_db="$create_db User char(16) DEFAULT '' NOT NULL, "
147         create_db="$create_db Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
148         create_db="$create_db Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
149         create_db="$create_db Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
150         create_db="$create_db Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
151         create_db="$create_db Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
152         create_db="$create_db Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
153         create_db="$create_db Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
154         create_db="$create_db References_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
155         create_db="$create_db Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
156         create_db="$create_db Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
157         create_db="$create_db PRIMARY KEY Host (Host,Db,User), "
158         create_db="$create_db KEY User (User)"
159         create_db="$create_db );"
160
161         create_host=""
162         create_host="$create_host CREATE TABLE host ( "
163         create_host="$create_host Host char(60) DEFAULT '' NOT NULL, "
164         create_host="$create_host Db char(32) DEFAULT '' NOT NULL, "
165         create_host="$create_host Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
166         create_host="$create_host Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
167         create_host="$create_host Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
168         create_host="$create_host Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
169         create_host="$create_host Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
170         create_host="$create_host Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
171         create_host="$create_host Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
172         create_host="$create_host References_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
173         create_host="$create_host Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
174         create_host="$create_host Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
175         create_host="$create_host PRIMARY KEY Host (Host,Db)"
176         create_host="$create_host       );"
177
178         create_user=""
179         create_user="$create_user CREATE TABLE user (" 
180         create_user="$create_user Host char(60) DEFAULT '' NOT NULL, "
181         create_user="$create_user User char(16) DEFAULT '' NOT NULL, "
182         create_user="$create_user Password char(16) DEFAULT '' NOT NULL, "
183         create_user="$create_user Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
184         create_user="$create_user Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
185         create_user="$create_user Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
186         create_user="$create_user Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
187         create_user="$create_user Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
188         create_user="$create_user Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
189         create_user="$create_user Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL," 
190         create_user="$create_user Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL," 
191         create_user="$create_user Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
192         create_user="$create_user File_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
193         create_user="$create_user Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
194         create_user="$create_user References_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
195         create_user="$create_user Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
196         create_user="$create_user Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, "
197         create_user="$create_user PRIMARY KEY Host (Host,User)"
198         create_user="$create_user );"
199
200         create_func=""
201         create_func="$create_func CREATE TABLE func ( "
202         create_func="$create_func name char(64) DEFAULT '' NOT NULL, "
203         create_func="$create_func ret tinyint(1) DEFAULT '0' NOT NULL," 
204         create_func="$create_func dl char(128) DEFAULT '' NOT NULL, "
205         create_func="$create_func type enum ('function','aggregate') NOT NULL, "
206         create_func="$create_func PRIMARY KEY (name)"
207         create_func="$create_func ); "
208
209         create_tblpriv=""
210         create_tblpriv="$create_tblpriv CREATE TABLE tables_priv ( "
211         create_tblpriv="$create_tblpriv Host char(60) DEFAULT '' NOT NULL, "
212         create_tblpriv="$create_tblpriv Db char(60) DEFAULT '' NOT NULL, "
213         create_tblpriv="$create_tblpriv User char(16) DEFAULT '' NOT NULL," 
214         create_tblpriv="$create_tblpriv Table_name char(60) DEFAULT '' NOT NULL, "
215         create_tblpriv="$create_tblpriv Grantor char(77) DEFAULT '' NOT NULL, "
216         create_tblpriv="$create_tblpriv Timestamp timestamp(14), "
217         create_tblpriv="$create_tblpriv Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL, "
218         create_tblpriv="$create_tblpriv Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
219         create_tblpriv="$create_tblpriv PRIMARY KEY (Host,Db,User,Table_name), "
220         create_tblpriv="$create_tblpriv KEY Grantor (Grantor)"
221         create_tblpriv="$create_tblpriv );"
222
223         create_colpriv=""
224         create_colpriv="$create_colpriv CREATE TABLE columns_priv ( "
225         create_colpriv="$create_colpriv Host char(60) DEFAULT '' NOT NULL, "
226         create_colpriv="$create_colpriv Db char(60) DEFAULT '' NOT NULL, "
227         create_colpriv="$create_colpriv User char(16) DEFAULT '' NOT NULL, "
228         create_colpriv="$create_colpriv Table_name char(60) DEFAULT '' NOT NULL, "
229         create_colpriv="$create_colpriv Column_name char(60) DEFAULT '' NOT NULL, "
230         create_colpriv="$create_colpriv Timestamp timestamp(14), "
231         create_colpriv="$create_colpriv Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL, "
232         create_colpriv="$create_colpriv PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
233         create_colpriv="$create_colpriv );"
234         if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
235             --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
236 CREATE DATABASE mysql;    
237 use mysql;
238 $create_db
239 $inser_db
240 $create_host
241 $create_user
242 $insert_user
243 $create_func
244 $create_tblpriv
245 $create_colpriv
246 #INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y');
247 #INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y');
248 INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N');
249 INSERT INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
250 INSERT INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
251 REPLACE INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
252 REPLACE INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
253 END_OF_DATA
254
255         then 
256             deltext
257             ok
258             cat << END_OF_MSG
259
260 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
261 This is done with:
262
263 /usr/bin/mysqladmin -u mysql password 'password'
264 /usr/bin/mysqladmin -h $hostname -u mysql password 'password'
265 /usr/bin/mysqladmin -u mysql_logrotate password 'password'
266
267 NOTE: mysql_logrotate password should be placed to /etc/mysqld.conf in
268 mysqladmin section. See the manual for more instructions.
269
270 END_OF_MSG
271       else  
272             deltext
273             fail
274             cat << END_OF_MSG
275 Installation of grant tables FAILED!
276
277 Examine the logs in $MYSQL_DATA_DIR for more information.  You can
278 also try to start the mysqld demon with:
279
280 /usr/sbin/mysqld --skip-grant &
281
282 You can use the command line tool /usr/bin/mysql to connect to the mysql
283 database and look at the grant tables:
284
285 shell> /usr/bin/mysql -u mysql mysql
286 mysql> show tables
287
288 Try 'mysqld --help' if you have problems with paths. Setting on
289 logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that
290 may be helpful. The latest information about MySQL is available on the
291 web at <http://www.mysql.com>.
292
293 Please check PLD ftp site for newer versions of this package.
294
295 Please consult the MySQL manual section: 'Problems running
296 mysql_install_db', and the manual section that describes problems on
297 your OS.  Another information source is the MySQL email archive.
298 Please check all of the above before mailing us!  And if you do mail
299 us, you MUST use the /usr/bin/mysqlbug script!  
300
301 END_OF_MSG
302
303         exit 1 
304     fi
305
306         ;;
307   *)
308         msg_Usage "$0 {start|stop|status|restart|reload|init}"
309         exit 1
310         ;;
311 esac
312
313 exit $RETVAL
This page took 0.125337 seconds and 4 git commands to generate.