summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorSeppo Jaakola <seppo.jaakola@codership.com>2013-02-05 15:48:54 +0200
committerSeppo Jaakola <seppo.jaakola@codership.com>2013-02-05 15:48:54 +0200
commite0c6a87b997509f9eb282988cfb097e30b4c9749 (patch)
tree0475741cb7626ab2e4a0dc799fe2f53dab516669 /scripts
parentdb7495822940b5c95f10ff5b1e6273701e868436 (diff)
downloadmariadb-git-e0c6a87b997509f9eb282988cfb097e30b4c9749.tar.gz
re-merging wsrep files from lp:codership-mysql
Diffstat (limited to 'scripts')
-rw-r--r--scripts/wsrep_sst_common.sh106
-rw-r--r--scripts/wsrep_sst_mysqldump.sh121
-rw-r--r--scripts/wsrep_sst_rsync.sh210
-rw-r--r--scripts/wsrep_sst_xtrabackup.sh222
4 files changed, 0 insertions, 659 deletions
diff --git a/scripts/wsrep_sst_common.sh b/scripts/wsrep_sst_common.sh
deleted file mode 100644
index 5c292465ecc..00000000000
--- a/scripts/wsrep_sst_common.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (C) 2010 Codership Oy
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
-# MA 02110-1301 USA.
-
-# This is a common command line parser to be sourced by other SST scripts
-
-set -u
-
-WSREP_SST_OPT_BYPASS=0
-
-while [ $# -gt 0 ]; do
-case "$1" in
- '--address')
- readonly WSREP_SST_OPT_ADDR="$2"
- shift
- ;;
- '--auth')
- readonly WSREP_SST_OPT_AUTH="$2"
- shift
- ;;
- '--bypass')
- WSREP_SST_OPT_BYPASS=1
- ;;
- '--datadir')
- readonly WSREP_SST_OPT_DATA="$2"
- shift
- ;;
- '--defaults-file')
- readonly WSREP_SST_OPT_CONF="$2"
- shift
- ;;
- '--host')
- readonly WSREP_SST_OPT_HOST="$2"
- shift
- ;;
- '--local-port')
- readonly WSREP_SST_OPT_LPORT="$2"
- shift
- ;;
- '--parent')
- readonly WSREP_SST_OPT_PARENT="$2"
- shift
- ;;
- '--password')
- readonly WSREP_SST_OPT_PSWD="$2"
- shift
- ;;
- '--port')
- readonly WSREP_SST_OPT_PORT="$2"
- shift
- ;;
- '--role')
- readonly WSREP_SST_OPT_ROLE="$2"
- shift
- ;;
- '--socket')
- readonly WSREP_SST_OPT_SOCKET="$2"
- shift
- ;;
- '--user')
- readonly WSREP_SST_OPT_USER="$2"
- shift
- ;;
- '--gtid')
- readonly WSREP_SST_OPT_GTID="$2"
- shift
- ;;
- *) # must be command
- # usage
- # exit 1
- ;;
-esac
-shift
-done
-readonly WSREP_SST_OPT_BYPASS
-
-wsrep_log()
-{
- # echo everything to stderr so that it gets into common error log
- # deliberately made to look different from the rest of the log
- local readonly tst="$(date +%Y%m%d\ %H:%M:%S.%N | cut -b -21)"
- echo "WSREP_SST: $* ($tst)" >>/dev/stderr
-}
-
-wsrep_log_error()
-{
- wsrep_log "[ERROR] $*"
-}
-
-wsrep_log_info()
-{
- wsrep_log "[INFO] $*"
-}
-
diff --git a/scripts/wsrep_sst_mysqldump.sh b/scripts/wsrep_sst_mysqldump.sh
deleted file mode 100644
index 120533edc4e..00000000000
--- a/scripts/wsrep_sst_mysqldump.sh
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/bin/sh -e
-# Copyright (C) 2009 Codership Oy
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
-# MA 02110-1301 USA.
-
-# This is a reference script for mysqldump-based state snapshot tansfer
-
-. $(dirname $0)/wsrep_sst_common
-
-EINVAL=22
-
-local_ip()
-{
- PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
-
- [ "$1" = "127.0.0.1" ] && return 0
- [ "$1" = "localhost" ] && return 0
- [ "$1" = "$(hostname -s)" ] && return 0
- [ "$1" = "$(hostname -f)" ] && return 0
- [ "$1" = "$(hostname -d)" ] && return 0
-
- # Now if ip program is not found in the path, we can't return 0 since
- # it would block any address. Thankfully grep should fail in this case
- ip route get "$1" | grep local >/dev/null && return 0
-
- return 1
-}
-
-if test -z "$WSREP_SST_OPT_USER"; then err "USER cannot be nil"; exit $EINVAL; fi
-if test -z "$WSREP_SST_OPT_HOST"; then err "HOST cannot be nil"; exit $EINVAL; fi
-if test -z "$WSREP_SST_OPT_PORT"; then err "PORT cannot be nil"; exit $EINVAL; fi
-if test -z "$WSREP_SST_OPT_LPORT"; then err "LPORT cannot be nil"; exit $EINVAL; fi
-if test -z "$WSREP_SST_OPT_SOCKET";then err "SOCKET cannot be nil";exit $EINVAL; fi
-if test -z "$WSREP_SST_OPT_GTID"; then err "GTID cannot be nil"; exit $EINVAL; fi
-
-if local_ip $WSREP_SST_OPT_HOST && \
- [ "$WSREP_SST_OPT_PORT" = "$WSREP_SST_OPT_LPORT" ]
-then
- wsrep_log_error \
- "destination address '$WSREP_SST_OPT_HOST:$WSREP_SST_OPT_PORT' matches source address."
- exit $EINVAL
-fi
-
-# Check client version
-if ! mysql --version | grep 'Distrib 5.5' >/dev/null
-then
- mysql --version >&2
- err "this operation requires MySQL client version 5.5.x"
- exit $EINVAL
-fi
-
-AUTH="-u$WSREP_SST_OPT_USER"
-if test -n "$WSREP_SST_OPT_PSWD"; then AUTH="$AUTH -p$WSREP_SST_OPT_PSWD"; fi
-
-STOP_WSREP="SET wsrep_on=OFF;"
-
-# NOTE: we don't use --routines here because we're dumping mysql.proc table
-MYSQLDUMP="mysqldump $AUTH -S$WSREP_SST_OPT_SOCKET \
---add-drop-database --add-drop-table --skip-add-locks --create-options \
---disable-keys --extended-insert --skip-lock-tables --quick --set-charset \
---skip-comments --flush-privileges --all-databases"
-
-# mysqldump cannot restore CSV tables, fix this issue
-CSV_TABLES_FIX="
-set sql_mode='';
-
-USE mysql;
-
-SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, thread_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, command_type VARCHAR(64) NOT NULL,argument MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment=\"General log\"', 'SET @dummy = 0');
-
-PREPARE stmt FROM @str;
-EXECUTE stmt;
-DROP PREPARE stmt;
-
-SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, query_time TIME NOT NULL, lock_time TIME NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment=\"Slow log\"', 'SET @dummy = 0');
-
-PREPARE stmt FROM @str;
-EXECUTE stmt;
-DROP PREPARE stmt;"
-
-SET_START_POSITION="SET GLOBAL wsrep_start_position='$WSREP_SST_OPT_GTID';"
-
-MYSQL="mysql $AUTH -h$WSREP_SST_OPT_HOST -P$WSREP_SST_OPT_PORT "\
-"--disable-reconnect --connect_timeout=10"
-
-# need to disable logging when loading the dump
-# reason is that dump contains ALTER TABLE for log tables, and
-# this causes an error if logging is enabled
-GENERAL_LOG_OPT=`$MYSQL --skip-column-names -e"$STOP_WSREP SELECT @@GENERAL_LOG"`
-SLOW_LOG_OPT=`$MYSQL --skip-column-names -e"$STOP_WSREP SELECT @@SLOW_QUERY_LOG"`
-$MYSQL -e"$STOP_WSREP SET GLOBAL GENERAL_LOG=OFF"
-$MYSQL -e"$STOP_WSREP SET GLOBAL SLOW_QUERY_LOG=OFF"
-
-# commands to restore log settings
-RESTORE_GENERAL_LOG="SET GLOBAL GENERAL_LOG=$GENERAL_LOG_OPT;"
-RESTORE_SLOW_QUERY_LOG="SET GLOBAL SLOW_QUERY_LOG=$SLOW_LOG_OPT;"
-
-if [ $WSREP_SST_OPT_BYPASS -eq 0 ]
-then
- (echo $STOP_WSREP && $MYSQLDUMP && echo $CSV_TABLES_FIX \
- && echo $RESTORE_GENERAL_LOG && echo $RESTORE_SLOW_QUERY_LOG \
- && echo $SET_START_POSITION \
- || echo "SST failed to complete;") | $MYSQL
-else
- wsrep_log_info "Bypassing state dump."
- echo $SET_START_POSITION | $MYSQL
-fi
-
-#
diff --git a/scripts/wsrep_sst_rsync.sh b/scripts/wsrep_sst_rsync.sh
deleted file mode 100644
index d510477535c..00000000000
--- a/scripts/wsrep_sst_rsync.sh
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/bin/bash -ue
-
-# Copyright (C) 2010 Codership Oy
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
-# MA 02110-1301 USA.
-
-# This is a reference script for rsync-based state snapshot tansfer
-
-RSYNC_PID=
-RSYNC_CONF=
-
-. $(dirname $0)/wsrep_sst_common
-
-cleanup_joiner()
-{
- wsrep_log_info "Joiner cleanup."
- local PID=$(cat "$RSYNC_PID" 2>/dev/null || echo 0)
- [ "0" != "$PID" ] && kill $PID && sleep 0.5 && kill -9 $PID >/dev/null 2>&1 \
- || :
- rm -rf "$RSYNC_CONF"
- rm -rf "$MAGIC_FILE"
- rm -rf "$RSYNC_PID"
- echo " done." >&2
-}
-
-check_pid()
-{
- local pid_file=$1
- [ -r "$pid_file" ] && ps -p $(cat $pid_file) >/dev/null 2>&1
-}
-
-check_pid_and_port()
-{
- local pid_file=$1
- local rsync_pid=$(cat $pid_file)
- local rsync_port=$2
-
- check_pid $pid_file && \
- netstat -anpt 2>/dev/null | \
- grep LISTEN | grep \:$rsync_port | grep $rsync_pid/rsync >/dev/null
-}
-
-MAGIC_FILE="$WSREP_SST_OPT_DATA/rsync_sst_complete"
-rm -rf "$MAGIC_FILE"
-
-if [ "$WSREP_SST_OPT_ROLE" = "donor" ]
-then
-
- if [ $WSREP_SST_OPT_BYPASS -eq 0 ]
- then
-
- FLUSHED="$WSREP_SST_OPT_DATA/tables_flushed"
- rm -rf "$FLUSHED"
-
- # Use deltaxfer only for WAN
- inv=$(basename $0)
- [ "$inv" = "wsrep_sst_rsync_wan" ] && WHOLE_FILE_OPT="" \
- || WHOLE_FILE_OPT="--whole-file"
-
- echo "flush tables"
-
- # wait for tables flushed and state ID written to the file
- while [ ! -r "$FLUSHED" ] && ! grep -q ':' "$FLUSHED" >/dev/null 2>&1
- do
- sleep 0.2
- done
-
- STATE="$(cat $FLUSHED)"
- rm -rf "$FLUSHED"
-
- sync
-
- # Old filter - include everything except selected
- # FILTER=(--exclude '*.err' --exclude '*.pid' --exclude '*.sock' \
- # --exclude '*.conf' --exclude core --exclude 'galera.*' \
- # --exclude grastate.txt --exclude '*.pem' \
- # --exclude '*.[0-9][0-9][0-9][0-9][0-9][0-9]' --exclude '*.index')
-
- # New filter - exclude everything except dirs (schemas) and innodb files
- FILTER=(-f '+ /ibdata*' -f '+ /ib_logfile*' -f '+ */' -f '-! */*')
-
- RC=0
- rsync --archive --no-times --ignore-times --inplace --delete --quiet \
- $WHOLE_FILE_OPT "${FILTER[@]}" "$WSREP_SST_OPT_DATA" \
- rsync://$WSREP_SST_OPT_ADDR || RC=$?
-
- [ $RC -ne 0 ] && echo "rsync returned code $RC:" >> /dev/stderr
-
- case $RC in
- 0) RC=0 # Success
- ;;
- 12) RC=71 # EPROTO
- wsrep_log_error \
- "rsync server on the other end has incompatible protocol. " \
- "Make sure you have the same version of rsync on all nodes."
- ;;
- 22) RC=12 # ENOMEM
- ;;
- *) RC=255 # unknown error
- ;;
- esac
-
- [ $RC -ne 0 ] && exit $RC
-
- else # BYPASS
- wsrep_log_info "Bypassing state dump."
- STATE="$WSREP_SST_OPT_GTID"
- fi
-
- echo "continue" # now server can resume updating data
-
- echo "$STATE" > "$MAGIC_FILE"
- rsync -aqc "$MAGIC_FILE" rsync://$WSREP_SST_OPT_ADDR
-
- echo "done $STATE"
-
-elif [ "$WSREP_SST_OPT_ROLE" = "joiner" ]
-then
- MYSQLD_PID=$WSREP_SST_OPT_PARENT
-
- MODULE="rsync_sst"
-
- RSYNC_PID="$WSREP_SST_OPT_DATA/$MODULE.pid"
-
- if check_pid $RSYNC_PID
- then
- echo "rsync daemon already running."
- exit 114 # EALREADY
- fi
- rm -rf "$RSYNC_PID"
-
- ADDR=$WSREP_SST_OPT_ADDR
- RSYNC_PORT=$(echo $ADDR | awk -F ':' '{ print $2 }')
- if [ -z "$RSYNC_PORT" ]
- then
- RSYNC_PORT=4444
- ADDR="$(echo $ADDR | awk -F ':' '{ print $1 }'):$RSYNC_PORT"
- fi
-
- trap "exit 32" HUP PIPE
- trap "exit 3" INT TERM
- trap cleanup_joiner EXIT
-
- MYUID=$(id -u)
- MYGID=$(id -g)
- RSYNC_CONF="$WSREP_SST_OPT_DATA/$MODULE.conf"
-
-cat << EOF > "$RSYNC_CONF"
-pid file = $RSYNC_PID
-use chroot = no
-[$MODULE]
- path = $WSREP_SST_OPT_DATA
- read only = no
- timeout = 300
- uid = $MYUID
- gid = $MYGID
-EOF
-
-# rm -rf "$DATA"/ib_logfile* # we don't want old logs around
-
- # listen at all interfaces (for firewalled setups)
- rsync --daemon --port $RSYNC_PORT --config "$RSYNC_CONF"
-
- until check_pid_and_port $RSYNC_PID $RSYNC_PORT
- do
- sleep 0.2
- done
-
- echo "ready $ADDR/$MODULE"
-
- # wait for SST to complete by monitoring magic file
- while [ ! -r "$MAGIC_FILE" ] && check_pid "$RSYNC_PID" && \
- ps -p $MYSQLD_PID >/dev/null
- do
- sleep 1
- done
-
- if ! ps -p $MYSQLD_PID >/dev/null
- then
- echo "Parent mysqld process (PID:$MYSQLD_PID) terminated unexpectedly." >&2
- exit 32
- fi
-
- if [ -r "$MAGIC_FILE" ]
- then
- cat "$MAGIC_FILE" # output UUID:seqno
- else
- # this message should cause joiner to abort
- echo "rsync process ended without creating '$MAGIC_FILE'"
- fi
-
-# cleanup_joiner
-else
- echo "Unrecognized role: '$WSREP_SST_OPT_ROLE'"
- exit 22 # EINVAL
-fi
-
-exit 0
diff --git a/scripts/wsrep_sst_xtrabackup.sh b/scripts/wsrep_sst_xtrabackup.sh
deleted file mode 100644
index 08552f50a44..00000000000
--- a/scripts/wsrep_sst_xtrabackup.sh
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/bin/bash -ue
-
-# Copyright (C) 2011 Percona Inc
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
-# MA 02110-1301 USA.
-
-# This is a reference script for Percona XtraBackup-based state snapshot tansfer
-
-TMPDIR="/tmp"
-
-. $(dirname $0)/wsrep_sst_common
-
-cleanup_joiner()
-{
-#set -x
- local PID=$(ps -aef |grep nc| grep $NC_PORT | awk '{ print $2 }')
- wsrep_log_info "Killing nc pid $PID"
- [ -n "$PID" -a "0" != "$PID" ] && kill $PID && (kill $PID && kill -9 $PID) || :
- rm -f "$MAGIC_FILE"
-#set +x
-}
-
-check_pid()
-{
- local pid_file="$1"
- [ -r "$pid_file" ] && ps -p $(cat "$pid_file") >/dev/null 2>&1
-}
-
-kill_xtrabackup()
-{
-#set -x
- local PID=$(cat $XTRABACKUP_PID)
- [ -n "$PID" -a "0" != "$PID" ] && kill $PID && (kill $PID && kill -9 $PID) || :
- rm -f "$XTRABACKUP_PID"
-#set +x
-}
-
-# waits ~10 seconds for nc to open the port and then reports ready
-# (regardless of timeout)
-wait_for_nc()
-{
- local PORT=$1
- local ADDR=$2
- local MODULE=$3
- for i in $(seq 1 50)
- do
- netstat -nptl 2>/dev/null | grep '/nc\s*$' | awk '{ print $4 }' | \
- sed 's/.*://' | grep \^${PORT}\$ >/dev/null && break
- sleep 0.2
- done
- echo "ready ${ADDR}/${MODULE}"
-}
-
-INNOBACKUPEX_BIN=innobackupex
-INNOBACKUPEX_ARGS=""
-NC_BIN=nc
-
-for TOOL_BIN in INNOBACKUPEX_BIN NC_BIN ; do
- if ! which ${!TOOL_BIN} > /dev/null 2>&1
- then
- echo "Can't find ${!TOOL_BIN} in the path"
- exit 22 # EINVAL
- fi
-done
-
-#ROLE=$1
-#ADDR=$2
-readonly AUTH=(${WSREP_SST_OPT_AUTH//:/ })
-readonly DATA="${WSREP_SST_OPT_DATA}"
-#CONF=$5
-
-INFO_FILE="xtrabackup_galera_info"
-IST_FILE="xtrabackup_ist"
-
-MAGIC_FILE="${DATA}/${INFO_FILE}"
-rm -f "${MAGIC_FILE}"
-
-if [ "$WSREP_SST_OPT_ROLE" = "donor" ]
-then
-
-# UUID=$6
-# SEQNO=$7
-# BYPASS=$8
-
- NC_PORT=$(echo $WSREP_SST_OPT_ADDR | awk -F '[:/]' '{ print $2 }')
- REMOTEIP=$(echo $WSREP_SST_OPT_ADDR | awk -F ':' '{ print $1 }')
-
- if [ $WSREP_SST_OPT_BYPASS -eq 0 ]
- then
-
- INNOBACKUPEX_ARGS="--galera-info --tmpdir=${TMPDIR} --stream=tar
- --defaults-file=${WSREP_SST_OPT_CONF}
- --socket=${WSREP_SST_OPT_SOCKET}"
-
- if [ "${AUTH[0]}" != "(null)" ]; then
- INNOBACKUPEX_ARGS="${INNOBACKUPEX_ARGS} --user=${AUTH[0]}"
- fi
-
- if [ ${#AUTH[*]} -eq 2 ]; then
- INNOBACKUPEX_ARGS="${INNOBACKUPEX_ARGS} --password=${AUTH[1]}"
- fi
-
- set +e
-
- # This file and variable seems to have no effect and probably should be deleted
- XTRABACKUP_PID=$(mktemp --tmpdir wsrep_sst_xtrabackupXXXX.pid)
-
- ${INNOBACKUPEX_BIN} ${INNOBACKUPEX_ARGS} ${TMPDIR} \
- 2> ${DATA}/innobackup.backup.log | \
- ${NC_BIN} ${REMOTEIP} ${NC_PORT}
-
- RC=( "${PIPESTATUS[@]}" )
- set -e
-
- if [ ${RC[0]} -ne 0 ]; then
- wsrep_log_error "${INNOBACKUPEX_BIN} finished with error: ${RC[0]}. " \
- "Check ${DATA}/innobackup.backup.log"
- exit 22
- elif [ ${RC[1]} -ne 0 ]; then
- wsrep_log_error "${NC_BIN} finished with error: ${RC[1]}"
- exit 22
- fi
-
- if check_pid "${XTRABACKUP_PID}"
- then
- wsrep_log_error "xtrabackup process is still running. Killing... "
- kill_xtrabackup
- exit 22
- fi
-
- rm -f "${XTRABACKUP_PID}"
-
- else # BYPASS
- STATE="${WSREP_SST_OPT_GTID}"
- echo "continue" # now server can resume updating data
- echo "${STATE}" > "${MAGIC_FILE}"
- echo "1" > "${DATA}/${IST_FILE}"
- (cd ${DATA}; tar cf - ${INFO_FILE} ${IST_FILE}) | ${NC_BIN} ${REMOTEIP} ${NC_PORT}
- rm -f ${DATA}/${IST_FILE}
- fi
-
- echo "done ${WSREP_SST_OPT_GTID}"
-
-elif [ "${WSREP_SST_OPT_ROLE}" = "joiner" ]
-then
- MODULE="xtrabackup_sst"
-
- rm -f ${DATA}/xtrabackup_*
-
- ADDR=${WSREP_SST_OPT_ADDR}
- NC_PORT=$(echo ${ADDR} | awk -F ':' '{ print $2 }')
- if [ -z "${NC_PORT}" ]
- then
- NC_PORT=4444
- ADDR="$(echo ${ADDR} | awk -F ':' '{ print $1 }'):${NC_PORT}"
- fi
-
- wait_for_nc ${NC_PORT} ${ADDR} ${MODULE} &
-
-# trap "exit 32" HUP PIPE
-# trap "exit 3" INT TERM
- trap cleanup_joiner HUP PIPE INT TERM
-
- set +e
- ${NC_BIN} -dl ${NC_PORT} | tar xfi - -C ${DATA} 1>&2
- RC=( "${PIPESTATUS[@]}" )
- set -e
-
- wait %% # join wait_for_nc thread
-
- if [ ${RC[0]} -ne 0 -o ${RC[1]} -ne 0 ];
- then
- wsrep_log_error "Error while getting st data from donor node: " \
- "${RC[0]}, ${RC[1]}"
- exit 32
- fi
-
- if [ ! -r "${MAGIC_FILE}" ]
- then
- # this message should cause joiner to abort
- wsrep_log_error "xtrabackup process ended without creating '${MAGIC_FILE}'"
- exit 32
- fi
-
- if ! ps -p ${WSREP_SST_OPT_PARENT} >/dev/null
- then
- wsrep_log_error "Parent mysqld process (PID:${WSREP_SST_OPT_PARENT}) terminated unexpectedly." >&2
- exit 32
- fi
-
- if [ ! -r "${IST_FILE}" ]
- then
- rm -f ${DATA}/ib_logfile*
- ${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} --apply-log \
- --ibbackup=xtrabackup ${DATA} 1>&2 2> ${DATA}/innobackup.prepare.log
- if [ $? -ne 0 ];
- then
- wsrep_log_error "${INNOBACKUPEX_BIN} finished with errors. Check ${DATA}/innobackup.prepare.log" >&2
- exit 22
- fi
- fi
-
- cat "${MAGIC_FILE}" # output UUID:seqno
-
-else
- wsrep_log_error "Unrecognized role: ${WSREP_SST_OPT_ROLE}"
- exit 22 # EINVAL
-fi
-
-exit 0