]>
Commit | Line | Data |
---|---|---|
1e195a94 | 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 | # 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_yes "${NETWORKING}"; then | |
19 | if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then | |
20 | msg_network_down MySQL | |
21 | exit 1 | |
22 | fi | |
23 | else | |
24 | exit 0 | |
25 | fi | |
26 | ||
27 | MYSQLD_ERRLOG=/var/log/mysql/err | |
28 | MYSQLD_CONFIG=/etc/mysqld.conf | |
29 | ||
30 | # Get service config | |
31 | if [ -f /etc/sysconfig/mysql ]; then | |
32 | . /etc/sysconfig/mysql | |
33 | fi | |
34 | ||
35 | # Daemon doesn't die if config doesn't exist | |
36 | if [ ! -f $MYSQLD_CONFIG ]; then | |
37 | nls "%s config %s does not exist." MySQL "$MYSQLD_CONFIG" >&2 | |
38 | exit 6 | |
39 | fi | |
40 | ||
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` | |
59 | ||
60 | if [ -z $MYSQL_DATA_DIR ]; then | |
61 | echo "$(nls 'MySQL datadir %s not configured properly' "$MYSQL_DATA_DIR")"'!' >&2 | |
62 | nls "Edit %s and configure it." "$MYSQLD_CONFIG" >&2 | |
63 | exit 6 | |
64 | fi | |
65 | ||
66 | if [ -z $MYSQL_USER ]; then | |
67 | echo "$(nls 'MySQL user not configured properly')"'!' >&2 | |
68 | nls "Edit %s and configure it." "$MYSQLD_CONFIG" >&2 | |
69 | exit 6 | |
70 | fi | |
71 | ||
72 | RETVAL=0 | |
73 | case "$1" in | |
74 | start) | |
75 | if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then | |
76 | nls "MySQL database not initialized. Try \"%s init\" before start." "$0" >&2 | |
77 | exit 6 | |
78 | fi | |
79 | ||
80 | # Check if the service is already running? | |
81 | if [ ! -f /var/lock/subsys/mysql ]; then | |
82 | msg_starting MySQL | |
83 | busy | |
84 | ||
85 | if [ ! -f $MYSQLD_ERRLOG ]; then | |
86 | touch $MYSQLD_ERRLOG | |
87 | fi | |
88 | chown mysql.mysql $MYSQLD_ERRLOG | |
89 | chmod 640 $MYSQLD_ERRLOG | |
90 | ||
91 | [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0 | |
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 & | |
93 | sleep 1 | |
94 | if ps -C mysqld >/dev/null 2>&1; then | |
95 | ok | |
96 | else | |
97 | RETVAL=1 | |
98 | fail | |
99 | fi | |
100 | [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql | |
101 | else | |
102 | msg_already_running MySQL | |
103 | fi | |
104 | ;; | |
105 | stop) | |
106 | if [ -f /var/lock/subsys/mysql ]; then | |
107 | msg_stopping MySQL | |
108 | killproc mysqld | |
109 | sleep 1 | |
110 | rm -f /var/lock/subsys/mysql $MYSQLD_PIDFILE >/dev/null 2>&1 | |
111 | else | |
112 | msg_not_running MySQL | |
113 | fi | |
114 | ;; | |
115 | status) | |
116 | status mysqld | |
117 | exit $? | |
118 | ;; | |
119 | restart|force-reload) | |
120 | $0 stop | |
121 | $0 start | |
122 | exit $? | |
123 | ;; | |
124 | init) | |
125 | # Check if not exist init database | |
126 | if [ -d "$MYSQL_DATA_DIR/mysql" ]; then | |
127 | nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql" | |
128 | nls "before initializing database." | |
129 | exit 1; | |
130 | fi | |
131 | ||
132 | show "Creating privilege mysql tables" | |
133 | busy | |
134 | TMP=/tmp TMPDIR=/tmp | |
135 | ||
136 | # Install this in the user table, too | |
137 | hostname="`hostname --fqdn | tr -d '[:space:]'`" | |
138 | ||
139 | # Check if hostname is valid | |
140 | if [ -z "$hostname" ]; then | |
141 | deltext | |
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." | |
151 | exit 1 | |
152 | fi | |
153 | ||
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="" | |
160 | ||
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';" | |
183 | ||
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 | |
187 | ||
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 | |
207 | ||
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';" | |
231 | ||
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 | ||
238 | INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N');" | |
239 | fi | |
240 | ||
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 | |
252 | ||
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 | |
269 | ||
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," | |
274 | c_c="$c_c Db char(60) DEFAULT '' NOT NULL," | |
275 | c_c="$c_c User char(16) DEFAULT '' NOT NULL," | |
276 | c_c="$c_c Table_name char(60) DEFAULT '' NOT NULL," | |
277 | c_c="$c_c Column_name char(60) DEFAULT '' NOT NULL," | |
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 | ||
285 | if /usr/sbin/mysqld --bootstrap --skip-grant-tables \ | |
286 | --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA | |
287 | CREATE DATABASE mysql; | |
288 | use mysql; | |
289 | $c_d | |
290 | $i_d | |
291 | ||
292 | $c_h | |
293 | $i_h | |
294 | ||
295 | $c_u | |
296 | $i_u | |
297 | ||
298 | $c_f | |
299 | $i_f | |
300 | ||
301 | $c_t | |
302 | $c_c | |
303 | END_OF_DATA | |
304 | then | |
305 | ok | |
306 | cat << END_OF_MSG | |
307 | ||
308 | PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS! | |
309 | This is done with: | |
310 | ||
311 | /usr/bin/mysqladmin -u mysql password 'password' | |
312 | /usr/bin/mysqladmin -h $hostname -u mysql password 'password' | |
313 | /usr/bin/mysqladmin -u mysql_logrotate password 'password' | |
314 | ||
315 | NOTE: mysql_logrotate password should be placed to /etc/mysqld.conf in | |
316 | mysqladmin section. See the manual for more instructions. | |
317 | ||
318 | END_OF_MSG | |
319 | else | |
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 | |
338 | web at http://www.mysql.com/. | |
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 | |
351 | fi | |
352 | ;; | |
353 | *) | |
354 | msg_usage "$0 {start|stop|init|restart|force-reload|status}" | |
355 | exit 3 | |
356 | esac | |
357 | ||
358 | exit $RETVAL |