3 # mysql A very fast and reliable SQL database engine
5 # chkconfig: 2345 84 25
7 # description: A very fast and reliable SQL database engine.
9 # pidfile: /var/lib/mysql/mysqld.pid
11 # Source function library
12 . /etc/rc.d/init.d/functions
15 . /etc/sysconfig/network
17 # Check that networking is up
18 if is_no "${NETWORKING}"; then
19 msg_network_down MySQL
23 MYSQLD_ERRLOG=/var/log/mysql/err
24 MYSQLD_CONFIG=/etc/mysqld.conf
27 if [ -f /etc/sysconfig/mysql ] ; then
28 . /etc/sysconfig/mysql
31 # Daemon doesn't die if config doesn't exist
32 if [ ! -f $MYSQLD_CONFIG ]; then
33 nls "MySQL config $MYSQLD_CONFIG does not exist"
38 /^[ \t]*\[.*\][ \t]*$/ {
40 section=substr($0,RSTART+1,RSTART+RLENGTH-3)
42 section=="mysqld" && $2~"=" {
44 printf("MYSQL_DATA_DIR=%s;", $3)
45 } else if ($1=="user") {
46 printf("MYSQL_USER=%s;", $3)
47 } else if ($1=="pid-file") {
48 printf("MYSQL_PIDFILE=%s;", $3)
52 print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE"
56 if [ -z $MYSQL_DATA_DIR ]; then
57 nls "MySQL datadir $MYSQL_DATA_DIR not configured properly!"
58 nls "Edit $MYSQLD_CONFIG and configure it."
62 if [ -z $MYSQL_USER ]; then
63 nls "MySQL user not configured properly!"
64 nls "Edit $MYSQLD_CONFIG and configure it."
71 if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then
72 nls "MySQL database not initialized. Try \"$0 init\" before start."
76 # Check if the service is already running?
77 if [ -f /var/lock/subsys/mysql ]; then
78 msg_already_running MySQL
83 if [ ! -f $MYSQLD_ERRLOG ]; then
86 chown mysql.mysql $MYSQLD_ERRLOG
87 chmod 640 $MYSQLD_ERRLOG
89 [ -z "$DEFAULT_SERVICE_RUN_NICE_LEVEL" ] && DEFAULT_SERVICE_RUN_NICE_LEVEL=0
90 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 if ps -C mysqld >/dev/null 2>&1; then
100 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql
104 if [ -f /var/lock/subsys/mysql ]; then
108 rm -f /var/lock/subsys/mysql $MYSQLD_PIDFILE >/dev/null 2>&1
110 msg_not_running MySQL
123 # Check if not exist init database
124 if [ -d "$MYSQL_DATA_DIR/mysql" ]; then
125 nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
126 nls "before initializing database."
130 show "Creating privilege mysql tables"
134 # Install this in the user table, too
135 hostname="`hostname --fqdn | tr -d '[:space:]'`"
137 # Check if hostname is valid
138 if [ -z "$hostname" ]; then
141 nls "Sorry, the host name is not configured."
142 nls "Please configure the 'hostname' command to return a hostname."
144 elif ! hostname -i >/dev/null 2>&1; then
147 nls "Sorry, the host '%s' could not be looked up." "$hostname"
148 nls "Please configure the 'hostname' command to return a correct hostname."
152 # Initialize variables
159 # Check for old tables
160 if test ! -f $mdata/db.frm
162 # mysqld --bootstrap wants one command/line
163 c_d="$c_d CREATE TABLE db ("
164 c_d="$c_d Host char(60) DEFAULT '' NOT NULL,"
165 c_d="$c_d Db char(64) DEFAULT '' NOT NULL,"
166 c_d="$c_d User char(16) DEFAULT '' NOT NULL,"
167 c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
168 c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
169 c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
170 c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
171 c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
172 c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
173 c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
174 c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
175 c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
176 c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
177 c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
178 c_d="$c_d KEY User (User)"
180 c_d="$c_d comment='Database privileges';"
182 i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y');
183 INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y');"
186 if test ! -f $mdata/host.frm
188 c_h="$c_h CREATE TABLE host ("
189 c_h="$c_h Host char(60) DEFAULT '' NOT NULL,"
190 c_h="$c_h Db char(64) DEFAULT '' NOT NULL,"
191 c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
192 c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
193 c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
194 c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
195 c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
196 c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
197 c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
198 c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
199 c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
200 c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
201 c_h="$c_h PRIMARY KEY Host (Host,Db)"
203 c_h="$c_h comment='Host privileges; Merged with database privileges';"
206 if test ! -f $mdata/user.frm
208 c_u="$c_u CREATE TABLE user ("
209 c_u="$c_u Host char(60) DEFAULT '' NOT NULL,"
210 c_u="$c_u User char(16) DEFAULT '' NOT NULL,"
211 c_u="$c_u Password char(16) DEFAULT '' NOT NULL,"
212 c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
213 c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
214 c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
215 c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
216 c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
217 c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
218 c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
219 c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
220 c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
221 c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
222 c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
223 c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
224 c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
225 c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
226 c_u="$c_u PRIMARY KEY Host (Host,User)"
228 c_u="$c_u comment='Users and global privileges';"
230 i_u="INSERT INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
231 INSERT INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
233 REPLACE INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
234 REPLACE INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
236 INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N');"
239 if test ! -f $mdata/func.frm
241 c_f="$c_f CREATE TABLE func ("
242 c_f="$c_f name char(64) DEFAULT '' NOT NULL,"
243 c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL,"
244 c_f="$c_f dl char(128) DEFAULT '' NOT NULL,"
245 c_f="$c_f type enum ('function','aggregate') NOT NULL,"
246 c_f="$c_f PRIMARY KEY (name)"
248 c_f="$c_f comment='User defined functions';"
251 if test ! -f $mdata/tables_priv.frm
253 c_t="$c_t CREATE TABLE tables_priv ("
254 c_t="$c_t Host char(60) DEFAULT '' NOT NULL,"
255 c_t="$c_t Db char(64) DEFAULT '' NOT NULL,"
256 c_t="$c_t User char(16) DEFAULT '' NOT NULL,"
257 c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL,"
258 c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
259 c_t="$c_t Timestamp timestamp(14),"
260 c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,"
261 c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
262 c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
263 c_t="$c_t KEY Grantor (Grantor)"
265 c_t="$c_t comment='Table privileges';"
268 if test ! -f $mdata/columns_priv.frm
270 c_c="$c_c CREATE TABLE columns_priv ("
271 c_c="$c_c Host char(60) DEFAULT '' NOT NULL,"
272 c_c="$c_c Db char(60) DEFAULT '' NOT NULL,"
273 c_c="$c_c User char(16) DEFAULT '' NOT NULL,"
274 c_c="$c_c Table_name char(60) DEFAULT '' NOT NULL,"
275 c_c="$c_c Column_name char(60) DEFAULT '' NOT NULL,"
276 c_c="$c_c Timestamp timestamp(14),"
277 c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
278 c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
280 c_c="$c_c comment='Column privileges';"
283 if /usr/sbin/mysqld --bootstrap --skip-grant-tables \
284 --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA
285 CREATE DATABASE mysql;
307 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
310 /usr/bin/mysqladmin -u mysql password 'password'
311 /usr/bin/mysqladmin -h $hostname -u mysql password 'password'
312 /usr/bin/mysqladmin -u mysql_logrotate password 'password'
314 NOTE: mysql_logrotate password should be placed to /etc/mysqld.conf in
315 mysqladmin section. See the manual for more instructions.
322 Installation of grant tables FAILED!
324 Examine the logs in $MYSQL_DATA_DIR for more information. You can
325 also try to start the mysqld demon with:
327 /usr/sbin/mysqld --skip-grant &
329 You can use the command line tool /usr/bin/mysql to connect to the mysql
330 database and look at the grant tables:
332 shell> /usr/bin/mysql -u mysql mysql
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/.
340 Please check PLD ftp site for newer versions of this package.
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!
354 msg_usage "$0 {start|stop|restart|reload||status|init}"