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