summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbhay Choubey <nirbhay@mariadb.com>2015-02-20 17:51:33 -0500
committerNirbhay Choubey <nirbhay@mariadb.com>2015-02-20 17:51:33 -0500
commitf68ce6860454379f65131046dbba8cd4e65acda1 (patch)
tree9c420dc1defb9f9684cb3a616739f60b14131280
parent360ff3b0da557dc9fdbf3178ccaf084e6cb36cd0 (diff)
downloadmariadb-git-f68ce6860454379f65131046dbba8cd4e65acda1.tar.gz
MDEV-7615: Remove --galera-sst-mode option from mysqldump
Removed 'galera-sst-mode' option from mysqldump and added logic in wsrep_sst_mysqldump script to retrieve gtid_binlog_state from donor node and send it to the joiner node.
-rw-r--r--client/mysqldump.c49
-rw-r--r--mysql-test/t/galera_sst_mode.test43
-rw-r--r--scripts/wsrep_sst_mysqldump.sh49
3 files changed, 27 insertions, 114 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 3adbe87a8bb..e1181985499 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -114,7 +114,6 @@ static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0,
opt_slave_apply= 0,
opt_include_master_host_port= 0,
opt_events= 0, opt_comments_used= 0,
- opt_galera_sst_mode= 0,
opt_alltspcs=0, opt_notspcs= 0;
static my_bool insert_pat_inited= 0, debug_info_flag= 0, debug_check_flag= 0;
static ulong opt_max_allowed_packet, opt_net_buffer_length;
@@ -351,14 +350,6 @@ static struct my_option my_long_options[] =
{"force", 'f', "Continue even if we get an SQL error.",
&ignore_errors, &ignore_errors, 0, GET_BOOL, NO_ARG,
0, 0, 0, 0, 0, 0},
- {"galera-sst-mode", OPT_GALERA_SST_MODE,
- "This mode should normally be used in mysqldump snapshot state transfer "
- "(SST) in a Galera cluster. If enabled, mysqldump additionally dumps "
- "commands to turn off binary logging and SET global gtid_binlog_state "
- "with the current value. Note: RESET MASTER needs to be executed on the "
- "server receiving the resulting dump.",
- &opt_galera_sst_mode, &opt_galera_sst_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0,
- 0, 0, 0},
{"gtid", OPT_USE_GTID, "Used together with --master-data=1 or --dump-slave=1."
"When enabled, the output from those options will set the GTID position "
"instead of the binlog file and offset; the file/offset will appear only as "
@@ -4903,43 +4894,6 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
} /* dump_selected_tables */
-/**
- Add the following statements to the generated dump:
- a) SET @@session.sql_log_bin=OFF;
- b) SET @@global.gtid_binlog_state='[N-N-N,...]'
-*/
-static int wsrep_set_sst_cmds(MYSQL *mysql) {
- MYSQL_RES *res;
- MYSQL_ROW row;
-
- if (mysql_get_server_version(mysql) < 100005) {
- /* @@gtid_binlog_state does not exist. */
- return 0;
- }
-
- if (mysql_query_with_error_report(mysql, &res, "SELECT "
- "@@global.gtid_binlog_state"))
- return 1;
-
- if (mysql_num_rows(res) != 1)
- /* No entry for @@global.gtid_binlog_state, nothing needs to be done. */
- return 0;
-
- if (!(row= mysql_fetch_row(res)) || !(char *)row[0])
- return 1;
-
- /* first, add a command to turn off binary logging, */
- fprintf(md_result_file, "SET @@session.sql_log_bin=OFF;\n");
-
- /* followed by, a command to set global gtid_binlog_state. */
- fprintf(md_result_file, "SET @@global.gtid_binlog_state='%s';\n",
- (char*)row[0]);
-
- mysql_free_result(res);
- return 0;
-}
-
-
static int do_show_master_status(MYSQL *mysql_con, int consistent_binlog_pos,
int have_mariadb_gtid, int use_gtid)
{
@@ -5936,9 +5890,6 @@ int main(int argc, char **argv)
if (opt_slave_apply && add_stop_slave())
goto err;
- if (opt_galera_sst_mode && wsrep_set_sst_cmds(mysql))
- goto err;
-
if (opt_master_data && do_show_master_status(mysql, consistent_binlog_pos,
have_mariadb_gtid, opt_use_gtid))
goto err;
diff --git a/mysql-test/t/galera_sst_mode.test b/mysql-test/t/galera_sst_mode.test
deleted file mode 100644
index dd8f9531c9d..00000000000
--- a/mysql-test/t/galera_sst_mode.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# Embedded server doesn't support external clients
---source include/not_embedded.inc
-# Binlog is required
---source include/have_log_bin.inc
-
---echo #
---echo # Test for mysqldump's galera-sst-mode option
---echo #
-
---echo #
---echo # MDEV-6490: mysqldump unknown option --galera-sst-mode
---echo #
-CREATE DATABASE bug6490;
-USE bug6490;
-CREATE TABLE t1(c1 INT);
-INSERT INTO t1 values (1);
-INSERT INTO t1 values (2);
-
---echo # Save the current gtid_binlog_state.
---let $before= `SELECT @@global.gtid_binlog_state`
-
---echo # Take a dump of bug6490 database
---exec $MYSQL_DUMP --galera-sst-mode bug6490 > $MYSQLTEST_VARDIR/tmp/bug6490.sql
-DROP TABLE t1;
-
---echo # Load the dump
-RESET MASTER;
---exec $MYSQL -uroot bug6490 < $MYSQLTEST_VARDIR/tmp/bug6490.sql
-
-SELECT * from t1;
-
---echo # Compare the two gtid_binlog_state's
---let $after= `SELECT @@global.gtid_binlog_state`
-if (`SELECT STRCMP($before, $after)`)
-{
- --die ERROR: The two gtid_binlog_state's did not match.
-}
-
---echo # Cleanup
---remove_file $MYSQLTEST_VARDIR/tmp/bug6490.sql
-DROP DATABASE bug6490;
-
---echo # End of test
diff --git a/scripts/wsrep_sst_mysqldump.sh b/scripts/wsrep_sst_mysqldump.sh
index 3f4ada39a9d..df6f816132c 100644
--- a/scripts/wsrep_sst_mysqldump.sh
+++ b/scripts/wsrep_sst_mysqldump.sh
@@ -22,13 +22,12 @@
WSREP_SST_OPT_CONF=""
. $(dirname $0)/wsrep_sst_common
+PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
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
@@ -97,33 +96,39 @@ DROP PREPARE stmt;"
SET_START_POSITION="SET GLOBAL wsrep_start_position='$WSREP_SST_OPT_GTID';"
+# Retrieve the donor's @@global.gtid_binlog_state.
+GTID_BINLOG_STATE=$(echo "SHOW GLOBAL VARIABLES LIKE 'gtid_binlog_state'" |\
+mysql $AUTH -S$WSREP_SST_OPT_SOCKET --disable-reconnect --connect_timeout=10 |\
+tail -1 | awk -F ' ' '{ print $2 }')
+
MYSQL="mysql $AUTH -h$WSREP_SST_OPT_HOST -P$WSREP_SST_OPT_PORT "\
"--disable-reconnect --connect_timeout=10"
-RESET_MASTER=""
-OPT_GALERA_SST_MODE=""
# Check if binary logging is enabled on the joiner node.
# Note: SELECT cannot be used at this point.
-LOG_BIN=$(echo "SHOW VARIABLES LIKE 'log_bin'" | $MYSQL)
-LOG_BIN=$(echo $LOG_BIN | awk -F ' ' '{ print $4 }')
+LOG_BIN=$(echo "SHOW VARIABLES LIKE 'log_bin'" | $MYSQL |\
+tail -1 | awk -F ' ' '{ print $2 }')
# Check the joiner node's server version.
-SERVER_VERSION=$(echo "SHOW VARIABLES LIKE 'version'" | $MYSQL)
-SERVER_VERSION=$(echo $SERVER_VERSION | awk -F ' ' '{ print $4 }')
+SERVER_VERSION=$(echo "SHOW VARIABLES LIKE 'version'" | $MYSQL |\
+tail -1 | awk -F ' ' '{ print $2 }')
+
+RESET_MASTER=""
+SET_GTID_BINLOG_STATE=""
+SQL_LOG_BIN_OFF=""
# Safety check
if echo $SERVER_VERSION | grep '^10.0' > /dev/null
then
- # Check if binary logging is enabled on the Joiner node. If it is enabled,
- # RESET MASTER needs to be executed on the Joiner node. Also, mysqldump
- # should be executed with additional 'galera-sst-mode' option so that it
- # adds a command to set gtid_binlog_state with that of Donor node in the
- # dump, to be executed on the Joiner.
+ # If binary logging is enabled on the joiner node, we need to copy donor's
+ # gtid_binlog_state to joiner. In order to do that, a RESET MASTER must be
+ # executed to erase binary logs (if any). Binary logging should also be
+ # turned off for the session so that gtid state does not get altered while
+ # the dump gets replayed on joiner.
if [[ "$LOG_BIN" == 'ON' ]]; then
- # Reset master for 10.0 to clear gtid state.
RESET_MASTER="RESET MASTER;"
- # Set the galera-sst-mode option for mysqldump.
- OPT_GALERA_SST_MODE="--galera-sst-mode"
+ SET_GTID_BINLOG_STATE="SET @@global.gtid_binlog_state='$GTID_BINLOG_STATE';"
+ SQL_LOG_BIN_OFF="SET @@session.sql_log_bin=OFF;"
fi
fi
@@ -131,7 +136,7 @@ fi
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 $OPT_GALERA_SST_MODE"
+--skip-comments --flush-privileges --all-databases"
# need to disable logging when loading the dump
# reason is that dump contains ALTER TABLE for log tables, and
@@ -148,11 +153,11 @@ RESTORE_SLOW_QUERY_LOG="SET GLOBAL SLOW_QUERY_LOG=$SLOW_LOG_OPT;"
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]
then
- (echo $STOP_WSREP && echo $RESET_MASTER) | $MYSQL || true
- (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
+ (echo $STOP_WSREP && echo $RESET_MASTER && \
+ echo $SET_GTID_BINLOG_STATE && echo $SQL_LOG_BIN_OFF && \
+ 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