#!/bin/sh # # mysql A very fast and reliable SQL database engine # # chkconfig: 2345 90 25 # # description: A very fast and reliable SQL database engine. # # pidfile: /var/lib/mysql/mysqld.pid # Source function library . /etc/rc.d/init.d/functions # Get network config . /etc/sysconfig/network # Check that networking is up. if is_no "${NETWORKING}"; then msg_network_down MySQL exit 1 fi MYSQLD_ERRLOG=/var/log/mysql/err MYSQLD_CONFIG=/etc/mysqld.conf # Get service config if [ -f /etc/sysconfig/mysql ] ; then . /etc/sysconfig/mysql fi # Daemon don't dies if config doesn't exists if [ ! -f $MYSQLD_CONFIG ]; then echo "MySQL config $MYSQLD_CONFIG not exists" exit 1 fi if [ ! -f $MYSQLD_CONFIG ]; then echo "MySQL config $MYSQLD_CONFIG not exists" exit 1 fi eval `awk ' /^[ \t]*\[.*\][ \t]*$/ { match($0,/\[.*\]/) section=substr($0,RSTART+1,RSTART+RLENGTH-3) } section=="mysqld" && $2~"=" { if ($1=="datadir") { printf("MYSQL_DATA_DIR=%s;", $3) } else if ($1=="user") { printf("MYSQL_USER=%s;", $3) } else if ($1=="pid-file") { printf("MYSQL_PIDFILE=%s;", $3) } } END { print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE" } ' /etc/mysqld.conf` if [ -z $MYSQL_DATA_DIR ]; then echo "MySQL datadir $MYSQL_DATA_DIR not configured propely!" echo "Edit $MYSQLD_CONFIG and configure it." exit 1 fi if [ -z $MYSQL_USER ]; then echo "MySQL user not configured propely!" echo "Edit $MYSQLD_CONFIG and configure it." exit 1 fi case "$1" in start) if [ ! -d "$MYSQL_DATA_DIR/mysql" ]; then echo "MySQL database not initialized. Try \"$0 init\" before start." exit 1 fi # Check if the service is already running? if [ -f /var/lock/subsys/mysql ]; then msg_already_running MySQL else msg_starting MySQL busy if [ ! -f $MYSQLD_ERRLOG ]; then touch $MYSQLD_ERRLOG fi chown mysql.mysql $MYSQLD_ERRLOG chmod 640 $MYSQLD_ERRLOG /usr/sbin/mysqld --defaults-file=$MYSQLD_CONFIG >>$MYSQLD_ERRLOG 2>&1 & sleep 1 deltext if ps -C mysqld >/dev/null 2>&1; then RETVAL=0 ok else RETVAL=1 fail fi [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mysql fi ;; stop) if [ -f /var/lock/subsys/mysql ]; then msg_stopping MySQL killproc mysqld sleep 1 rm -f /var/lock/subsys/mysql $MYSQLD_PIDFILE >/dev/null 2>&1 else msg_not_running MySQL exit 1 fi ;; status) status mysqld exit $? ;; restart|reload) $0 stop $0 start ;; init) # Check if not exist init database if [ -d "$MYSQL_DATA_DIR/mysql" ]; then echo "Seems that database is initialized now. Remove by hand $MYSQL_DATA_DIR/mysql" echo "before initialize database." exit 1; fi show "Creating privilege mysql tables" busy TMP=/tmp TMPDIR=/tmp # Install this too in the user table hostname="`hostname --fqdn | tr -d '[:space:]'`" # Check if hostname is valid if [ -z "$hostname" ]; then deltext fail echo "Sorry, the host name is not configured." echo "Please configure the 'hostname' command to return a hostname." exit 1 elif ! hostname -i >/dev/null 2>&1; then deltext fail echo "Sorry, the host '$hostname' could not be looked up." echo "Please configure the 'hostname' command to return a correct hostname." exit 1 fi # Initialize variables c_d="" i_d="" c_h="" i_h="" c_u="" i_u="" c_f="" i_f="" c_t="" c_c="" # Check for old tables if test ! -f $mdata/db.frm then # mysqld --bootstrap wants one command/line c_d="$c_d CREATE TABLE db (" c_d="$c_d Host char(60) DEFAULT '' NOT NULL," c_d="$c_d Db char(64) DEFAULT '' NOT NULL," c_d="$c_d User char(16) DEFAULT '' NOT NULL," c_d="$c_d Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d References_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_d="$c_d PRIMARY KEY Host (Host,Db,User)," c_d="$c_d KEY User (User)" c_d="$c_d )" c_d="$c_d comment='Database privileges';" i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y'); INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y');" fi if test ! -f $mdata/host.frm then c_h="$c_h CREATE TABLE host (" c_h="$c_h Host char(60) DEFAULT '' NOT NULL," c_h="$c_h Db char(64) DEFAULT '' NOT NULL," c_h="$c_h Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h References_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_h="$c_h PRIMARY KEY Host (Host,Db)" c_h="$c_h )" c_h="$c_h comment='Host privileges; Merged with database privileges';" fi if test ! -f $mdata/user.frm then c_u="$c_u CREATE TABLE user (" c_u="$c_u Host char(60) DEFAULT '' NOT NULL," c_u="$c_u User char(16) DEFAULT '' NOT NULL," c_u="$c_u Password char(16) DEFAULT '' NOT NULL," c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Process_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u File_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u References_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," c_u="$c_u PRIMARY KEY Host (Host,User)" c_u="$c_u )" c_u="$c_u comment='Users and global privileges';" i_u="INSERT INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); INSERT INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); REPLACE INTO user VALUES ('localhost','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); REPLACE INTO user VALUES ('$hostname','mysql','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); INSERT INTO user VALUES ('localhost','mysql_logrotate','','N','N','N','N','N','N','Y','N','N','N','N','N','N','N');" fi if test ! -f $mdata/func.frm then c_f="$c_f CREATE TABLE func (" c_f="$c_f name char(64) DEFAULT '' NOT NULL," c_f="$c_f ret tinyint(1) DEFAULT '0' NOT NULL," c_f="$c_f dl char(128) DEFAULT '' NOT NULL," c_f="$c_f type enum ('function','aggregate') NOT NULL," c_f="$c_f PRIMARY KEY (name)" c_f="$c_f )" c_f="$c_f comment='User defined functions';" fi if test ! -f $mdata/tables_priv.frm then c_t="$c_t CREATE TABLE tables_priv (" c_t="$c_t Host char(60) DEFAULT '' NOT NULL," c_t="$c_t Db char(64) DEFAULT '' NOT NULL," c_t="$c_t User char(16) DEFAULT '' NOT NULL," c_t="$c_t Table_name char(60) DEFAULT '' NOT NULL," c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL," c_t="$c_t Timestamp timestamp(14)," c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL," c_t="$c_t Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL," c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name)," c_t="$c_t KEY Grantor (Grantor)" c_t="$c_t )" c_t="$c_t comment='Table privileges';" fi if test ! -f $mdata/columns_priv.frm then c_c="$c_c CREATE TABLE columns_priv (" c_c="$c_c Host char(60) DEFAULT '' NOT NULL," c_c="$c_c Db char(60) DEFAULT '' NOT NULL," c_c="$c_c User char(16) DEFAULT '' NOT NULL," c_c="$c_c Table_name char(60) DEFAULT '' NOT NULL," c_c="$c_c Column_name char(60) DEFAULT '' NOT NULL," c_c="$c_c Timestamp timestamp(14)," c_c="$c_c Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL," c_c="$c_c PRIMARY KEY (Host,Db,User,Table_name,Column_name)" c_c="$c_c )" c_c="$c_c comment='Column privileges';" fi if /usr/sbin/mysqld --bootstrap --skip-grant-tables \ --datadir=$MYSQL_DATA_DIR --user=$MYSQL_USER << END_OF_DATA CREATE DATABASE mysql; use mysql; $c_d $i_d $c_h $i_h $c_u $i_u $c_f $i_f $c_t $c_c END_OF_DATA then deltext ok cat << END_OF_MSG PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS! This is done with: /usr/bin/mysqladmin -u mysql password 'password' /usr/bin/mysqladmin -h $hostname -u mysql password 'password' /usr/bin/mysqladmin -u mysql_logrotate password 'password' NOTE: mysql_logrotate password should be placed to /etc/mysqld.conf in mysqladmin section. See the manual for more instructions. END_OF_MSG else deltext fail cat << END_OF_MSG Installation of grant tables FAILED! Examine the logs in $MYSQL_DATA_DIR for more information. You can also try to start the mysqld demon with: /usr/sbin/mysqld --skip-grant & You can use the command line tool /usr/bin/mysql to connect to the mysql database and look at the grant tables: shell> /usr/bin/mysql -u mysql mysql mysql> show tables Try 'mysqld --help' if you have problems with paths. Setting on logging in /etc/mysqld.conf gives you a log in /var/log/mysql/log that may be helpful. The latest information about MySQL is available on the web at . Please check PLD ftp site for newer versions of this package. Please consult the MySQL manual section: 'Problems running mysql_install_db', and the manual section that describes problems on your OS. Another information source is the MySQL email archive. Please check all of the above before mailing us! And if you do mail us, you MUST use the /usr/bin/mysqlbug script! END_OF_MSG exit 1 fi ;; *) msg_usage "$0 {start|stop|status|restart|reload|init}" exit 1 ;; esac exit $RETVAL