]>
Commit | Line | Data |
---|---|---|
53a28f77 | 1 | #!/bin/sh |
2 | # | |
3 | # mysql A very fast and reliable SQL database engine | |
4 | # | |
f9004b9d | 5 | # chkconfig: 2345 84 25 |
53a28f77 | 6 | # |
7 | # description: A very fast and reliable SQL database engine. | |
8 | # | |
c42b39b6 | 9 | # pidfile: /var/lib/mysql/mysqld.pid |
53a28f77 | 10 | |
11 | # Source function library | |
12 | . /etc/rc.d/init.d/functions | |
13 | ||
14 | # Get network config | |
15 | . /etc/sysconfig/network | |
16 | ||
ac28c610 | 17 | # Check that networking is up |
8eb71226 | 18 | if is_yes "${NETWORKING}"; then |
a34ac4a4 | 19 | if [ ! -f /var/lock/subsys/network -a != stop -a != status -a != init ]; then |
8eb71226 | 20 | msg_network_down MySQL |
21 | exit 1 | |
22 | fi | |
23 | else | |
24 | exit 0 | |
e9ca44ab | 25 | fi |
26 | ||
27 | MYSQLD_ERRLOG=/var/log/mysql/err | |
28 | MYSQLD_CONFIG=/etc/mysqld.conf | |
40c36bca | 29 | |
53a28f77 | 30 | # Get service config |
7f44e59a | 31 | if [ -f /etc/sysconfig/mysql ]; then |
860cd80c | 32 | . /etc/sysconfig/mysql |
860cd80c | 33 | fi |
53a28f77 | 34 | |
ac28c610 | 35 | # Daemon doesn't die if config doesn't exist |
e9ca44ab | 36 | if [ ! -f $MYSQLD_CONFIG ]; then |
02e96f2e | 37 | nls "%s config %s does not exist." MySQL "$MYSQLD_CONFIG" >&2 |
38 | exit 6 | |
53a28f77 | 39 | fi |
40 | ||
823c13f7 SZ |
41 | eval `awk ' |
42 | /^[ \t]*\[.*\][ \t]*$/ { | |
43 | match($0,/\[.*\]/) | |
44 | section=substr($0,RSTART+1,RSTART+RLENGTH-3) | |
45 | } | |
46 | section=="mysqld" && $2~"=" { | |
47 | if ($1=="datadir") { | |
48 | printf("MYSQL_DATA_DIR=%s;", $3) | |
49 | } else if ($1=="user") { | |
50 | printf("MYSQL_USER=%s;", $3) | |
51 | } else if ($1=="pid-file") { | |
52 | printf("MYSQL_PIDFILE=%s;", $3) | |
53 | } | |
54 | } | |
55 | END { | |
56 | print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE" | |
57 | } | |
58 | ' /etc/mysqld.conf` | |
e9ca44ab | 59 | |
60 | if [ -z $MYSQL_DATA_DIR ]; then | |
8eb71226 | 61 | echo $(nls "MySQL datadir %s not configured properly" "$MYSQL_DATA_DIR")'!' |
02e96f2e | 62 | nls "Edit %s and configure it." "$MYSQLD_CONFIG" >&2 |
63 | exit 6 | |
e9ca44ab | 64 | fi |
65 | ||
66 | if [ -z $MYSQL_USER ]; then | |
8eb71226 | 67 | echo $(nls "MySQL user not configured properly")'!' |
02e96f2e | 68 | nls "Edit %s and configure it." "$MYSQLD_CONFIG" >&2 |
69 | exit 6 | |
e9ca44ab | 70 | fi |
71 | ||
02e96f2e | 72 | RETVAL=0 |
83fddc12 | 73 | case "$1" in |
b92e5cd1 | 74 | start) |
860cd80c | 75 | if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then |
02e96f2e | 76 | nls "MySQL database not initialized. Try \"%s init\" before start." "$0" >&2 |
77 | exit 6 | |
860cd80c | 78 | fi |
e9ca44ab | 79 | |
80 | # Check if the service is already running? | |
02e96f2e | 81 | if [ ! -f /var/lock/subsys/mysql ]; then |
e9ca44ab | 82 | msg_starting MySQL |
5678822f | 83 | busy |
02e96f2e | 84 | |
e9ca44ab | 85 | if [ ! -f $MYSQLD_ERRLOG ]; then |
b92e5cd1 | 86 | touch $MYSQLD_ERRLOG |
e9ca44ab | 87 | fi |
88 | chown mysql.mysql $MYSQLD_ERRLOG | |
89 | chmod 640 $MYSQLD_ERRLOG | |
1024bc72 AM |
90 | |
91 | [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0 | |
b7986924 | 92 | TMPDIR=/tmp nice -n ${SERVICE_RUN_NICE_LEVEL:-$DEFAULT_SERVICE_RUN_NICE_LEVEL} /usr/sbin/mysqld --defaults-file=$MYSQLD_CONFIG >>$MYSQLD_ERRLOG 2>&1 & |
8a2b6620 | 93 | sleep 1 |
40c36bca AF |
94 | if ps -C mysqld >/dev/null 2>&1; then |
95 | ok | |
8a2b6620 | 96 | else |
e9ca44ab | 97 | RETVAL=1 |
40c36bca | 98 | fail |
8a2b6620 | 99 | fi |
ee9b6a50 | 100 | [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql |
02e96f2e | 101 | else |
102 | msg_already_running MySQL | |
53a28f77 | 103 | fi |
53a28f77 | 104 | ;; |
105 | stop) | |
b92e5cd1 | 106 | if [ -f /var/lock/subsys/mysql ]; then |
107 | msg_stopping MySQL | |
108 | killproc mysqld | |
e9ca44ab | 109 | sleep 1 |
b92e5cd1 | 110 | rm -f /var/lock/subsys/mysql $MYSQLD_PIDFILE >/dev/null 2>&1 |
111 | else | |
112 | msg_not_running MySQL | |
b92e5cd1 | 113 | fi |
53a28f77 | 114 | ;; |
115 | status) | |
83fddc12 | 116 | status mysqld |
ee9b6a50 | 117 | exit $? |
53a28f77 | 118 | ;; |
02e96f2e | 119 | restart|force-reload) |
53a28f77 | 120 | $0 stop |
121 | $0 start | |
02e96f2e | 122 | exit $? |
53a28f77 | 123 | ;; |
573e1dcc | 124 | init) |
125 | # Check if not exist init database | |
e9ca44ab | 126 | if [ -d "$MYSQL_DATA_DIR/mysql" ]; then |
b92e5cd1 | 127 | nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql" |
128 | nls "before initializing database." | |
129 | exit 1; | |
e9ca44ab | 130 | fi |
131 | ||
132 | show "Creating privilege mysql tables" | |
133 | busy | |
134 | TMP=/tmp TMPDIR=/tmp | |
f19b03aa | 135 | |
ac28c610 | 136 | # Install this in the user table, too |
823c13f7 | 137 | hostname="`hostname --fqdn | tr -d '[:space:]'`" |
40c36bca | 138 | |
e9ca44ab | 139 | # Check if hostname is valid |
140 | if [ -z "$hostname" ]; then | |
141 | deltext | |
b92e5cd1 | 142 | fail |
143 | nls "Sorry, the host name is not configured." | |
144 | nls "Please configure the 'hostname' command to return a hostname." | |
145 | exit 1 | |
146 | elif ! hostname -i >/dev/null 2>&1; then | |
147 | deltext | |
148 | fail | |
149 | nls "Sorry, the host '%s' could not be looked up." "$hostname" | |
150 | nls "Please configure the 'hostname' command to return a correct hostname." | |
e9ca44ab | 151 | exit 1 |
e9ca44ab | 152 | fi |
153 | ||
823c13f7 SZ |
154 | # Initialize variables |
155 | c_d="" i_d="" | |
156 | c_h="" i_h="" | |
157 | c_u="" i_u="" | |
158 | c_f="" i_f="" | |
159 | c_t="" c_c="" | |
02e96f2e | 160 | |
823c13f7 SZ |
161 | # Check for old tables |
162 | if test ! -f $mdata/db.frm | |
163 | then | |
164 | # mysqld --bootstrap wants one command/line | |
165 | c_d="$c_d CREATE TABLE db (" | |
166 | c_d="$c_d Host char(60) DEFAULT '' NOT NULL," | |
167 | c_d="$c_d Db char(64) DEFAULT '' NOT NULL," | |
168 | c_d="$c_d User char(16) DEFAULT '' NOT NULL," | |
169 | c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
170 | c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
171 | c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
172 | c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
173 | c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
174 | c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
175 | c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
176 | c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
177 | c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
178 | c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
179 | c_d="$c_d PRIMARY KEY Host (Host,Db,User)," | |
180 | c_d="$c_d KEY User (User)" | |
181 | c_d="$c_d )" | |
182 | c_d="$c_d comment='Database privileges';" | |
02e96f2e | 183 | |
823c13f7 SZ |
184 | i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y'); |
185 | INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y');" | |
186 | fi | |
02e96f2e | 187 | |
823c13f7 SZ |
188 | if test ! -f $mdata/host.frm |
189 | then | |
190 | c_h="$c_h CREATE TABLE host (" | |
191 | c_h="$c_h Host char(60) DEFAULT '' NOT NULL," | |
192 | c_h="$c_h Db char(64) DEFAULT '' NOT NULL," | |
193 | c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
194 | c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
195 | c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
196 | c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
197 | c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
198 | c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
199 | c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
200 | c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
201 | c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
202 | c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
203 | c_h="$c_h PRIMARY KEY Host (Host,Db)" | |
204 | c_h="$c_h )" | |
205 | c_h="$c_h comment='Host privileges; Merged with database privileges';" | |
206 | fi | |
02e96f2e | 207 | |
823c13f7 SZ |
208 | if test ! -f $mdata/user.frm |
209 | then | |
210 | c_u="$c_u CREATE TABLE user (" | |
211 | c_u="$c_u Host char(60) DEFAULT '' NOT NULL," | |
212 | c_u="$c_u User char(16) DEFAULT '' NOT NULL," | |
213 | c_u="$c_u Password char(16) DEFAULT '' NOT NULL," | |
214 | c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
215 | c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
216 | c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
217 | c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
218 | c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
219 | c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
220 | c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
221 | c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
222 | c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
223 | c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
224 | c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
225 | c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
226 | c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
227 | c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," | |
228 | c_u="$c_u PRIMARY KEY Host (Host,User)" | |
229 | c_u="$c_u )" | |
230 | c_u="$c_u comment='Users and global privileges';" | |
02e96f2e | 231 | |
823c13f7 SZ |
232 | i_u="INSERT INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); |
233 | INSERT INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); | |
234 | ||
235 | REPLACE INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); | |
236 | REPLACE INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); | |
237 | ||
1b6aa76d | 238 | INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N');" |
823c13f7 | 239 | fi |
02e96f2e | 240 | |
823c13f7 SZ |
241 | if test ! -f $mdata/func.frm |
242 | then | |
243 | c_f="$c_f CREATE TABLE func (" | |
244 | c_f="$c_f name char(64) DEFAULT '' NOT NULL," | |
245 | c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL," | |
246 | c_f="$c_f dl char(128) DEFAULT '' NOT NULL," | |
247 | c_f="$c_f type enum ('function','aggregate') NOT NULL," | |
248 | c_f="$c_f PRIMARY KEY (name)" | |
249 | c_f="$c_f )" | |
250 | c_f="$c_f comment='User defined functions';" | |
251 | fi | |
02e96f2e | 252 | |
823c13f7 SZ |
253 | if test ! -f $mdata/tables_priv.frm |
254 | then | |
255 | c_t="$c_t CREATE TABLE tables_priv (" | |
256 | c_t="$c_t Host char(60) DEFAULT '' NOT NULL," | |
257 | c_t="$c_t Db char(64) DEFAULT '' NOT NULL," | |
258 | c_t="$c_t User char(16) DEFAULT '' NOT NULL," | |
259 | c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL," | |
260 | c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL," | |
261 | c_t="$c_t Timestamp timestamp(14)," | |
262 | c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL," | |
263 | c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL," | |
264 | c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name)," | |
265 | c_t="$c_t KEY Grantor (Grantor)" | |
266 | c_t="$c_t )" | |
267 | c_t="$c_t comment='Table privileges';" | |
268 | fi | |
02e96f2e | 269 | |
823c13f7 SZ |
270 | if test ! -f $mdata/columns_priv.frm |
271 | then | |
272 | c_c="$c_c CREATE TABLE columns_priv (" | |
273 | c_c="$c_c Host char(60) DEFAULT '' NOT NULL," | |
119ef1d0 | 274 | c_c="$c_c Db char(60) DEFAULT '' NOT NULL," |
823c13f7 | 275 | c_c="$c_c User char(16) DEFAULT '' NOT NULL," |
119ef1d0 | 276 | c_c="$c_c Table_name char(60) DEFAULT '' NOT NULL," |
277 | c_c="$c_c Column_name char(60) DEFAULT '' NOT NULL," | |
823c13f7 SZ |
278 | c_c="$c_c Timestamp timestamp(14)," |
279 | c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL," | |
280 | c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)" | |
281 | c_c="$c_c )" | |
282 | c_c="$c_c comment='Column privileges';" | |
283 | fi | |
284 | ||
e9ca44ab | 285 | if /usr/sbin/mysqld --bootstrap --skip-grant-tables \ |
823c13f7 SZ |
286 | --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA |
287 | CREATE DATABASE mysql; | |
e9ca44ab | 288 | use mysql; |
823c13f7 SZ |
289 | $c_d |
290 | $i_d | |
291 | ||
292 | $c_h | |
293 | $i_h | |
e9ca44ab | 294 | |
823c13f7 SZ |
295 | $c_u |
296 | $i_u | |
297 | ||
298 | $c_f | |
299 | $i_f | |
300 | ||
301 | $c_t | |
302 | $c_c | |
303 | END_OF_DATA | |
e9ca44ab | 304 | then |
e9ca44ab | 305 | ok |
306 | cat << END_OF_MSG | |
6a46c354 | 307 | |
308 | PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS! | |
e9ca44ab | 309 | This is done with: |
6a46c354 | 310 | |
e9ca44ab | 311 | /usr/bin/mysqladmin -u mysql password 'password' |
f19b03aa | 312 | /usr/bin/mysqladmin -h $hostname -u mysql password 'password' |
e9ca44ab | 313 | /usr/bin/mysqladmin -u mysql_logrotate password 'password' |
6a46c354 | 314 | |
315 | NOTE: mysql_logrotate password should be placed to /etc/mysqld.conf in | |
316 | mysqladmin section. See the manual for more instructions. | |
e9ca44ab | 317 | |
318 | END_OF_MSG | |
319 | else | |
e9ca44ab | 320 | fail |
321 | cat << END_OF_MSG | |
322 | Installation of grant tables FAILED! | |
323 | ||
324 | Examine the logs in $MYSQL_DATA_DIR for more information. You can | |
325 | also try to start the mysqld demon with: | |
326 | ||
327 | /usr/sbin/mysqld --skip-grant & | |
328 | ||
329 | You can use the command line tool /usr/bin/mysql to connect to the mysql | |
330 | database and look at the grant tables: | |
331 | ||
332 | shell> /usr/bin/mysql -u mysql mysql | |
333 | mysql> show tables | |
334 | ||
335 | Try 'mysqld --help' if you have problems with paths. Setting on | |
336 | logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that | |
337 | may be helpful. The latest information about MySQL is available on the | |
78b16243 | 338 | web at http://www.mysql.com/. |
e9ca44ab | 339 | |
340 | Please check PLD ftp site for newer versions of this package. | |
341 | ||
342 | Please consult the MySQL manual section: 'Problems running | |
343 | mysql_install_db', and the manual section that describes problems on | |
344 | your OS. Another information source is the MySQL email archive. | |
345 | Please check all of the above before mailing us! And if you do mail | |
346 | us, you MUST use the /usr/bin/mysqlbug script! | |
347 | ||
348 | END_OF_MSG | |
349 | ||
350 | exit 1 | |
823c13f7 | 351 | fi |
573e1dcc | 352 | ;; |
53a28f77 | 353 | *) |
02e96f2e | 354 | msg_usage "$0 {start|stop|init|restart|force-reload|status}" |
355 | exit 3 | |
53a28f77 | 356 | esac |
40c36bca | 357 | |
ee9b6a50 | 358 | exit $RETVAL |