Commit 7fb1f919 authored by Julius Goryavsky's avatar Julius Goryavsky

MDEV-28758: Mariabackup copies binary logs to backup directory

This commit restores defaults and functionality regarding binlogs
to the way it was prior to MDEV-27524. The mariabackup utility no
longer saves binlogs files as part of a backup without the --galera-info
option. However, since we use --galera-info during SST, the behavior
of mariabackup changes and, in combination with GTIDs support enabled,
mariabackup transfers one (most recent) binlog file obtained after
FLUSH BINARY LOGS. In other cases, binlogs are not transferred during
SST in mariabackup mode. As for SST in the rsync mode, it works the
same way as before MDEV-27524 - by default it transfers one last
binlog file.

The --sst-max-binlogs option for mariabackup and the sst_max_binlogs
parameter in the [sst] / server sections are no longer supported for
SST via mariabackup.
parent 5b415437
...@@ -53,28 +53,7 @@ COUNT(*) = 2 ...@@ -53,28 +53,7 @@ COUNT(*) = 2
1 1
include/show_binlog_events.inc include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
hostname1-bin.000001 # Gtid # # GTID #-#-# hostname1-bin.000002 # Binlog_checkpoint # # hostname1-bin.000002
hostname1-bin.000001 # Query # # use `test`; CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB
hostname1-bin.000001 # Gtid # # BEGIN GTID #-#-#
hostname1-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES (1)
hostname1-bin.000001 # Table_map # # table_id: # (test.t1)
hostname1-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
hostname1-bin.000001 # Xid # # COMMIT /* XID */
hostname1-bin.000001 # Gtid # # GTID #-#-#
hostname1-bin.000001 # Query # # use `test`; CREATE TABLE t2 (id INT) ENGINE=InnoDB
hostname1-bin.000001 # Gtid # # BEGIN GTID #-#-#
hostname1-bin.000001 # Annotate_rows # # INSERT INTO t2 VALUES (1)
hostname1-bin.000001 # Table_map # # table_id: # (test.t2)
hostname1-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
hostname1-bin.000001 # Xid # # COMMIT /* XID */
hostname1-bin.000001 # Gtid # # BEGIN GTID #-#-#
hostname1-bin.000001 # Annotate_rows # # INSERT INTO t2 VALUES (1)
hostname1-bin.000001 # Table_map # # table_id: # (test.t2)
hostname1-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
hostname1-bin.000001 # Xid # # COMMIT /* XID */
hostname1-bin.000001 # Gtid # # GTID #-#-#
hostname1-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN f2 INTEGER
hostname1-bin.000001 # Rotate # # hostname1-bin.000002;pos=4
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
#cleanup #cleanup
......
...@@ -71,7 +71,7 @@ then ...@@ -71,7 +71,7 @@ then
# (b) Cluster state ID & wsrep_gtid_domain_id to be written to the file, OR # (b) Cluster state ID & wsrep_gtid_domain_id to be written to the file, OR
# (c) ERROR file, in case flush tables operation failed. # (c) ERROR file, in case flush tables operation failed.
while [ ! -r "$FLUSHED" ] && \ while [ ! -r "$FLUSHED" ] || \
! grep -q -F ':' -- "$FLUSHED" ! grep -q -F ':' -- "$FLUSHED"
do do
# Check whether ERROR file exists. # Check whether ERROR file exists.
......
...@@ -104,6 +104,7 @@ WSREP_SST_OPT_HOST_UNESCAPED="" ...@@ -104,6 +104,7 @@ WSREP_SST_OPT_HOST_UNESCAPED=""
INNODB_DATA_HOME_DIR=$(trim_dir "${INNODB_DATA_HOME_DIR:-}") INNODB_DATA_HOME_DIR=$(trim_dir "${INNODB_DATA_HOME_DIR:-}")
INNODB_LOG_GROUP_HOME=$(trim_dir "${INNODB_LOG_GROUP_HOME:-}") INNODB_LOG_GROUP_HOME=$(trim_dir "${INNODB_LOG_GROUP_HOME:-}")
INNODB_UNDO_DIR=$(trim_dir "${INNODB_UNDO_DIR:-}") INNODB_UNDO_DIR=$(trim_dir "${INNODB_UNDO_DIR:-}")
INNODB_BUFFER_POOL=""
INNODB_FORCE_RECOVERY="" INNODB_FORCE_RECOVERY=""
INNOEXTRA="" INNOEXTRA=""
...@@ -212,6 +213,10 @@ case "$1" in ...@@ -212,6 +213,10 @@ case "$1" in
readonly INNODB_UNDO_DIR=$(trim_dir "$2") readonly INNODB_UNDO_DIR=$(trim_dir "$2")
shift shift
;; ;;
'--innodb-buffer-pool-filename')
readonly INNODB_BUFFER_POOL=$(trim_string "$2")
shift
;;
'--defaults-file') '--defaults-file')
readonly WSREP_SST_OPT_DEFAULT="$1=$2" readonly WSREP_SST_OPT_DEFAULT="$1=$2"
readonly WSREP_SST_OPT_DEFAULTS="$1='$2'" readonly WSREP_SST_OPT_DEFAULTS="$1='$2'"
...@@ -471,6 +476,12 @@ case "$1" in ...@@ -471,6 +476,12 @@ case "$1" in
fi fi
skip_mysqld_arg=1 skip_mysqld_arg=1
;; ;;
'--innodb-buffer-pool-filename')
if [ -z "$INNODB_BUFFER_POOL" ]; then
MYSQLD_OPT_INNODB_BUFFER_POOL=$(trim_string "$value")
fi
skip_mysqld_arg=1
;;
'--innodb-force-recovery') '--innodb-force-recovery')
if [ -n "$value" -a "$value" != "0" ]; then if [ -n "$value" -a "$value" != "0" ]; then
INNODB_FORCE_RECOVERY=$(trim_string "$value") INNODB_FORCE_RECOVERY=$(trim_string "$value")
...@@ -552,6 +563,10 @@ if [ -n "${MYSQLD_OPT_INNODB_UNDO_DIR:-}" -a \ ...@@ -552,6 +563,10 @@ if [ -n "${MYSQLD_OPT_INNODB_UNDO_DIR:-}" -a \
-z "$INNODB_UNDO_DIR" ]; then -z "$INNODB_UNDO_DIR" ]; then
readonly INNODB_UNDO_DIR="$MYSQLD_OPT_INNODB_UNDO_DIR" readonly INNODB_UNDO_DIR="$MYSQLD_OPT_INNODB_UNDO_DIR"
fi fi
if [ -n "${MYSQLD_OPT_INNODB_BUFFER_POOL:-}" -a \
-z "$INNODB_BUFFER_POOL" ]; then
readonly INNODB_BUFFER_POOL="$MYSQLD_OPT_INNODB_BUFFER_POOL"
fi
if [ -n "${MYSQLD_OPT_LOG_BIN:-}" -a \ if [ -n "${MYSQLD_OPT_LOG_BIN:-}" -a \
-z "$WSREP_SST_OPT_BINLOG" ]; then -z "$WSREP_SST_OPT_BINLOG" ]; then
readonly WSREP_SST_OPT_BINLOG="$MYSQLD_OPT_LOG_BIN" readonly WSREP_SST_OPT_BINLOG="$MYSQLD_OPT_LOG_BIN"
...@@ -602,6 +617,9 @@ fi ...@@ -602,6 +617,9 @@ fi
if [ -n "$INNODB_UNDO_DIR" ]; then if [ -n "$INNODB_UNDO_DIR" ]; then
INNOEXTRA="$INNOEXTRA --innodb-undo-directory='$INNODB_UNDO_DIR'" INNOEXTRA="$INNOEXTRA --innodb-undo-directory='$INNODB_UNDO_DIR'"
fi fi
if [ -n "$INNODB_BUFFER_POOL" ]; then
INNOEXTRA="$INNOEXTRA --innodb-buffer-pool-filename='$INNODB_BUFFER_POOL'"
fi
if [ -n "$WSREP_SST_OPT_BINLOG" ]; then if [ -n "$WSREP_SST_OPT_BINLOG" ]; then
INNOEXTRA="$INNOEXTRA --log-bin='$WSREP_SST_OPT_BINLOG'" INNOEXTRA="$INNOEXTRA --log-bin='$WSREP_SST_OPT_BINLOG'"
if [ -n "$WSREP_SST_OPT_BINLOG_INDEX" ]; then if [ -n "$WSREP_SST_OPT_BINLOG_INDEX" ]; then
......
...@@ -664,6 +664,9 @@ cleanup_at_exit() ...@@ -664,6 +664,9 @@ cleanup_at_exit()
local estatus=$? local estatus=$?
if [ $estatus -ne 0 ]; then if [ $estatus -ne 0 ]; then
wsrep_log_error "Cleanup after exit with status: $estatus" wsrep_log_error "Cleanup after exit with status: $estatus"
elif [ -z "${coords:-}" -a "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
estatus=32
wsrep_log_error "Failed to get current position"
fi fi
[ "$(pwd)" != "$OLD_PWD" ] && cd "$OLD_PWD" [ "$(pwd)" != "$OLD_PWD" ] && cd "$OLD_PWD"
...@@ -934,6 +937,11 @@ if [ $ssyslog -eq 1 ]; then ...@@ -934,6 +937,11 @@ if [ $ssyslog -eq 1 ]; then
logger -p daemon.err -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@" logger -p daemon.err -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
} }
wsrep_log_warning()
{
logger -p daemon.warning -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
}
wsrep_log_info() wsrep_log_info()
{ {
logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@" logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
...@@ -1015,7 +1023,7 @@ setup_commands() ...@@ -1015,7 +1023,7 @@ setup_commands()
recovery=" --innodb-force-recovery=$INNODB_FORCE_RECOVERY" recovery=" --innodb-force-recovery=$INNODB_FORCE_RECOVERY"
fi fi
INNOAPPLY="$BACKUP_BIN --prepare$disver$recovery${iapts:+ }$iapts$INNOEXTRA --target-dir='$DATA' --datadir='$DATA'$mysqld_args $INNOAPPLY" INNOAPPLY="$BACKUP_BIN --prepare$disver$recovery${iapts:+ }$iapts$INNOEXTRA --target-dir='$DATA' --datadir='$DATA'$mysqld_args $INNOAPPLY"
INNOMOVE="$BACKUP_BIN$WSREP_SST_OPT_CONF --move-back$disver${impts:+ }$impts$INNOEXTRA --force-non-empty-directories --target-dir='$DATA' --datadir='${TDATA:-$DATA}' $INNOMOVE" INNOMOVE="$BACKUP_BIN$WSREP_SST_OPT_CONF --move-back$disver${impts:+ }$impts$INNOEXTRA --galera-info --force-non-empty-directories --target-dir='$DATA' --datadir='${TDATA:-$DATA}' $INNOMOVE"
INNOBACKUP="$BACKUP_BIN$WSREP_SST_OPT_CONF --backup$disver${iopts:+ }$iopts$tmpopts$INNOEXTRA --galera-info --stream=$sfmt --target-dir='$itmpdir' --datadir='$DATA'$mysqld_args $INNOBACKUP" INNOBACKUP="$BACKUP_BIN$WSREP_SST_OPT_CONF --backup$disver${iopts:+ }$iopts$tmpopts$INNOEXTRA --galera-info --stream=$sfmt --target-dir='$itmpdir' --datadir='$DATA'$mysqld_args $INNOBACKUP"
} }
...@@ -1153,11 +1161,6 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then ...@@ -1153,11 +1161,6 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
iopts="--parallel=$backup_threads${iopts:+ }$iopts" iopts="--parallel=$backup_threads${iopts:+ }$iopts"
fi fi
max_binlogs=$(parse_cnf "$encgroups" 'sst-max-binlogs')
if [ -n "$max_binlogs" ]; then
iopts="--sst-max-binlogs=$max_binlogs${iopts:+ }$iopts"
fi
setup_commands setup_commands
set +e set +e
......
...@@ -38,6 +38,9 @@ cleanup_joiner() ...@@ -38,6 +38,9 @@ cleanup_joiner()
local estatus=$? local estatus=$?
if [ $estatus -ne 0 ]; then if [ $estatus -ne 0 ]; then
wsrep_log_error "Cleanup after exit with status: $estatus" wsrep_log_error "Cleanup after exit with status: $estatus"
elif [ -z "${coords:-}" ]; then
estatus=32
wsrep_log_error "Failed to get current position"
fi fi
local failure=0 local failure=0
...@@ -408,7 +411,7 @@ EOF ...@@ -408,7 +411,7 @@ EOF
# (b) Cluster state ID & wsrep_gtid_domain_id to be written to the file, OR # (b) Cluster state ID & wsrep_gtid_domain_id to be written to the file, OR
# (c) ERROR file, in case flush tables operation failed. # (c) ERROR file, in case flush tables operation failed.
while [ ! -r "$FLUSHED" ] && \ while [ ! -r "$FLUSHED" ] || \
! grep -q -F ':' -- "$FLUSHED" ! grep -q -F ':' -- "$FLUSHED"
do do
# Check whether ERROR file exists. # Check whether ERROR file exists.
...@@ -433,8 +436,8 @@ EOF ...@@ -433,8 +436,8 @@ EOF
# Let's check the existence of the file with the index: # Let's check the existence of the file with the index:
if [ -f "$WSREP_SST_OPT_BINLOG_INDEX" ]; then if [ -f "$WSREP_SST_OPT_BINLOG_INDEX" ]; then
# Let's read the binlog index: # Let's read the binlog index:
max_binlogs=$(parse_cnf "$encgroups" 'sst-max-binlogs') max_binlogs=$(parse_cnf "$encgroups" 'sst-max-binlogs' 1)
if [ -n "$max_binlogs" ]; then if [ $max_binlogs -ge 0 ]; then
binlog_files="" binlog_files=""
if [ $max_binlogs -gt 0 ]; then if [ $max_binlogs -gt 0 ]; then
binlog_files=$(tail -n $max_binlogs \ binlog_files=$(tail -n $max_binlogs \
......
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