Commit 943c62a5 authored by Sergei Golubchik's avatar Sergei Golubchik Committed by Daniel Black

Backport 4bb49d84, correct handling on defaults[-extra]-file is SST scripts

(from 10.1 to 10.0-galera)

This conflicted signficantly with 7d550c76
which added --defaults-group-suffix support.

Took the approach of 4bb49d84 and adapted the
--defaults-group-suffix handling to be consistent.

The following changes as follows:

SST scripts now use $MY_PRINT_DEFAULTS rather than the lowercase for
consistency and this include all required --default arguements.

Backport/merge by Daniel Black <daniel@linux.vnet.ibm.com>
parent d7b2bc98
...@@ -88,15 +88,6 @@ static char my_defaults_extra_file_buffer[FN_REFLEN]; ...@@ -88,15 +88,6 @@ static char my_defaults_extra_file_buffer[FN_REFLEN];
static my_bool defaults_already_read= FALSE; static my_bool defaults_already_read= FALSE;
#ifdef WITH_WSREP
/*
The only purpose of this global array is to hold full name of my.cnf
which seems to be otherwise unavailable.
*/
char wsrep_defaults_file[FN_REFLEN + 10]= {0,};
char wsrep_defaults_group_suffix[FN_EXTLEN]= {0,};
#endif /* WITH_WSREP */
/* Which directories are searched for options (and in which order) */ /* Which directories are searched for options (and in which order) */
#define MAX_DEFAULT_DIRS 7 #define MAX_DEFAULT_DIRS 7
...@@ -442,16 +433,6 @@ int get_defaults_options(int argc, char **argv, ...@@ -442,16 +433,6 @@ int get_defaults_options(int argc, char **argv,
if (!*group_suffix && is_prefix(*argv, "--defaults-group-suffix=")) if (!*group_suffix && is_prefix(*argv, "--defaults-group-suffix="))
{ {
*group_suffix= *argv + sizeof("--defaults-group-suffix=")-1; *group_suffix= *argv + sizeof("--defaults-group-suffix=")-1;
#ifdef WITH_WSREP
/* make sure we do this only once - for top-level file */
if ('\0' == wsrep_defaults_group_suffix[0])
{
strncpy(wsrep_defaults_group_suffix, *group_suffix,
sizeof(wsrep_defaults_group_suffix) - 1);
}
#endif /* WITH_WSREP */
argc--; argc--;
continue; continue;
} }
...@@ -823,12 +804,6 @@ static int search_default_file_with_ext(Process_option_func opt_handler, ...@@ -823,12 +804,6 @@ static int search_default_file_with_ext(Process_option_func opt_handler,
if (!(fp= mysql_file_fopen(key_file_cnf, name, O_RDONLY, MYF(0)))) if (!(fp= mysql_file_fopen(key_file_cnf, name, O_RDONLY, MYF(0))))
return 1; /* Ignore wrong files */ return 1; /* Ignore wrong files */
#ifdef WITH_WSREP
/* make sure we do this only once - for top-level file */
if ('\0' == wsrep_defaults_file[0])
strncpy(wsrep_defaults_file, name, sizeof(wsrep_defaults_file) - 1);
#endif /* WITH_WSREP */
while (mysql_file_fgets(buff, sizeof(buff) - 1, fp)) while (mysql_file_fgets(buff, sizeof(buff) - 1, fp))
{ {
line++; line++;
......
...@@ -20,11 +20,13 @@ set -u ...@@ -20,11 +20,13 @@ set -u
WSREP_SST_OPT_BYPASS=0 WSREP_SST_OPT_BYPASS=0
WSREP_SST_OPT_BINLOG="" WSREP_SST_OPT_BINLOG=""
WSREP_SST_OPT_CONF_SUFFIX=""
WSREP_SST_OPT_DATA="" WSREP_SST_OPT_DATA=""
WSREP_SST_OPT_AUTH=${WSREP_SST_OPT_AUTH:-} WSREP_SST_OPT_AUTH=${WSREP_SST_OPT_AUTH:-}
WSREP_SST_OPT_USER=${WSREP_SST_OPT_USER:-} WSREP_SST_OPT_USER=${WSREP_SST_OPT_USER:-}
WSREP_SST_OPT_PSWD=${WSREP_SST_OPT_PSWD:-} WSREP_SST_OPT_PSWD=${WSREP_SST_OPT_PSWD:-}
WSREP_SST_OPT_DEFAULT=""
WSREP_SST_OPT_EXTRA_DEFAULT=""
WSREP_SST_OPT_SUFFIX_DEFAULT=""
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
...@@ -56,11 +58,15 @@ case "$1" in ...@@ -56,11 +58,15 @@ case "$1" in
shift shift
;; ;;
'--defaults-file') '--defaults-file')
readonly WSREP_SST_OPT_CONF="$2" readonly WSREP_SST_OPT_DEFAULT="$1=$2"
shift
;;
'--defaults-extra-file')
readonly WSREP_SST_OPT_EXTRA_DEFAULT="$1=$2"
shift shift
;; ;;
'--defaults-group-suffix') '--defaults-group-suffix')
WSREP_SST_OPT_CONF_SUFFIX="$2" readonly WSREP_SST_OPT_SUFFIX_DEFAULT="$1=$2"
shift shift
;; ;;
'--host') '--host')
...@@ -112,7 +118,6 @@ shift ...@@ -112,7 +118,6 @@ shift
done done
readonly WSREP_SST_OPT_BYPASS readonly WSREP_SST_OPT_BYPASS
readonly WSREP_SST_OPT_BINLOG readonly WSREP_SST_OPT_BINLOG
readonly WSREP_SST_OPT_CONF_SUFFIX
# try to use my_print_defaults, mysql and mysqldump that come with the sources # try to use my_print_defaults, mysql and mysqldump that come with the sources
# (for MTR suite) # (for MTR suite)
...@@ -140,17 +145,18 @@ else ...@@ -140,17 +145,18 @@ else
MY_PRINT_DEFAULTS=$(which my_print_defaults) MY_PRINT_DEFAULTS=$(which my_print_defaults)
fi fi
readonly WSREP_SST_OPT_CONF="$WSREP_SST_OPT_DEFAULT $WSREP_SST_OPT_EXTRA_DEFAULT $WSREP_SST_OPT_SUFFIX_DEFAULT"
readonly MY_PRINT_DEFAULTS="${MY_PRINT_DEFAULTS} $WSREP_SST_OPT_CONF"
wsrep_auth_not_set() wsrep_auth_not_set()
{ {
[ -z "$WSREP_SST_OPT_AUTH" -o "$WSREP_SST_OPT_AUTH" = "(null)" ] [ -z "$WSREP_SST_OPT_AUTH" -o "$WSREP_SST_OPT_AUTH" = "(null)" ]
} }
# For Bug:1200727 # State Snapshot Transfer authentication password was displayed in the ps output. Bug fixed #1200727.
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF sst | grep -q "wsrep_sst_auth" if $MY_PRINT_DEFAULTS sst | grep -q "wsrep_sst_auth"; then
then if wsrep_auth_not_set; then
if wsrep_auth_not_set WSREP_SST_OPT_AUTH=$($MY_PRINT_DEFAULTS sst | grep -- "--wsrep_sst_auth" | cut -d= -f2)
then
WSREP_SST_OPT_AUTH=$($MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF sst | grep -- "--wsrep_sst_auth" | cut -d= -f2)
fi fi
fi fi
readonly WSREP_SST_OPT_AUTH readonly WSREP_SST_OPT_AUTH
...@@ -229,7 +235,7 @@ wsrep_check_programs() ...@@ -229,7 +235,7 @@ wsrep_check_programs()
# process like encryption, etc..... # process like encryption, etc.....
# parse such configuration option. (group for xb settings is [sst] in my.cnf # parse such configuration option. (group for xb settings is [sst] in my.cnf
# #
# 1st param: group : name of the config file section, e.g. mysqld # 1st param: group (config file section like sst) or my_print_defaults argument (like --mysqld)
# 2nd param: var : name of the variable in the section, e.g. server-id # 2nd param: var : name of the variable in the section, e.g. server-id
# 3rd param: - : default value for the param # 3rd param: - : default value for the param
parse_cnf() parse_cnf()
...@@ -238,20 +244,12 @@ parse_cnf() ...@@ -238,20 +244,12 @@ parse_cnf()
local var=$2 local var=$2
local reval="" local reval=""
# print the default settings for given group using my_print_default.
# normalize the variable names specified in cnf file (user can use _ or - for example log-bin or log_bin) # normalize the variable names specified in cnf file (user can use _ or - for example log-bin or log_bin)
# then grep for needed variable # then grep for needed variable
# finally get the variable value (if variables has been specified multiple time use the last value only) # finally get the variable value (if variables has been specified multiple time use the last value only)
# look in group+suffix # TODO: get awk to do the grep/cut bits as well
if [ -n $WSREP_SST_OPT_CONF_SUFFIX ]; then reval=$($MY_PRINT_DEFAULTS "${group}" | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2- | tail -1)
reval=$($MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF "${group}${WSREP_SST_OPT_CONF_SUFFIX}" | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2- | tail -1)
fi
# look in group
if [ -z $reval ]; then
reval=$($MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF $group | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2- | tail -1)
fi
# use default if we haven't found a value # use default if we haven't found a value
if [ -z $reval ]; then if [ -z $reval ]; then
......
...@@ -17,10 +17,6 @@ ...@@ -17,10 +17,6 @@
# This is a reference script for mysqldump-based state snapshot tansfer # This is a reference script for mysqldump-based state snapshot tansfer
# This variable is not used in mysqldump sst, so better initialize it
# to avoid shell's "parameter not set" message.
WSREP_SST_OPT_CONF=""
. $(dirname $0)/wsrep_sst_common . $(dirname $0)/wsrep_sst_common
PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
...@@ -106,7 +102,7 @@ GTID_BINLOG_STATE=$(echo "SHOW GLOBAL VARIABLES LIKE 'gtid_binlog_state'" |\ ...@@ -106,7 +102,7 @@ GTID_BINLOG_STATE=$(echo "SHOW GLOBAL VARIABLES LIKE 'gtid_binlog_state'" |\
$MYSQL_CLIENT $AUTH -S$WSREP_SST_OPT_SOCKET --disable-reconnect --connect_timeout=10 |\ $MYSQL_CLIENT $AUTH -S$WSREP_SST_OPT_SOCKET --disable-reconnect --connect_timeout=10 |\
tail -1 | awk -F ' ' '{ print $2 }') tail -1 | awk -F ' ' '{ print $2 }')
MYSQL="$MYSQL_CLIENT --defaults-extra-file=$WSREP_SST_OPT_CONF "\ MYSQL="$MYSQL_CLIENT $WSREP_SST_OPT_CONF "\
"$AUTH -h${WSREP_SST_OPT_HOST_UNESCAPED:-$WSREP_SST_OPT_HOST} "\ "$AUTH -h${WSREP_SST_OPT_HOST_UNESCAPED:-$WSREP_SST_OPT_HOST} "\
"-P$WSREP_SST_OPT_PORT --disable-reconnect --connect_timeout=10" "-P$WSREP_SST_OPT_PORT --disable-reconnect --connect_timeout=10"
......
...@@ -102,19 +102,7 @@ fi ...@@ -102,19 +102,7 @@ fi
WSREP_LOG_DIR=${WSREP_LOG_DIR:-""} WSREP_LOG_DIR=${WSREP_LOG_DIR:-""}
# if WSREP_LOG_DIR env. variable is not set, try to get it from my.cnf # if WSREP_LOG_DIR env. variable is not set, try to get it from my.cnf
if [ -z "$WSREP_LOG_DIR" ]; then if [ -z "$WSREP_LOG_DIR" ]; then
WSREP_LOG_DIR=$(parse_cnf mariadb-10.0 innodb_log_group_home_dir "") WSREP_LOG_DIR=$(parse_cnf --mysqld innodb-log-group-home-dir '')
fi
if [ -z "$WSREP_LOG_DIR" ]; then
WSREP_LOG_DIR=$(parse_cnf mysqld innodb_log_group_home_dir "")
fi
if [ -z "$WSREP_LOG_DIR" ]; then
WSREP_LOG_DIR=$(parse_cnf server innodb_log_group_home_dir "")
fi
if [ -z "$WSREP_LOG_DIR" ]; then
WSREP_LOG_DIR=$(parse_cnf mariadb innodb_log_group_home_dir "")
fi
if [ -z "$WSREP_LOG_DIR" ]; then
WSREP_LOG_DIR=$(parse_cnf mysqld-10.0 innodb_log_group_home_dir "")
fi fi
if [ -n "$WSREP_LOG_DIR" ]; then if [ -n "$WSREP_LOG_DIR" ]; then
......
...@@ -127,7 +127,7 @@ get_keys() ...@@ -127,7 +127,7 @@ get_keys()
fi fi
if [[ $encrypt -eq 0 ]];then if [[ $encrypt -eq 0 ]];then
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF xtrabackup | grep -q encrypt;then if $MY_PRINT_DEFAULTS xtrabackup | grep -q encrypt;then
wsrep_log_error "Unexpected option combination. SST may fail. Refer to http://www.percona.com/doc/percona-xtradb-cluster/manual/xtrabackup_sst.html " wsrep_log_error "Unexpected option combination. SST may fail. Refer to http://www.percona.com/doc/percona-xtradb-cluster/manual/xtrabackup_sst.html "
fi fi
return return
...@@ -400,7 +400,7 @@ get_footprint() ...@@ -400,7 +400,7 @@ get_footprint()
{ {
pushd $WSREP_SST_OPT_DATA 1>/dev/null pushd $WSREP_SST_OPT_DATA 1>/dev/null
payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' -type f -print0 | du --files0-from=- --block-size=1 -c | awk 'END { print $1 }') payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' -type f -print0 | du --files0-from=- --block-size=1 -c | awk 'END { print $1 }')
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF xtrabackup | grep -q -- "--compress";then if $MY_PRINT_DEFAULTS xtrabackup | grep -q -- "--compress";then
# QuickLZ has around 50% compression ratio # QuickLZ has around 50% compression ratio
# When compression/compaction used, the progress is only an approximate. # When compression/compaction used, the progress is only an approximate.
payload=$(( payload*1/2 )) payload=$(( payload*1/2 ))
...@@ -491,7 +491,7 @@ read_cnf() ...@@ -491,7 +491,7 @@ read_cnf()
ssystag+="-" ssystag+="-"
if [[ $ssyslog -ne -1 ]];then if [[ $ssyslog -ne -1 ]];then
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF mysqld_safe | tr '_' '-' | grep -q -- "--syslog";then if $MY_PRINT_DEFAULTS mysqld_safe | grep -q -- "--syslog";then
ssyslog=1 ssyslog=1
fi fi
fi fi
...@@ -667,8 +667,8 @@ check_extra() ...@@ -667,8 +667,8 @@ check_extra()
{ {
local use_socket=1 local use_socket=1
if [[ $uextra -eq 1 ]];then if [[ $uextra -eq 1 ]];then
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF mysqld | tr '_' '-' | grep -- "--thread-handling=" | grep -q 'pool-of-threads';then if $MY_PRINT_DEFAULTS --mysqld | tr '_' '-' | grep -- "--thread-handling=" | grep -q 'pool-of-threads';then
local eport=$($MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF mysqld | tr '_' '-' | grep -- "--extra-port=" | cut -d= -f2) local eport=$($MY_PRINT_DEFAULTS --mysqld | tr '_' '-' | grep -- "--extra-port=" | cut -d= -f2)
if [[ -n $eport ]];then if [[ -n $eport ]];then
# Xtrabackup works only locally. # Xtrabackup works only locally.
# Hence, setting host to 127.0.0.1 unconditionally. # Hence, setting host to 127.0.0.1 unconditionally.
...@@ -863,20 +863,31 @@ if [[ $ssyslog -eq 1 ]];then ...@@ -863,20 +863,31 @@ if [[ $ssyslog -eq 1 ]];then
logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@" logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
} }
INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts --apply-log \$rebuildcmd \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply " INNOAPPLY="2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply "
INNOMOVE="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} $disver $impts --datadir=${DATA} --move-back --force-non-empty-directories \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move " INNOMOVE="2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move "
INNOBACKUP="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)" INNOBACKUP="2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)"
fi fi
else else
INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts --apply-log \$rebuildcmd \${DATA} &>\${DATA}/innobackup.prepare.log" INNOAPPLY="&>\${DATA}/innobackup.prepare.log"
INNOMOVE="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} --defaults-group=mysqld${WSREP_SST_OPT_CONF_SUFFIX} $disver $impts --datadir=${DATA} --move-back --force-non-empty-directories \${DATA} &>\${DATA}/innobackup.move.log" INNOMOVE="&>\${DATA}/innobackup.move.log"
INNOBACKUP="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} --defaults-group=mysqld${WSREP_SST_OPT_CONF_SUFFIX} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2>\${DATA}/innobackup.backup.log" INNOBACKUP="2>\${DATA}/innobackup.backup.log"
fi fi
get_stream get_stream
get_transfer get_transfer
# This is as close as innobackupex gets to mysqld defaults. Important note --defaults-extra-file passed to
# mysqld is not passed to innobackupex.
# WSREP_SST_OPT_SUFFIX_DEFAULT goes from --defaults-group-suffix=.X to --defaults-group=mysqld.X
# Ref: https://bugs.launchpad.net/codership-mysql/+bug/1378355
readonly INNOBACKUP_OPT_DEFAULT="${$WSREP_SST_OPT_DEFAULT} ${WSREP_SST_OPT_SUFFIX_DEFAULT/-suffix=/=mysqld}"
INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts --apply-log \$rebuildcmd \${DATA} ${INNOAPPLY}"
INNOMOVE="${INNOBACKUPEX_BIN} ${INNOBACKUP_OPT_DEFAULT} $disver $impts --move-back --force-non-empty-directories \${DATA} ${INNOMOVE}"
INNOBACKUP="${INNOBACKUPEX_BIN} ${INNOBACKUP_OPT_DEFAULT} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir ${INNOBACKUP}"
if [ "$WSREP_SST_OPT_ROLE" = "donor" ] if [ "$WSREP_SST_OPT_ROLE" = "donor" ]
then then
trap cleanup_donor EXIT trap cleanup_donor EXIT
...@@ -1168,7 +1179,6 @@ then ...@@ -1168,7 +1179,6 @@ then
fi fi
wsrep_log_info "Preparing the backup at ${DATA}" wsrep_log_info "Preparing the backup at ${DATA}"
timeit "Xtrabackup prepare stage" "$INNOAPPLY" timeit "Xtrabackup prepare stage" "$INNOAPPLY"
......
...@@ -99,7 +99,7 @@ get_keys() ...@@ -99,7 +99,7 @@ get_keys()
fi fi
if [[ $encrypt -eq 0 ]];then if [[ $encrypt -eq 0 ]];then
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF xtrabackup | grep -q encrypt;then if $MY_PRINT_DEFAULTS xtrabackup | grep -q encrypt;then
wsrep_log_error "Unexpected option combination. SST may fail. Refer to http://www.percona.com/doc/percona-xtradb-cluster/manual/xtrabackup_sst.html " wsrep_log_error "Unexpected option combination. SST may fail. Refer to http://www.percona.com/doc/percona-xtradb-cluster/manual/xtrabackup_sst.html "
fi fi
return return
...@@ -194,22 +194,11 @@ get_transfer() ...@@ -194,22 +194,11 @@ get_transfer()
} }
parse_cnf()
{
local group=$1
local var=$2
reval=$($MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF $group | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2-)
if [[ -z $reval ]];then
[[ -n $3 ]] && reval=$3
fi
echo $reval
}
get_footprint() get_footprint()
{ {
pushd $WSREP_SST_OPT_DATA 1>/dev/null pushd $WSREP_SST_OPT_DATA 1>/dev/null
payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' -type f -print0 | du --files0-from=- --block-size=1 -c | awk 'END { print $1 }') payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' -type f -print0 | du --files0-from=- --block-size=1 -c | awk 'END { print $1 }')
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF xtrabackup | grep -q -- "--compress";then if $MY_PRINT_DEFAULTS xtrabackup | grep -q -- "--compress";then
# QuickLZ has around 50% compression ratio # QuickLZ has around 50% compression ratio
# When compression/compaction used, the progress is only an approximate. # When compression/compaction used, the progress is only an approximate.
payload=$(( payload*1/2 )) payload=$(( payload*1/2 ))
...@@ -388,8 +377,8 @@ check_extra() ...@@ -388,8 +377,8 @@ check_extra()
{ {
local use_socket=1 local use_socket=1
if [[ $uextra -eq 1 ]];then if [[ $uextra -eq 1 ]];then
if $MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF mysqld | tr '_' '-' | grep -- "--thread-handling=" | grep -q 'pool-of-threads';then if $MY_PRINT_DEFAULTS --mysqld | tr '_' '-' | grep -- "--thread-handling=" | grep -q 'pool-of-threads';then
local eport=$($MY_PRINT_DEFAULTS -c $WSREP_SST_OPT_CONF mysqld | tr '_' '-' | grep -- "--extra-port=" | cut -d= -f2) local eport=$($MY_PRINT_DEFAULTS --mysqld | tr '_' '-' | grep -- "--extra-port=" | cut -d= -f2)
if [[ -n $eport ]];then if [[ -n $eport ]];then
# Xtrabackup works only locally. # Xtrabackup works only locally.
# Hence, setting host to 127.0.0.1 unconditionally. # Hence, setting host to 127.0.0.1 unconditionally.
...@@ -426,9 +415,16 @@ setup_ports ...@@ -426,9 +415,16 @@ setup_ports
get_stream get_stream
get_transfer get_transfer
# This is as close as innobackupex gets to mysqld defaults. Important note --defaults-extra-file passed to
# mysqld is not passed to innobackupex.
# WSREP_SST_OPT_SUFFIX_DEFAULT goes from --defaults-group-suffix=.X to --defaults-group=mysqld.X
# Ref: https://bugs.launchpad.net/codership-mysql/+bug/1378355
readonly INNOBACKUP_OPT_DEFAULT="${$WSREP_SST_OPT_DEFAULT} ${WSREP_SST_OPT_SUFFIX_DEFAULT/-suffix=/=mysqld}"
INNOEXTRA="" INNOEXTRA=""
INNOAPPLY="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} --apply-log \$rebuildcmd \${DATA} &>\${DATA}/innobackup.prepare.log" INNOAPPLY="${INNOBACKUPEX_BIN} ${INNOBACKUP_OPT_DEFAULT} --apply-log \$rebuildcmd \${DATA} &>\${DATA}/innobackup.prepare.log"
INNOBACKUP="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} \$INNOEXTRA --galera-info --stream=\$sfmt \${TMPDIR} 2>\${DATA}/innobackup.backup.log" INNOBACKUP="${INNOBACKUPEX_BIN} ${INNOBACKUP_OPT_DEFAULT} \$INNOEXTRA --galera-info --stream=\$sfmt \${TMPDIR} 2>\${DATA}/innobackup.backup.log"
if [ "$WSREP_SST_OPT_ROLE" = "donor" ] if [ "$WSREP_SST_OPT_ROLE" = "donor" ]
then then
...@@ -533,7 +529,7 @@ then ...@@ -533,7 +529,7 @@ then
if [[ $incremental -eq 1 ]];then if [[ $incremental -eq 1 ]];then
wsrep_log_info "Incremental SST enabled" wsrep_log_info "Incremental SST enabled"
#lsn=$(/pxc/bin/mysqld --defaults-file=$WSREP_SST_OPT_CONF --basedir=/pxc --wsrep-recover 2>&1 | grep -o 'log sequence number .*' | cut -d " " -f 4 | head -1) #lsn=$(/pxc/bin/mysqld $WSREP_SST_OPT_CONF --basedir=/pxc --wsrep-recover 2>&1 | grep -o 'log sequence number .*' | cut -d " " -f 4 | head -1)
lsn=$(grep to_lsn xtrabackup_checkpoints | cut -d= -f2 | tr -d ' ') lsn=$(grep to_lsn xtrabackup_checkpoints | cut -d= -f2 | tr -d ' ')
wsrep_log_info "Recovered LSN: $lsn" wsrep_log_info "Recovered LSN: $lsn"
fi fi
...@@ -686,7 +682,7 @@ then ...@@ -686,7 +682,7 @@ then
if [[ $incremental -eq 1 ]];then if [[ $incremental -eq 1 ]];then
# Added --ibbackup=xtrabackup_55 because it fails otherwise citing connection issues. # Added --ibbackup=xtrabackup_55 because it fails otherwise citing connection issues.
INNOAPPLY="${INNOBACKUPEX_BIN} --defaults-file=${WSREP_SST_OPT_CONF} \ INNOAPPLY="${INNOBACKUPEX_BIN} ${INNOBACKUP_OPT_DEFAULT} \
--ibbackup=xtrabackup_55 --apply-log $rebuildcmd --redo-only $BDATA --incremental-dir=${DATA} &>>${BDATA}/innobackup.prepare.log" --ibbackup=xtrabackup_55 --apply-log $rebuildcmd --redo-only $BDATA --incremental-dir=${DATA} &>>${BDATA}/innobackup.prepare.log"
fi fi
......
...@@ -30,8 +30,10 @@ ...@@ -30,8 +30,10 @@
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
extern const char wsrep_defaults_file[]; static char wsrep_defaults_file[FN_REFLEN * 2 + 10 + 30 +
extern const char wsrep_defaults_group_suffix[]; sizeof(WSREP_SST_OPT_CONF) +
sizeof(WSREP_SST_OPT_CONF_SUFFIX) +
sizeof(WSREP_SST_OPT_CONF_EXTRA)] = {0};
const char* wsrep_sst_method = WSREP_SST_DEFAULT; const char* wsrep_sst_method = WSREP_SST_DEFAULT;
const char* wsrep_sst_receive_address = WSREP_SST_ADDRESS_AUTO; const char* wsrep_sst_receive_address = WSREP_SST_ADDRESS_AUTO;
...@@ -61,6 +63,28 @@ bool wsrep_sst_method_update (sys_var *self, THD* thd, enum_var_type type) ...@@ -61,6 +63,28 @@ bool wsrep_sst_method_update (sys_var *self, THD* thd, enum_var_type type)
return 0; return 0;
} }
static void make_wsrep_defaults_file()
{
if (!wsrep_defaults_file[0])
{
char *ptr= wsrep_defaults_file;
char *end= ptr + sizeof(wsrep_defaults_file);
if (my_defaults_file)
ptr= strxnmov(ptr, end - ptr,
WSREP_SST_OPT_CONF, " '", my_defaults_file, "' ", NULL);
if (my_defaults_extra_file)
ptr= strxnmov(ptr, end - ptr,
WSREP_SST_OPT_CONF_EXTRA, " '", my_defaults_extra_file, "' ", NULL);
if (my_defaults_group_suffix)
ptr= strxnmov(ptr, end - ptr,
WSREP_SST_OPT_CONF_SUFFIX, " '", my_defaults_group_suffix, "' ", NULL);
}
}
// TODO: Improve address verification. // TODO: Improve address verification.
static bool sst_receive_address_check (const char* str) static bool sst_receive_address_check (const char* str)
{ {
...@@ -512,17 +536,18 @@ static ssize_t sst_prepare_other (const char* method, ...@@ -512,17 +536,18 @@ static ssize_t sst_prepare_other (const char* method,
} }
if (strlen(binlog_opt_val)) binlog_opt= WSREP_SST_OPT_BINLOG; if (strlen(binlog_opt_val)) binlog_opt= WSREP_SST_OPT_BINLOG;
make_wsrep_defaults_file();
ret= snprintf (cmd_str(), cmd_len, ret= snprintf (cmd_str(), cmd_len,
"wsrep_sst_%s " "wsrep_sst_%s "
WSREP_SST_OPT_ROLE" 'joiner' " WSREP_SST_OPT_ROLE" 'joiner' "
WSREP_SST_OPT_ADDR" '%s' " WSREP_SST_OPT_ADDR" '%s' "
WSREP_SST_OPT_DATA" '%s' " WSREP_SST_OPT_DATA" '%s' "
WSREP_SST_OPT_CONF" '%s' " " %s "
WSREP_SST_OPT_CONF_SUFFIX" '%s' "
WSREP_SST_OPT_PARENT" '%d'" WSREP_SST_OPT_PARENT" '%d'"
" %s '%s' ", " %s '%s' ",
method, addr_in, mysql_real_data_home, method, addr_in, mysql_real_data_home,
wsrep_defaults_file, wsrep_defaults_group_suffix, wsrep_defaults_file,
(int)getpid(), binlog_opt, binlog_opt_val); (int)getpid(), binlog_opt, binlog_opt_val);
my_free(binlog_opt_val); my_free(binlog_opt_val);
...@@ -785,12 +810,14 @@ static int sst_donate_mysqldump (const char* addr, ...@@ -785,12 +810,14 @@ static int sst_donate_mysqldump (const char* addr,
if (!bypass && wsrep_sst_donor_rejects_queries) sst_reject_queries(TRUE); if (!bypass && wsrep_sst_donor_rejects_queries) sst_reject_queries(TRUE);
make_wsrep_defaults_file();
int ret= snprintf (cmd_str(), cmd_len, int ret= snprintf (cmd_str(), cmd_len,
"wsrep_sst_mysqldump " "wsrep_sst_mysqldump "
WSREP_SST_OPT_ADDR" '%s' " WSREP_SST_OPT_ADDR" '%s' "
WSREP_SST_OPT_LPORT" '%u' " WSREP_SST_OPT_LPORT" '%u' "
WSREP_SST_OPT_SOCKET" '%s' " WSREP_SST_OPT_SOCKET" '%s' "
WSREP_SST_OPT_CONF" '%s' " " '%s' "
WSREP_SST_OPT_GTID" '%s:%lld'" WSREP_SST_OPT_GTID" '%s:%lld'"
"%s", "%s",
addr, mysqld_port, mysqld_unix_port, addr, mysqld_port, mysqld_unix_port,
...@@ -1091,19 +1118,20 @@ static int sst_donate_other (const char* method, ...@@ -1091,19 +1118,20 @@ static int sst_donate_other (const char* method,
} }
if (strlen(binlog_opt_val)) binlog_opt= WSREP_SST_OPT_BINLOG; if (strlen(binlog_opt_val)) binlog_opt= WSREP_SST_OPT_BINLOG;
make_wsrep_defaults_file();
ret= snprintf (cmd_str(), cmd_len, ret= snprintf (cmd_str(), cmd_len,
"wsrep_sst_%s " "wsrep_sst_%s "
WSREP_SST_OPT_ROLE" 'donor' " WSREP_SST_OPT_ROLE" 'donor' "
WSREP_SST_OPT_ADDR" '%s' " WSREP_SST_OPT_ADDR" '%s' "
WSREP_SST_OPT_SOCKET" '%s' " WSREP_SST_OPT_SOCKET" '%s' "
WSREP_SST_OPT_DATA" '%s' " WSREP_SST_OPT_DATA" '%s' "
WSREP_SST_OPT_CONF" '%s' " " %s "
WSREP_SST_OPT_CONF_SUFFIX" '%s' "
" %s '%s' " " %s '%s' "
WSREP_SST_OPT_GTID" '%s:%lld'" WSREP_SST_OPT_GTID" '%s:%lld'"
"%s", "%s",
method, addr, mysqld_unix_port, mysql_real_data_home, method, addr, mysqld_unix_port, mysql_real_data_home,
wsrep_defaults_file, wsrep_defaults_group_suffix, wsrep_defaults_file,
binlog_opt, binlog_opt_val, binlog_opt, binlog_opt_val,
uuid, (long long) seqno, uuid, (long long) seqno,
bypass ? " " WSREP_SST_OPT_BYPASS : ""); bypass ? " " WSREP_SST_OPT_BYPASS : "");
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#define WSREP_SST_OPT_DATA "--datadir" #define WSREP_SST_OPT_DATA "--datadir"
#define WSREP_SST_OPT_CONF "--defaults-file" #define WSREP_SST_OPT_CONF "--defaults-file"
#define WSREP_SST_OPT_CONF_SUFFIX "--defaults-group-suffix" #define WSREP_SST_OPT_CONF_SUFFIX "--defaults-group-suffix"
#define WSREP_SST_OPT_CONF_EXTRA "--defaults-extra-file"
#define WSREP_SST_OPT_PARENT "--parent" #define WSREP_SST_OPT_PARENT "--parent"
#define WSREP_SST_OPT_BINLOG "--binlog" #define WSREP_SST_OPT_BINLOG "--binlog"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment