+# 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
+ # slave not setup
+ return
+ fi
+
+ printf "Slave Status:\n"
+
+ set -f
+ eval $(echo "$slave_status" | awk -F': ' '/^ *[A-Za-z_]+:/{
+ k = tolower($1);
+ v = substr($0, length($1) + 3);
+ gsub(/\\/, "\\\\\\", v);
+ gsub(/"/, "\\\"", v);
+ gsub(/`/, "\\`", v);
+ gsub(/\$/, "\\$", v);
+ gsub(/\$/, "\\$", v);
+ printf("%s=\"%s\";\n", k, v);
+ }')
+ set +f
+
+ if [ "$slave_io_running" != "Yes" ]; then
+ printf "\tSlave IO not running\n"
+ err=1
+ fi
+ if [ "$slave_sql_running" != "Yes" ]; then
+ printf "\tSlave SQL not running\n"
+ err=1
+ fi
+
+ if [ "$err" = 1 -a "$last_errno" -gt 0 ]; then
+ printf "\tERROR %s: %s\n" "$last_errno" "$last_error"
+ fi
+
+ if [ "$master_log_file" != "$relay_master_log_file" ]; then
+ printf "\tERROR logfile mismatch (%s)\n" "$relay_master_log_file"
+ err=1
+ fi
+
+ if [ -z "$read_master_log_pos" -o -z "$exec_master_log_pos" ]; then
+ printf "\tERROR No info about master\n"
+ err=1
+ return
+ fi
+
+ diff=$(($read_master_log_pos - $exec_master_log_pos))
+ printf "\tread pos: %s (%s) (host: %s:%d)\n" "$read_master_log_pos" "$master_log_file" "$master_host" "$master_port"
+ printf "\texec pos: %s\n" "$exec_master_log_pos"
+ printf "\tdiff: %s\n" "$diff"
+}
+