diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh
index 7add8541d7a..b8730e2624a 100644
--- a/scripts/mysqld_multi.sh
+++ b/scripts/mysqld_multi.sh
@@ -308,7 +308,9 @@ sub report_mysqlds
 
 sub start_mysqlds()
 {
-  my (@groups, $com, $tmp, $i, @options, $j, $mysqld_found, $info_sent);
+  my (@groups, $com, $tmp, $i, @options, $j, $mysqld_found, $suffix_found, $info_sent);
+
+  $suffix_found= 0;
 
   if (!$opt_no_log)
   {
@@ -347,6 +349,10 @@ sub start_mysqlds()
         $options[$j]= quote_shell_word($options[$j]);
         $tmp.= " $options[$j]";
       }
+      elseif ("--defaults-group-suffix=" eq substr($options[$j], 0, 24))
+      {
+        $suffix_found= 1;
+      }
       else
       {
 	$options[$j]= quote_shell_word($options[$j]);
@@ -364,6 +370,12 @@ sub start_mysqlds()
     }
     $com.= $tmp;
 
+    if (!$suffix_found)
+    {
+      $com.= " --defaults-group-suffix=";
+      $com.= $groups[$i];
+    }
+
     if ($opt_wsrep_new_cluster) {
       $com.= " --wsrep-new-cluster";
     }
diff --git a/scripts/wsrep_sst_common.sh b/scripts/wsrep_sst_common.sh
index 41c6f3370f8..b1b586868df 100755
--- a/scripts/wsrep_sst_common.sh
+++ b/scripts/wsrep_sst_common.sh
@@ -28,7 +28,12 @@ WSREP_SST_OPT_PSWD=${WSREP_SST_OPT_PSWD:-}
 WSREP_SST_OPT_DEFAULT=""
 WSREP_SST_OPT_EXTRA_DEFAULT=""
 WSREP_SST_OPT_SUFFIX_DEFAULT=""
+WSREP_SST_OPT_SUFFIX_VALUE=""
+WSREP_SST_OPT_MYSQLD=""
 INNODB_DATA_HOME_DIR_ARG=""
+INNODB_LOG_GROUP_HOME_ARG=""
+INNODB_UNDO_DIR_ARG=""
+LOG_BIN_ARG=""
 
 while [ $# -gt 0 ]; do
 case "$1" in
@@ -83,6 +88,18 @@ case "$1" in
         readonly INNODB_DATA_HOME_DIR_ARG="$2"
         shift
         ;;
+    '--innodb-log-group-home-dir')
+        readonly INNODB_LOG_GROUP_HOME_ARG="$2"
+        shift
+        ;;
+    '--innodb-undo-directory')
+        readonly INNODB_UNDO_DIR_ARG="$2"
+        shift
+        ;;
+    '--log-bin')
+        readonly LOG_BIN_ARG="$2"
+        shift
+        ;;
     '--defaults-file')
         readonly WSREP_SST_OPT_DEFAULT="$1=$2"
         shift
@@ -93,6 +110,7 @@ case "$1" in
         ;;
     '--defaults-group-suffix')
         readonly WSREP_SST_OPT_SUFFIX_DEFAULT="$1=$2"
+        readonly WSREP_SST_OPT_SUFFIX_VALUE="$2"
         shift
         ;;
     '--host')
@@ -143,6 +161,46 @@ case "$1" in
         readonly WSREP_SST_OPT_GTID_DOMAIN_ID="$2"
         shift
         ;;
+    '--mysqld-args')
+        original_cmd=""
+        shift
+        while [ $# -gt 0 ]; do
+           option=${1%%=*}
+           if [ "$option" != "--defaults-file" ]; then
+              value=${1#*=}
+              case "$option" in
+                  '--innodb-data-home-dir')
+                      if [ -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
+                          readonly INNODB_DATA_HOME_DIR_ARG="$value"
+                      fi
+                      ;;
+                  '--innodb-log-group-home-dir')
+                      if [ -z "$INNODB_LOG_GROUP_HOME_ARG" ]; then
+                          readonly INNODB_LOG_GROUP_HOME_ARG="$value"
+                      fi
+                      ;;
+                  '--innodb-undo-directory')
+                      if [ -z "$INNODB_UNDO_DIR_ARG" ]; then
+                          readonly INNODB_UNDO_DIR_ARG="$value"
+                      fi
+                      ;;
+                  '--log-bin')
+                      if [ -z "$LOG_BIN_ARG" ]; then
+                          readonly LOG_BIN_ARG="$value"
+                      fi
+                      ;;
+              esac
+              if [ -z "$original_cmd" ]; then
+                  original_cmd="$1"
+              else
+                  original_cmd+=" $1"
+              fi
+           fi
+           shift
+        done
+        readonly WSREP_SST_OPT_MYSQLD="$original_cmd"
+        break
+        ;;
     *) # must be command
        # usage
        # exit 1
diff --git a/scripts/wsrep_sst_mariabackup.sh b/scripts/wsrep_sst_mariabackup.sh
index 6c3206a03e1..8e7b742d9ee 100644
--- a/scripts/wsrep_sst_mariabackup.sh
+++ b/scripts/wsrep_sst_mariabackup.sh
@@ -697,8 +697,7 @@ if [[ ${FORCE_FTWRL:-0} -eq 1 ]];then
     iopts+=" --no-backup-locks "
 fi
 
-
-INNOEXTRA=""
+INNOEXTRA=$WSREP_SST_OPT_MYSQLD
 
 INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
 # Try to set INNODB_DATA_HOME_DIR from the command line:
@@ -706,6 +705,9 @@ if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
     INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
 fi
 # if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
+if [ -z "$INNODB_DATA_HOME_DIR" ]; then
+    INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
+fi
 if [ -z "$INNODB_DATA_HOME_DIR" ]; then
     INNODB_DATA_HOME_DIR=$(parse_cnf --mysqld innodb-data-home-dir '')
 fi
@@ -826,7 +828,9 @@ then
             exit 93
         fi
 
-        if [[ -z $(parse_cnf --mysqld tmpdir "") && -z $(parse_cnf xtrabackup tmpdir "") ]];then 
+        if [[ -z $(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE tmpdir "") && \
+              -z $(parse_cnf --mysqld tmpdir "") && \
+              -z $(parse_cnf xtrabackup tmpdir "") ]]; then
             xtmpdir=$(mktemp -d)
             tmpopts=" --tmpdir=$xtmpdir "
             wsrep_log_info "Using $xtmpdir as xtrabackup temporary directory"
@@ -949,8 +953,24 @@ then
     [[ -n $SST_PROGRESS_FILE ]] && touch $SST_PROGRESS_FILE
 
     ib_home_dir=$INNODB_DATA_HOME_DIR
-    ib_log_dir=$(parse_cnf --mysqld innodb-log-group-home-dir "")
-    ib_undo_dir=$(parse_cnf --mysqld innodb-undo-directory "")
+
+    # Try to set ib_log_dir from the command line:
+    ib_log_dir=$INNODB_LOG_GROUP_HOME_ARG
+    if [ -z "$ib_log_dir" ]; then
+        ib_log_dir=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-log-group-home-dir "")
+    fi
+    if [ -z "$ib_log_dir" ]; then
+        ib_log_dir=$(parse_cnf --mysqld innodb-log-group-home-dir "")
+    fi
+
+    # Try to set ib_undo_dir from the command line:
+    ib_undo_dir=$INNODB_UNDO_DIR_ARG
+    if [ -z "$ib_undo_dir" ]; then
+        ib_undo_dir=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-undo-directory "")
+    fi
+    if [ -z "$ib_undo_dir" ]; then
+        ib_undo_dir=$(parse_cnf --mysqld innodb-undo-directory "")
+    fi
 
     stagemsg="Joiner-Recv"
 
@@ -1027,7 +1047,13 @@ then
             find $ib_home_dir $ib_log_dir $ib_undo_dir $DATA -mindepth 1 -prune -regex $cpat -o -exec rm -rfv {} 1>&2 \+
 	fi
 
-        tempdir=$(parse_cnf --mysqld log-bin "")
+        tempdir=$LOG_BIN_ARG
+        if [ -z "$tempdir" ]; then
+           tempdir=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE log-bin "")
+        fi
+        if [ -z "$tempdir" ]; then
+            tempdir=$(parse_cnf --mysqld log-bin "")
+        fi
         if [[ -n ${tempdir:-} ]];then
             binlog_dir=$(dirname $tempdir)
             binlog_file=$(basename $tempdir)
diff --git a/scripts/wsrep_sst_rsync.sh b/scripts/wsrep_sst_rsync.sh
index 0fb7509d387..5403b9e8505 100644
--- a/scripts/wsrep_sst_rsync.sh
+++ b/scripts/wsrep_sst_rsync.sh
@@ -151,7 +151,14 @@ then
 fi
 
 WSREP_LOG_DIR=${WSREP_LOG_DIR:-""}
+# Try to set WSREP_LOG_DIR from the command line:
+if [ -z "$WSREP_LOG_DIR" ]; then
+    WSREP_LOG_DIR=$INNODB_LOG_GROUP_HOME_ARG
+fi
 # if WSREP_LOG_DIR env. variable is not set, try to get it from my.cnf
+if [ -z "$WSREP_LOG_DIR" ]; then
+    WSREP_LOG_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-log-group-home-dir '')
+fi
 if [ -z "$WSREP_LOG_DIR" ]; then
     WSREP_LOG_DIR=$(parse_cnf --mysqld innodb-log-group-home-dir '')
 fi
@@ -170,6 +177,9 @@ if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
     INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
 fi
 # if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
+if [ -z "$INNODB_DATA_HOME_DIR" ]; then
+    INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
+fi
 if [ -z "$INNODB_DATA_HOME_DIR" ]; then
     INNODB_DATA_HOME_DIR=$(parse_cnf --mysqld innodb-data-home-dir '')
 fi
diff --git a/sql/wsrep_sst.cc b/sql/wsrep_sst.cc
index 85d5aca342d..89e637ae075 100644
--- a/sql/wsrep_sst.cc
+++ b/sql/wsrep_sst.cc
@@ -576,17 +576,76 @@ static int sst_append_data_dir(wsp::env& env, const char* data_dir)
   return -env.error();
 }
 
+static size_t estimate_cmd_len (bool* extra_args)
+{
+  /*
+    The length of the area reserved for the control parameters
+    of the SST script (excluding the copying of the original
+    mysqld arguments):
+  */
+  size_t cmd_len= 4096;
+  bool extra= false;
+  /*
+    If mysqld was started with arguments, add them all:
+  */
+  if (orig_argc > 1)
+  {
+    for (int i = 1; i < orig_argc; i++)
+    {
+      cmd_len += strlen(orig_argv[i]);
+    }
+    extra = true;
+    cmd_len += strlen(WSREP_SST_OPT_MYSQLD);
+    /*
+      Add the separating spaces between arguments,
+      and one additional space before "--mysqld-args":
+    */
+    cmd_len += orig_argc;
+  }
+  *extra_args= extra;
+  return cmd_len;
+}
+
+static void copy_orig_argv (char* cmd_str)
+{
+  /*
+     If mysqld was started with arguments, copy them all:
+  */
+  if (orig_argc > 1)
+  {
+    size_t n = strlen(WSREP_SST_OPT_MYSQLD);
+    *cmd_str++ = ' ';
+    memcpy(cmd_str, WSREP_SST_OPT_MYSQLD, n * sizeof(char));
+    cmd_str += n;
+    for (int i = 1; i < orig_argc; i++)
+    {
+      char* arg= orig_argv[i];
+      *cmd_str++ = ' ';
+      n = strlen(arg);
+      memcpy(cmd_str, arg, n * sizeof(char));
+      cmd_str += n;
+    }
+    /*
+      Add a terminating null character (not counted in the length,
+      since we've overwritten the original null character which
+      was previously added by snprintf:
+    */
+    *cmd_str = 0;
+  }
+}
+
 static ssize_t sst_prepare_other (const char*  method,
                                   const char*  sst_auth,
                                   const char*  addr_in,
                                   const char** addr_out)
 {
-  int const cmd_len= 4096;
+  bool extra_args;
+  size_t const cmd_len= estimate_cmd_len(&extra_args);
   wsp::string cmd_str(cmd_len);
 
   if (!cmd_str())
   {
-    WSREP_ERROR("sst_prepare_other(): could not allocate cmd buffer of %d bytes",
+    WSREP_ERROR("sst_prepare_other(): could not allocate cmd buffer of %zd bytes",
                 cmd_len);
     return -ENOMEM;
   }
@@ -637,6 +696,9 @@ static ssize_t sst_prepare_other (const char*  method,
     return (ret < 0 ? ret : -EMSGSIZE);
   }
 
+  if (extra_args)
+    copy_orig_argv(cmd_str() + ret);
+
   wsp::env env(NULL);
   if (env.error())
   {
@@ -890,13 +952,14 @@ static int sst_donate_mysqldump (const char*         addr,
   }
   memcpy(host, address.get_address(), address.get_address_len());
   int port= address.get_port();
-  int const cmd_len= 4096;
-  wsp::string  cmd_str(cmd_len);
+  bool extra_args;
+  size_t const cmd_len= estimate_cmd_len(&extra_args);
+  wsp::string cmd_str(cmd_len);
 
   if (!cmd_str())
   {
     WSREP_ERROR("sst_donate_mysqldump(): "
-                "could not allocate cmd buffer of %d bytes", cmd_len);
+                "could not allocate cmd buffer of %zd bytes", cmd_len);
     return -ENOMEM;
   }
 
@@ -933,6 +996,9 @@ static int sst_donate_mysqldump (const char*         addr,
     return (ret < 0 ? ret : -EMSGSIZE);
   }
 
+  if (extra_args)
+    copy_orig_argv(cmd_str() + ret);
+
   WSREP_DEBUG("Running: '%s'", cmd_str());
 
   ret= sst_run_shell (cmd_str(), env, 3);
@@ -1283,13 +1349,14 @@ static int sst_donate_other (const char*        method,
                              bool               bypass,
                              char**             env) // carries auth info
 {
-  int const cmd_len= 4096;
-  wsp::string  cmd_str(cmd_len);
+  bool extra_args;
+  size_t const cmd_len= estimate_cmd_len(&extra_args);
+  wsp::string cmd_str(cmd_len);
 
   if (!cmd_str())
   {
     WSREP_ERROR("sst_donate_other(): "
-                "could not allocate cmd buffer of %d bytes", cmd_len);
+                "could not allocate cmd buffer of %zd bytes", cmd_len);
     return -ENOMEM;
   }
 
@@ -1345,6 +1412,9 @@ static int sst_donate_other (const char*        method,
     return (ret < 0 ? ret : -EMSGSIZE);
   }
 
+  if (extra_args)
+    copy_orig_argv(cmd_str() + ret);
+
   if (!bypass && wsrep_sst_donor_rejects_queries) sst_reject_queries(FALSE);
 
   pthread_t tmp;
diff --git a/sql/wsrep_sst.h b/sql/wsrep_sst.h
index eb218647bc0..2389db4abe7 100644
--- a/sql/wsrep_sst.h
+++ b/sql/wsrep_sst.h
@@ -32,6 +32,7 @@
 #define WSREP_SST_OPT_PARENT   "--parent"
 #define WSREP_SST_OPT_BINLOG   "--binlog"
 #define WSREP_SST_OPT_BINLOG_INDEX "--binlog-index"
+#define WSREP_SST_OPT_MYSQLD   "--mysqld-args"
 
 // mysqldump-specific options
 #define WSREP_SST_OPT_USER     "--user"