]> git.pld-linux.org Git - packages/mysql.git/blobdiff - mysql.init
- update init scripts and related stuff
[packages/mysql.git] / mysql.init
index f5cc30fea348d6dac77846d6547f13dca4e0d3e1..6b1da9b8dbfe151e9f52cd1a8c3dc2f1088aad8e 100755 (executable)
@@ -27,13 +27,13 @@ fi
 
 if [ -f /etc/mysql/clusters.conf ]; then
        MYSQL_DB_CLUSTERS=$(awk -F= '!/^#/ && /=/{print $2}' /etc/mysql/clusters.conf)
-       if [ -z "$MYSQL_DB_CLUSTERS"  ]; then
+       if [ -z "$MYSQL_DB_CLUSTERS" ]; then
                nls "Warning: there are no configured clusters."
        fi
 
 else
        nls "Warning: Missing clusters config file %s" /etc/mysql/clusters.conf
-       if [ -z "$MYSQL_DB_CLUSTERS"  ]; then
+       if [ -z "$MYSQL_DB_CLUSTERS" ]; then
                nls "Warning: there are no configured clusters."
                nls "Using default cluster /var/lib/mysql (compatibility mode)"
                MYSQL_DB_CLUSTERS=/var/lib/mysql
@@ -51,6 +51,8 @@ else
        exit 0
 fi
 
+sharedir=/usr/share/mysql
+
 action="$1"
 
 # any db cluster as command line argument?
@@ -123,7 +125,7 @@ mysqlstatus() {
        fi
 
        if [ "$mode" = "start" ]; then
-               MYSQL_GREP_PID=$(grep -lE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline 2> /dev/null | awk -F "/" '{ print $3; exit; }')
+               MYSQL_GREP_PID=$(grep -alE "^/usr/sbin/mysqld.*${MYSQL_PIDFILE}" /proc/[0-9]*/cmdline 2> /dev/null | awk -F "/" '{ print $3; exit; }')
                if [ -n "$MYSQL_GREP_PID" ]; then
                        MYSQL_PID=$MYSQL_GREP_PID
                        if grep -qa "$MYSQL_PIDFILE" /proc/$MYSQL_PID/cmdline 2> /dev/null; then
@@ -358,6 +360,11 @@ mysqlstop() {
 # report slave status
 # uses MYSQL_SOCKET - path to mysql socket
 slave_status() {
+       if [ ! -x /usr/bin/mysql ]; then
+               echo >&2 "Slave status not available: 'mysql' program not installed."
+               return
+       fi
+
        # see if slave status can be reported
        local err=0 slave_status=$(mysql --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" -e 'show slave status\G')
        if [ -z "$slave_status" ]; then
@@ -455,10 +462,10 @@ mysqlinit() {
                nls "Seems that database is initialized now. Remove by hand %s" "$MYSQL_DATA_DIR/mysql"
                nls "before initializing database."
                nls "For now skipping cluster %s." "$clusterdir"
-               return
+               exit 6
        fi
 
-       show "Installing MySQL system tables for $MYSQL_DATA_DIR"
+       show "Initializing MySQL database for $MYSQL_DATA_DIR"
        busy
        TMP=/tmp TMPDIR=/tmp
 
@@ -468,93 +475,70 @@ mysqlinit() {
        chown mysql:mysql "$MYSQL_CLUSTER_DIR/mysqldb" "$MYSQL_DATA_DIR" > /dev/null 2>&1
        chmod 751 "$MYSQL_CLUSTER_DIR" "$MYSQL_CLUSTER_DIR/mysqldb"
 
-       if [ -f /usr/share/mysql/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
-           sed -e "
-               s#\(datadir.*\)=.*#\1= $MYSQL_DATA_DIR#g;
-               s#\(pid-file.*\)=.*#\1= $MYSQL_PIDFILE#g;
-               s#\(socket.*\)=.*#\1= $MYSQL_SOCKET#g;
-               s#@clusterdir@#$MYSQL_CLUSTER_DIR#g;
-               " /usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
-           chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
-           chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
+       if [ -f $sharedir/mysqld.conf -a ! -f "$MYSQL_CLUSTER_DIR/mysqld.conf" ]; then
+               sed -e "
+                       s#\(datadir.*\)=.*#\1= $MYSQL_DATA_DIR#g;
+                       s#\(pid-file.*\)=.*#\1= $MYSQL_PIDFILE#g;
+                       s#\(socket.*\)=.*#\1= $MYSQL_SOCKET#g;
+                       s#@clusterdir@#$MYSQL_CLUSTER_DIR#g;
+               " $sharedir/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
+               chown root:root "$MYSQL_CLUSTER_DIR/mysqld.conf"
+               chmod 640 "$MYSQL_CLUSTER_DIR/mysqld.conf"
        fi
 
-       if [ ! -e /var/lib/mysql/mysql.sock ] || [ -L /var/lib/mysql/mysql.sock ] && [ -z "$(readlink /var/lib/mysql/mysql.sock)" ]; then
-               sock=${MYSQL_SOCKET#/var/lib/mysql/} # make it relative if possible
-           ln -s "$sock" /var/lib/mysql/mysql.sock
-       fi
-
-       cat > $MYSQL_DATA_DIR/mysql-init.sql <<-EOF
-               CREATE DATABASE mysql;
-               use mysql;
-               $(cat /usr/share/mysql/mysql_system_tables.sql)
-               $(sed -e "/@current_hostname/d" /usr/share/mysql/mysql_system_tables_data.sql)
-EOF
-
        ok=0
        /usr/sbin/mysqld \
                --defaults-file=$MYSQL_CLUSTER_DIR/mysqld.conf \
-               --bootstrap \
+               --initialize \
                --skip-grant-tables \
                --datadir=$MYSQL_DATA_DIR \
                --user=$MYSQL_USER \
                --slave-load-tmpdir=$MYSQL_DATA_DIR \
                --tmpdir=$MYSQL_DATA_DIR \
                --log-error=$MYSQL_ERRLOG \
-               < $MYSQL_DATA_DIR/mysql-init.sql && ok=1
-       [ -f $MYSQL_DATA_DIR/mysql/host.frm ] || ok=0
+               && ok=1
+       [ -f $MYSQL_DATA_DIR/mysql/user.frm ] || ok=0
 
        if [ "$ok" = 1 ]; then
-               rm -f $MYSQL_DATA_DIR/mysql-init.sql
                ok
                cat << END_OF_MSG
 
 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL USERS!
-This is done, after starting database, in the order shown,
-with:
 
-For 'mysql_sysadmin' (RELOAD and SHUTDOWN privileges):
+CURRENT TEMPORARY ROOT PASSWORD CAN BE FOUND IN LOG
+(grep for "A temporary password is generated" string):
+$MYSQL_ERRLOG
+
+
+Start database:
+$ service mysql start
+
+and set passwords:
+
+FIXME FIXME: For 'mysql_sysadmin' (RELOAD and SHUTDOWN privileges):
 echo "update mysql.user set password=password('newpassword') where user='mysql_sysadmin'; FLUSH PRIVILEGES;" | mysql -u mysql -S $MYSQL_SOCKET
 
-For 'mysql' user (ALL privileges, DB admin):
-echo "update mysql.user set password=password('newpassword') where user='mysql'; FLUSH PRIVILEGES;" | mysql -u mysql -S $MYSQL_SOCKET
+For 'root' user (ALL privileges, DB admin), paste command with new password:
+ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'; FLUSH PRIVILEGES;
+
+into command:
+$ mysql -u root -p -S $MYSQL_SOCKET
 
 NOTE: mysql_sysadmin password should be placed to $MYSQL_CONFIG in
 mysqladmin section. See the manual for more instructions.
 (This user is used at logs rotation and server shutdown)
 
 END_OF_MSG
-               show "Filling help tables..."
-               ok=0
-               ( echo "use mysql;"; cat /usr/share/mysql/fill_help_tables.sql ) | \
-                       /usr/sbin/mysqld \
-                       --defaults-file=$MYSQL_CLUSTER_DIR/mysqld.conf \
-                       --bootstrap \
-                       --skip-grant-tables \
-                       --datadir=$MYSQL_DATA_DIR \
-                       --user=$MYSQL_USER \
-                       --slave-load-tmpdir=$MYSQL_DATA_DIR \
-                       --tmpdir=$MYSQL_DATA_DIR \
-                       --log-error=$MYSQL_ERRLOG \
-                       && ok=1
-               if [ "$ok" = 1 ]; then
-                       ok
-               else
-                       cat << END_OF_MSG
-
-WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!
-The "HELP" command might not work properly.
-
-END_OF_MSG
-               fi
        else
                fail
                cat << END_OF_MSG
-Installation of grant tables FAILED!
-
-The initialization SQL script was preserved at $MYSQL_DATA_DIR/mysql-init.sql
+ERROR:
+ERROR:
+ERROR: Installation FAILED!
+ERROR:
+ERROR:
 
-Examine the logs in /var/log/mysql for more information.  You can
+Examine the logs in $MYSQL_ERRLOG for more information. You can
 also try to start the mysqld daemon with:
 
 /usr/sbin/mysqld --skip-grant &
@@ -574,11 +558,21 @@ Please check PLD Linux 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.
+your OS. Another information source is the MySQL email archive.
 
 END_OF_MSG
                exit 1
        fi
+
+       # if it's first server, register as default
+       if [ ! -e /var/lib/mysql/mysql.sock ] || [ -L /var/lib/mysql/mysql.sock ] && [ -z "$(readlink /var/lib/mysql/mysql.sock)" ]; then
+               sock=${MYSQL_SOCKET#/var/lib/mysql/} # make it relative if possible
+               ln -s "$sock" /var/lib/mysql/mysql.sock
+       fi
+       # same for config, move to /etc
+       if [ ! -e /etc/mysql/mysqld.conf ]; then
+               mv "$MYSQL_CLUSTER_DIR/mysqld.conf" /etc/mysql/mysqld.conf
+       fi
 }
 
 #
@@ -622,40 +616,8 @@ condrestart() {
        start
 }
 
-RETVAL=0
-case "$action" in
-  start)
-       start
-       ;;
-  stop)
-       stop
-       ;;
-  restart)
-       stop
-       start
-       ;;
-  try-restart)
-       condrestart 0
-       ;;
-  force-reload)
-       condrestart 7
-       ;;
-  init)
-       for mysqldir in $DB_CLUSTERS; do
-               mysqlinit "$mysqldir"
-       done
-       exit $?
-       ;;
-  flush-logs)
-       for mysqldir in $DB_CLUSTERS; do
-           mysqlgetconfig "$mysqldir"
-               # just if mysqld is really running
-               if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
-                       /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
-               fi
-       done
-       ;;
-  status)
+status() {
+       local mysqldir addr port socket pid pids running datadir 
        RETVAL=3
        for mysqldir in $DB_CLUSTERS; do
                mysqlstatus "$mysqldir"
@@ -712,6 +674,43 @@ case "$action" in
                        echo
                done
        fi
+}
+
+RETVAL=0
+case "$action" in
+  start)
+       start
+       ;;
+  stop)
+       stop
+       ;;
+  restart)
+       stop
+       start
+       ;;
+  try-restart)
+       condrestart 0
+       ;;
+  force-reload)
+       condrestart 7
+       ;;
+  init)
+       for mysqldir in $DB_CLUSTERS; do
+               mysqlinit "$mysqldir"
+       done
+       exit $?
+       ;;
+  flush-logs)
+       for mysqldir in $DB_CLUSTERS; do
+               mysqlgetconfig "$mysqldir"
+               # just if mysqld is really running
+               if /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" ping >/dev/null 2>&1; then
+                       /usr/bin/mysqladmin --defaults-file="$MYSQL_CONFIG" --socket="$MYSQL_SOCKET" flush-logs
+               fi
+       done
+       ;;
+  status)
+       status
        ;;
   *)
        msg_usage "$0 {start|stop|restart|try-restart|force-reload|init|flush-logs|status}"
This page took 0.110196 seconds and 4 git commands to generate.