SOURCES (MYSQL_4_1): mysql.init - merge initscript improvements fr...

glen glen at pld-linux.org
Tue Jan 30 17:20:30 CET 2007


Author: glen                         Date: Tue Jan 30 16:20:30 2007 GMT
Module: SOURCES                       Tag: MYSQL_4_1
---- Log message:
- merge initscript improvements from HEAD

---- Files affected:
SOURCES:
   mysql.init (1.85.2.3 -> 1.85.2.4) 

---- Diffs:

================================================================
Index: SOURCES/mysql.init
diff -u SOURCES/mysql.init:1.85.2.3 SOURCES/mysql.init:1.85.2.4
--- SOURCES/mysql.init:1.85.2.3	Tue Jul 18 19:43:22 2006
+++ SOURCES/mysql.init	Tue Jan 30 17:20:24 2007
@@ -26,7 +26,7 @@
 fi
 
 if [ -f /etc/mysql/clusters.conf ]; then
-	MYSQL_DB_CLUSTERS=$(grep -v '^#' /etc/mysql/clusters.conf | cut -s -f 2 -d '=')
+	MYSQL_DB_CLUSTERS=$(awk -F= '!/^#/{print $2}' /etc/mysql/clusters.conf)
 	if [ -z "$MYSQL_DB_CLUSTERS"  ]; then
 		nls "Warning: there are no configured clusters."
 	fi
@@ -57,7 +57,22 @@
 if [ $# -gt 1 ]; then
 	shift
 	# perform action for specified clusters only
-	DB_CLUSTERS="$@"
+	for a in "$@"; do
+		# try auto resolving from /etc/mysql/clusters.conf
+		if [[ "$a" != /* ]]; then
+			m=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $1}' /etc/mysql/clusters.conf)
+			if [ -z "$m" ]; then
+				echo >&2 "Cluster name '$a' did not match anything!"
+				exit 1
+			fi
+			if [ $(echo "$m" | wc -l) -gt 1 ]; then
+				echo >&2 "Cluster name '$a' ambiguous:" $m
+				exit 1
+			fi
+			a=$(awk -va="$a" -F= 'substr($0, 1, length(a)) == a {print $2}' /etc/mysql/clusters.conf)
+		fi
+		DB_CLUSTERS="$DB_CLUSTERS $a"
+	done
 else
 	DB_CLUSTERS="$MYSQL_DB_CLUSTERS"
 fi
@@ -141,27 +156,26 @@
 
 	# emulate old behaviour if only one cluster specified
 	if [ "$clusterdir" = "$MYSQL_DB_CLUSTERS" -a "$clusterdir" = "/var/lib/mysql" -a -f /etc/mysqld.conf ]; then
-		MYSQL_RA_COMPAT=yes; export MYSQL_RA_COMPAT
+		MYSQL_RA_COMPAT=yes
 		config_file=/etc/mysqld.conf
 	else
-		# TODO: convert this piece of crap to awk
-		config=`grep -v "^#" /etc/mysql/clusters.conf | grep "${clusterdir}$" | cut -s -f 1 -d '='`
-		if echo "$config" | grep -q '^/'; then
+		config=$(awk -F= -vclusterdir="$clusterdir" '!/^#/{ if (clusterdir == $2) print $1}' /etc/mysql/clusters.conf)
+		if [[ $config = /* ]]; then
 			config_file="$config"
 		elif [ -f "/etc/mysql/$config" ]; then
-			config_file=/etc/mysql/$config
+			config_file="/etc/mysql/$config"
 		else
 			config_file="$clusterdir/mysqld.conf"
 		fi
 	fi
 
-	MYSQL_CLUSTER_DIR="$clusterdir"; export MYSQL_CLUSTER_DIR
+	MYSQL_CLUSTER_DIR="$clusterdir"
 
 	if [ -z "$config_file" ]; then
 		nls "Error: Can't find config file for %s cluster" "$clusterdir"
 		exit 6
 	else
-		MYSQL_CONFIG="$config_file"; export MYSQL_CONFIG
+		MYSQL_CONFIG="$config_file"
 	fi
 
 	if [ ! -f "$config_file" ]; then
@@ -173,22 +187,19 @@
 	eval `awk '
 /^[ \t]*\[.*\][ \t]*$/ {
 	match($0,/\[.*\]/)
-	section=substr($0,RSTART+1,RSTART+RLENGTH-3)
+	section=substr($0, RSTART + 1, RSTART + RLENGTH - 3)
 }
-section=="mysqld" && $2~"=" {
-	if ($1=="datadir") {
+section == "mysqld" && $2 ~ "=" {
+	if ($1 == "datadir") {
 		printf("MYSQL_DATA_DIR=%s;", $3)
-	} else if ($1=="user") {
+	} else if ($1 == "user") {
 		printf("MYSQL_USER=%s;", $3)
-	} else if ($1=="pid-file") {
+	} else if ($1 == "pid-file") {
 		printf("MYSQL_PIDFILE=%s;", $3)
-	} else if ($1=="socket") {
+	} else if ($1 == "socket") {
 		printf("MYSQL_SOCKET=%s;", $3)
 	}
 }
-END {
-	print "export MYSQL_DATA_DIR MYSQL_USER MYSQL_PIDFILE MYSQL_SOCKET"
-}
 ' $config_file`
 
 
@@ -336,7 +347,6 @@
 	busy
 	TMP=/tmp TMPDIR=/tmp
 
-
 	# Install this in the user table, too
 	hostname="`hostname --fqdn 2> /dev/null | tr -d '[:space:]'`"
 	[ -z "$hostname" ] && hostname="localhost-unknown"
@@ -624,23 +634,25 @@
 	  c_tzls="$c_tzls   comment='Leap seconds information for time zones';"
 	fi
 
-	mkdir -p "$MYSQL_DATA_DIR" > /dev/null 2>&1
+	mkdir -p "$MYSQL_DATA_DIR"
 	# Using mysql:mysql for MYSQL_CLUSTER_DIR is creating SECURITY hole, root:root is proper
 	chown root:root "$MYSQL_CLUSTER_DIR"
     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" \
-		-e "s#\(pid-file.*\)=.*#\1= $MYSQL_PIDFILE#g" \
-		-e "s#\(socket.*\)=.*#\1= $MYSQL_SOCKET#g" \
-		/usr/share/mysql/mysqld.conf > "$MYSQL_CLUSTER_DIR/mysqld.conf"
+	    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"
 	fi
 
 	if [ ! -e /var/lib/mysql/mysql.sock ] || [ -L /var/lib/mysql/mysql.sock ] && [ -z "$(readlink /var/lib/mysql/mysql.sock)" ]; then
-		sock=$(echo "$MYSQL_SOCKET" | sed -e 's,^/var/lib/mysql/,,')
+		sock=${MYSQL_SOCKET#/var/lib/mysql/} # make it relative if possible
 	    ln -s "$sock" /var/lib/mysql/mysql.sock
 	fi
 
@@ -728,9 +740,7 @@
 # End of useful functions.
 #
 
-RETVAL=0
-case "$action" in
-  start)
+start() {
 	if [ ! -f $MYSQL_ERRLOG ]; then
 		touch $MYSQL_ERRLOG
 	fi
@@ -746,8 +756,9 @@
 		fi
 	done
 	mysqlsubsys
-	;;
-  stop)
+}
+
+stop() {
 	for mysqldir in $DB_CLUSTERS; do
 		mysqlstatus "$mysqldir" stop
 		if [ "$MYSQL_STATUS" = "not running" ]; then
@@ -757,6 +768,15 @@
 		fi
 	done
 	mysqlsubsys
+}
+
+RETVAL=0
+case "$action" in
+  start)
+  	start
+	;;
+  stop)
+  	stop
 	;;
   status)
 	for mysqldir in $DB_CLUSTERS; do
@@ -773,9 +793,8 @@
 	exit $?
 	;;
   restart|force-reload)
-	$0 stop $DB_CLUSTERS
-	$0 start $DB_CLUSTERS
-	exit $?
+	stop
+	start
 	;;
   init)
 	for mysqldir in $DB_CLUSTERS; do
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/mysql.init?r1=1.85.2.3&r2=1.85.2.4&f=u



More information about the pld-cvs-commit mailing list