Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
c383418c
Commit
c383418c
authored
Feb 03, 2018
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'github/10.0-galera' into 10.1
parents
f69a3b2e
c7e5feb2
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
96 additions
and
154 deletions
+96
-154
mysql-test/suite/galera_3nodes/include/have_ipv6.inc
mysql-test/suite/galera_3nodes/include/have_ipv6.inc
+15
-0
mysql-test/suite/galera_3nodes/t/galera_innobackupex_backup.test
...est/suite/galera_3nodes/t/galera_innobackupex_backup.test
+1
-1
mysql-test/suite/galera_3nodes/t/galera_safe_to_bootstrap.test
...-test/suite/galera_3nodes/t/galera_safe_to_bootstrap.test
+1
-1
scripts/wsrep_sst_common.sh
scripts/wsrep_sst_common.sh
+21
-29
scripts/wsrep_sst_mysqldump.sh
scripts/wsrep_sst_mysqldump.sh
+1
-5
scripts/wsrep_sst_rsync.sh
scripts/wsrep_sst_rsync.sh
+1
-13
scripts/wsrep_sst_xtrabackup-v2.sh
scripts/wsrep_sst_xtrabackup-v2.sh
+31
-53
scripts/wsrep_sst_xtrabackup.sh
scripts/wsrep_sst_xtrabackup.sh
+11
-44
sql/wsrep_sst.cc
sql/wsrep_sst.cc
+12
-7
sql/wsrep_sst.h
sql/wsrep_sst.h
+2
-1
No files found.
mysql-test/suite/galera_3nodes/include/have_ipv6.inc
0 → 100644
View file @
c383418c
# Check if ipv6 is available.
#
--
disable_query_log
--
disable_result_log
connect
(
checkcon123456789
,
::
1
,
root
,,
test
);
if
(
$mysql_errno
)
{
skip
No
IPv6
support
;
}
connection
default
;
disconnect
checkcon123456789
;
--
enable_result_log
--
enable_query_log
# end check
mysql-test/suite/galera_3nodes/t/galera_innobackupex_backup.test
View file @
c383418c
...
...
@@ -16,7 +16,7 @@ SELECT COUNT(*) = 10 FROM t1;
--
exec
innobackupex
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
defaults
-
group
=
mysqld
.
2
$MYSQL_TMP_DIR
/
innobackupex_backup
--
galera
-
info
--
port
=
$NODE_MYPORT_2
--
host
=
127.0
.
0.1
--
no
-
timestamp
>
$MYSQL_TMP_DIR
/
innobackupex
-
backup
.
log
--
exec
innobackupex
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
defaults
-
group
=
mysqld
.
2
$MYSQL_TMP_DIR
/
innobackupex_backup
--
apply
-
log
--
galera
-
info
--
port
=
$NODE_MYPORT_2
--
host
=
127.0
.
0.1
--
no
-
timestamp
>
$MYSQL_TMP_DIR
/
innobackupex
-
apply
.
log
--
source
include
/
kill_galera
.
inc
--
source
../
galera
/
include
/
kill_galera
.
inc
--
sleep
1
--
connection
node_1
...
...
mysql-test/suite/galera_3nodes/t/galera_safe_to_bootstrap.test
View file @
c383418c
...
...
@@ -108,7 +108,7 @@ SET SESSION wsrep_on = OFF;
--
let
$wait_condition
=
SELECT
VARIABLE_VALUE
=
1
FROM
INFORMATION_SCHEMA
.
GLOBAL_STATUS
WHERE
VARIABLE_NAME
=
'wsrep_cluster_size'
;
--
source
include
/
wait_condition
.
inc
--
source
include
/
kill_galera
.
inc
--
source
../
galera
/
include
/
kill_galera
.
inc
#
# Only node #1 should have safe_to_bootstrap: 1
...
...
scripts/wsrep_sst_common.sh
View file @
c383418c
...
...
@@ -20,13 +20,13 @@ set -u
WSREP_SST_OPT_BYPASS
=
0
WSREP_SST_OPT_BINLOG
=
""
WSREP_SST_OPT_CONF_SUFFIX
=
""
WSREP_SST_OPT_DATA
=
""
WSREP_SST_OPT_AUTH
=
${
WSREP_SST_OPT_AUTH
:-}
WSREP_SST_OPT_USER
=
${
WSREP_SST_OPT_USER
:-}
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
case
"
$1
"
in
...
...
@@ -35,19 +35,22 @@ case "$1" in
#
# Break address string into host:port/path parts
#
if
echo
$WSREP_SST_OPT_ADDR
|
grep
-qe
'^\[.*\]'
readonly
WSREP_SST_OPT_HOST
=
${
WSREP_SST_OPT_ADDR
%%[
:/]
*
}
if
[
${
WSREP_SST_OPT_HOST
:0:1
}
=
'['
]
then
# IPv6 notation
readonly
WSREP_SST_OPT_HOST
=
${
WSREP_SST_OPT_ADDR
/\]*/\]
}
readonly
WSREP_SST_OPT_HOST_UNESCAPED
=
$(
echo
$WSREP_SST_OPT_HOST
|
\
cut
-d
'['
-f
2 |
cut
-d
']'
-f
1
)
readonly
WSREP_SST_OPT_HOST_UNESCAPED
=
${
WSREP_SST_OPT_HOST
:1:-1
}
else
# "traditional" notation
readonly
WSREP_SST_OPT_HOST
=
${
WSREP_SST_OPT_ADDR
%%[
:/]
*
}
readonly
WSREP_SST_OPT_HOST_UNESCAPED
=
${
WSREP_SST_OPT_HOST
}
fi
readonly
WSREP_SST_OPT_PORT
=
$(
echo
$WSREP_SST_OPT_ADDR
|
\
cut
-d
']'
-f
2 |
cut
-s
-d
':'
-f
2 |
cut
-d
'/'
-f
1
)
readonly
WSREP_SST_OPT_PATH
=
${
WSREP_SST_OPT_ADDR
#*/
}
readonly
WSREP_SST_OPT_MODULE
=
${
WSREP_SST_OPT_PATH
%%/*
}
remain
=
${
WSREP_SST_OPT_PATH
#*/
}
readonly
WSREP_SST_OPT_LSN
=
${
remain
%%/*
}
remain
=
${
remain
#*/
}
readonly
WSREP_SST_OPT_SST_VER
=
${
remain
%%/*
}
shift
;;
'--bypass'
)
...
...
@@ -66,7 +69,7 @@ case "$1" in
shift
;;
'--defaults-group-suffix'
)
WSREP_SST_OPT_CONF_SUFFIX
=
"
$2
"
readonly
WSREP_SST_OPT_SUFFIX_DEFAULT
=
"
$1
=
$2
"
shift
;;
'--host'
)
...
...
@@ -122,7 +125,6 @@ shift
done
readonly
WSREP_SST_OPT_BYPASS
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
# (for MTR suite)
...
...
@@ -150,19 +152,18 @@ else
MY_PRINT_DEFAULTS
=
$(
which my_print_defaults
)
fi
readonly
WSREP_SST_OPT_CONF
=
"
$WSREP_SST_OPT_DEFAULT
$WSREP_SST_OPT_EXTRA_DEFAULT
"
MY_PRINT_DEFAULTS
=
"
$MY_PRINT_DEFAULTS
$WSREP_SST_OPT_CONF
"
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
()
{
[
-z
"
$WSREP_SST_OPT_AUTH
"
-o
"
$WSREP_SST_OPT_AUTH
"
=
"(null)"
]
}
# For Bug:1200727
if
$MY_PRINT_DEFAULTS
sst |
grep
-q
"wsrep_sst_auth"
then
if
wsrep_auth_not_set
then
WSREP_SST_OPT_AUTH
=
$(
$MY_PRINT_DEFAULTS
sst |
grep
--
"--wsrep_sst_auth"
|
cut
-d
=
-f2
)
# State Snapshot Transfer authentication password was displayed in the ps output. Bug fixed #1200727.
if
$MY_PRINT_DEFAULTS
sst |
grep
-q
"wsrep_sst_auth"
;
then
if
wsrep_auth_not_set
;
then
WSREP_SST_OPT_AUTH
=
$(
$MY_PRINT_DEFAULTS
sst |
grep
--
"--wsrep_sst_auth"
|
cut
-d
=
-f2
)
fi
fi
readonly
WSREP_SST_OPT_AUTH
...
...
@@ -241,7 +242,7 @@ wsrep_check_programs()
# process like encryption, etc.....
# 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
# 3rd param: - : default value for the param
parse_cnf
()
...
...
@@ -250,20 +251,11 @@ parse_cnf()
local
var
=
$2
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)
# then
grep
for needed variable
# then
search
for needed variable
# finally get the variable value (if variables has been specified multiple time use the last value only)
# look in group+suffix
if
[
-n
$WSREP_SST_OPT_CONF_SUFFIX
]
;
then
reval
=
$(
$MY_PRINT_DEFAULTS
"
${
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
$group
|
awk
-F
=
'{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}'
|
grep
--
"--
$var
="
|
cut
-d
=
-f2-
|
tail
-1
)
fi
reval
=
$(
$MY_PRINT_DEFAULTS
"
${
group
}
"
|
awk
-v
var
=
"
${
var
}
"
'BEGIN { OFS=FS="=" } { gsub(/_/,"-",$1); if ( $1=="--"var) lastval=substr($0,length($1)+2) } END { print lastval}'
)
# use default if we haven't found a value
if
[
-z
$reval
]
;
then
...
...
scripts/wsrep_sst_mysqldump.sh
View file @
c383418c
...
...
@@ -17,10 +17,6 @@
# 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
PATH
=
$PATH
:/usr/sbin:/usr/bin:/sbin:/bin
...
...
@@ -118,7 +114,7 @@ $MYSQL_CLIENT $AUTH -S$WSREP_SST_OPT_SOCKET --disable-reconnect --connect_timeou
tail
-1
|
awk
-F
' '
'{ print $2 }'
)
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
}
"
\
"-P
$WSREP_SST_OPT_PORT
--disable-reconnect --connect_timeout=10"
# Check if binary logging is enabled on the joiner node.
...
...
scripts/wsrep_sst_rsync.sh
View file @
c383418c
...
...
@@ -102,19 +102,7 @@ fi
WSREP_LOG_DIR
=
${
WSREP_LOG_DIR
:-
""
}
# 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 mariadb-10.0 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
""
)
WSREP_LOG_DIR
=
$(
parse_cnf
--mysqld
innodb-log-group-home-dir
''
)
fi
if
[
-n
"
$WSREP_LOG_DIR
"
]
;
then
...
...
scripts/wsrep_sst_xtrabackup-v2.sh
View file @
c383418c
...
...
@@ -32,9 +32,6 @@ ecode=0
ssyslog
=
""
ssystag
=
""
XTRABACKUP_PID
=
""
SST_PORT
=
""
REMOTEIP
=
""
REMOTEHOST
=
""
tca
=
""
tcert
=
""
tkey
=
""
...
...
@@ -42,7 +39,6 @@ sockopt=""
progress
=
""
ttime
=
0
totime
=
0
lsn
=
""
ecmd
=
""
rlimit
=
""
# Initially
...
...
@@ -77,11 +73,6 @@ ssl_cert=""
ssl_ca
=
""
ssl_key
=
""
# Required for backup locks
# For backup locks it is 1 sent by joiner
# 5.6.21 PXC and later can't donate to an older joiner
sst_ver
=
1
if
which pv &>/dev/null
&&
pv
--help
|
grep
-q
FORMAT
;
then
pvopts+
=
$pvformat
fi
...
...
@@ -258,11 +249,7 @@ verify_file_exists()
get_transfer
()
{
if
[[
-z
$SST_PORT
]]
;
then
TSST_PORT
=
4444
else
TSST_PORT
=
$SST_PORT
fi
TSST_PORT
=
${
WSREP_SST_OPT_PORT
:-
4444
}
if
[[
$tfmt
==
'nc'
]]
;
then
if
[[
!
-x
`
which nc
`
]]
;
then
...
...
@@ -287,7 +274,7 @@ get_transfer()
fi
else
# netcat doesn't understand [] around IPv6 address
tcmd
=
"nc
${
REMOTEIP
//[\[\]]/
}
${
TSST_PORT
}
"
tcmd
=
"nc
${
WSREP_SST_OPT_HOST_UNESCAPED
}
${
TSST_PORT
}
"
fi
else
tfmt
=
'socat'
...
...
@@ -349,7 +336,7 @@ get_transfer()
tcmd
=
"socat -u openssl-listen:
${
TSST_PORT
}
,reuseaddr,cert=
${
tcert
}
,cafile=
${
tca
}${
joiner_extra
}${
sockopt
}
stdio"
else
wsrep_log_info
"Encrypting with CERT:
$tcert
, CA:
$tca
"
tcmd
=
"socat -u stdio openssl-connect:
${
REMOTEIP
}
:
${
TSST_PORT
}
,cert=
${
tcert
}
,cafile=
${
tca
}${
donor_extra
}${
sockopt
}
"
tcmd
=
"socat -u stdio openssl-connect:
${
WSREP_SST_OPT_HOST
}
:
${
TSST_PORT
}
,cert=
${
tcert
}
,cafile=
${
tca
}${
donor_extra
}${
sockopt
}
"
fi
elif
[[
$encrypt
-eq
3
]]
;
then
wsrep_log_warning
"**** WARNING **** encrypt=3 is deprecated and will be removed in a future release"
...
...
@@ -366,7 +353,7 @@ get_transfer()
tcmd
=
"socat -u openssl-listen:
${
TSST_PORT
}
,reuseaddr,cert=
${
tcert
}
,key=
${
tkey
}
,verify=0
${
joiner_extra
}${
sockopt
}
stdio"
else
wsrep_log_info
"Encrypting with CERT:
$tcert
, KEY:
$tkey
"
tcmd
=
"socat -u stdio openssl-connect:
${
REMOTEIP
}
:
${
TSST_PORT
}
,cert=
${
tcert
}
,key=
${
tkey
}
,verify=0
${
sockopt
}
"
tcmd
=
"socat -u stdio openssl-connect:
${
WSREP_SST_OPT_HOST
}
:
${
TSST_PORT
}
,cert=
${
tcert
}
,key=
${
tkey
}
,verify=0
${
sockopt
}
"
fi
elif
[[
$encrypt
-eq
4
]]
;
then
wsrep_log_info
"Using openssl based encryption with socat: with key, crt, and ca"
...
...
@@ -387,7 +374,7 @@ get_transfer()
tcmd
=
"socat -u openssl-listen:
${
TSST_PORT
}
,reuseaddr,cert=
${
ssl_cert
}
,key=
${
ssl_key
}
,cafile=
${
ssl_ca
}
,verify=1
${
joiner_extra
}${
sockopt
}
stdio"
else
wsrep_log_info
"Encrypting with CERT:
$ssl_cert
, KEY:
$ssl_key
, CA:
$ssl_ca
"
tcmd
=
"socat -u stdio openssl-connect:
${
REMOTEIP
}
:
${
TSST_PORT
}
,cert=
${
ssl_cert
}
,key=
${
ssl_key
}
,cafile=
${
ssl_ca
}
,verify=1
${
donor_extra
}${
sockopt
}
"
tcmd
=
"socat -u stdio openssl-connect:
${
WSREP_SST_OPT_HOST
}
:
${
TSST_PORT
}
,cert=
${
ssl_cert
}
,key=
${
ssl_key
}
,cafile=
${
ssl_ca
}
,verify=1
${
donor_extra
}${
sockopt
}
"
fi
else
...
...
@@ -398,7 +385,7 @@ get_transfer()
if
[[
"
$WSREP_SST_OPT_ROLE
"
==
"joiner"
]]
;
then
tcmd
=
"socat -u TCP-LISTEN:
${
TSST_PORT
}
,reuseaddr
${
sockopt
}
stdio"
else
tcmd
=
"socat -u stdio TCP:
${
REMOTEIP
}
:
${
TSST_PORT
}${
sockopt
}
"
tcmd
=
"socat -u stdio TCP:
${
WSREP_SST_OPT_HOST
}
:
${
TSST_PORT
}${
sockopt
}
"
fi
fi
fi
...
...
@@ -407,7 +394,7 @@ get_transfer()
get_footprint
()
{
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
-s
|
awk
'END { print $1 }'
)
if
$MY_PRINT_DEFAULTS
xtrabackup |
grep
-q
--
"--compress"
;
then
# QuickLZ has around 50% compression ratio
# When compression/compaction used, the progress is only an approximate.
...
...
@@ -481,15 +468,15 @@ read_cnf()
# Pull the parameters needed for encrypt=4
ssl_ca
=
$(
parse_cnf sst ssl-ca
""
)
if
[[
-z
"
$ssl_ca
"
]]
;
then
ssl_ca
=
$(
parse_cnf mysqld ssl-ca
""
)
ssl_ca
=
$(
parse_cnf
--
mysqld
ssl-ca
""
)
fi
ssl_cert
=
$(
parse_cnf sst ssl-cert
""
)
if
[[
-z
"
$ssl_cert
"
]]
;
then
ssl_cert
=
$(
parse_cnf mysqld ssl-cert
""
)
ssl_cert
=
$(
parse_cnf
--
mysqld
ssl-cert
""
)
fi
ssl_key
=
$(
parse_cnf sst ssl-key
""
)
if
[[
-z
"
$ssl_key
"
]]
;
then
ssl_key
=
$(
parse_cnf mysqld ssl-key
""
)
ssl_key
=
$(
parse_cnf
--
mysqld
ssl-key
""
)
fi
rlimit
=
$(
parse_cnf sst rlimit
""
)
...
...
@@ -503,7 +490,7 @@ read_cnf()
ssystag+
=
"-"
if
[[
$ssyslog
-ne
-1
]]
;
then
if
$MY_PRINT_DEFAULTS
mysqld_safe |
tr
'_'
'-'
|
grep
-q
--
"--syslog"
;
then
if
$MY_PRINT_DEFAULTS
mysqld_safe |
grep
-q
--
"--syslog"
;
then
ssyslog
=
1
fi
fi
...
...
@@ -646,18 +633,6 @@ kill_xtrabackup()
rm
-f
"
$XTRABACKUP_PID
"
||
true
}
setup_ports
()
{
if
[[
"
$WSREP_SST_OPT_ROLE
"
==
"donor"
]]
;
then
SST_PORT
=
$WSREP_SST_OPT_PORT
REMOTEIP
=
$WSREP_SST_OPT_HOST
lsn
=
$(
echo
$WSREP_SST_OPT_PATH
|
awk
-F
'[/]'
'{ print $2 }'
)
sst_ver
=
$(
echo
$WSREP_SST_OPT_PATH
|
awk
-F
'[/]'
'{ print $3 }'
)
else
SST_PORT
=
$WSREP_SST_OPT_PORT
fi
}
# waits ~1 minute for nc/socat to open the port and then reports ready
# (regardless of timeout)
wait_for_listen
()
...
...
@@ -674,15 +649,15 @@ wait_for_listen()
sleep
0.2
done
echo
"ready
${
HOST
}
:
${
PORT
}
/
${
MODULE
}
//
$
sst_ver
"
echo
"ready
${
HOST
}
:
${
PORT
}
/
${
MODULE
}
//
$
{
WSREP_SST_OPT_SST_VER
:-
1
}
"
}
check_extra
()
{
local
use_socket
=
1
if
[[
$uextra
-eq
1
]]
;
then
if
$MY_PRINT_DEFAULTS
--mysqld
|
tr
'_'
'-'
|
grep
--
"--thread-handling="
|
grep
-q
'pool-of-threads'
;
then
local
eport
=
$(
$MY_PRINT_DEFAULTS
mysqld |
tr
'_'
'-'
|
grep
--
"--extra-port="
|
cut
-d
=
-f2
)
if
[
$(
parse_cnf
--mysqld
thread-handling
)
=
'pool-of-threads'
]
;
then
local
eport
=
$(
parse_cnf
--mysqld
extra-port
)
if
[[
-n
$eport
]]
;
then
# Xtrabackup works only locally.
# Hence, setting host to 127.0.0.1 unconditionally.
...
...
@@ -843,7 +818,6 @@ if [[ ! ${WSREP_SST_OPT_ROLE} == 'joiner' && ! ${WSREP_SST_OPT_ROLE} == 'donor'
fi
read_cnf
setup_ports
if
${
INNOBACKUPEX_BIN
}
/tmp
--help
2>/dev/null |
grep
-q
--
'--version-check'
;
then
disver
=
"--no-version-check"
...
...
@@ -877,20 +851,24 @@ if [[ $ssyslog -eq 1 ]];then
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 "
INNOMOVE
=
"
${
INNOBACKUPEX_BIN
}
${
WSREP_SST_OPT_DEFAULT
}
$disver
$impts
--datadir=
${
DATA
}
--move-back --force-non-empty-directories
\$
{DATA}
2>&1 | logger -p daemon.err -t
${
ssystag
}
innobackupex-move "
INNOBACKUP
=
"
${
INNOBACKUPEX_BIN
}
${
WSREP_SST_OPT_DEFAULT
}
$disver
$iopts
\$
tmpopts
\$
INNOEXTRA --galera-info --stream=
\$
sfmt
\$
itmpdir
2> >(logger -p daemon.err -t
${
ssystag
}
innobackupex-backup)"
INNOAPPLY
=
"2>&1 | logger -p daemon.err -t
${
ssystag
}
innobackupex-apply "
INNOMOVE
=
"2>&1 | logger -p daemon.err -t
${
ssystag
}
innobackupex-move "
INNOBACKUP
=
"2> >(logger -p daemon.err -t
${
ssystag
}
innobackupex-backup)"
fi
else
INNOAPPLY
=
"
${
INNOBACKUPEX_BIN
}
$disver
$iapts
--apply-log
\$
rebuildcmd
\$
{DATA}
&>
\$
{DATA}/innobackup.prepare.log"
INNOMOVE
=
"
${
INNOBACKUPEX_BIN
}
${
WSREP_SST_OPT_DEFAULT
}
--defaults-group=mysqld
${
WSREP_SST_OPT_CONF_SUFFIX
}
$disver
$impts
--datadir=
${
DATA
}
--move-back --force-non-empty-directories
\$
{DATA}
&>
\$
{DATA}/innobackup.move.log"
INNOBACKUP
=
"
${
INNOBACKUPEX_BIN
}
${
WSREP_SST_OPT_DEFAULT
}
$disver
$iopts
\$
tmpopts
\$
INNOEXTRA --galera-info --stream=
\$
sfmt
\$
itmpdir
2>
\$
{DATA}/innobackup.backup.log"
INNOAPPLY
=
"&>
\$
{DATA}/innobackup.prepare.log"
INNOMOVE
=
"&>
\$
{DATA}/innobackup.move.log"
INNOBACKUP
=
"2>
\$
{DATA}/innobackup.backup.log"
fi
get_stream
get_transfer
INNOAPPLY
=
"
${
INNOBACKUPEX_BIN
}
$disver
$iapts
--apply-log
\$
rebuildcmd
\$
{DATA}
${
INNOAPPLY
}
"
INNOMOVE
=
"
${
INNOBACKUPEX_BIN
}
${
WSREP_SST_OPT_CONF
}
$disver
$impts
--move-back --force-non-empty-directories
\$
{DATA}
${
INNOMOVE
}
"
INNOBACKUP
=
"
${
INNOBACKUPEX_BIN
}
${
WSREP_SST_OPT_CONF
}
$disver
$iopts
\$
tmpopts
\$
INNOEXTRA --galera-info --stream=
\$
sfmt
\$
itmpdir
${
INNOBACKUP
}
"
if
[
"
$WSREP_SST_OPT_ROLE
"
=
"donor"
]
then
trap
cleanup_donor EXIT
...
...
@@ -898,13 +876,13 @@ then
if
[
$WSREP_SST_OPT_BYPASS
-eq
0
]
then
usrst
=
0
if
[[
-z
$
sst_ver
]]
;
then
if
[[
-z
$
WSREP_SST_OPT_SST_VER
]]
;
then
wsrep_log_error
"Upgrade joiner to 5.6.21 or higher for backup locks support"
wsrep_log_error
"The joiner is not supported for this version of donor"
exit
93
fi
if
[[
-z
$(
parse_cnf mysqld tmpdir
""
)
&&
-z
$(
parse_cnf xtrabackup tmpdir
""
)
]]
;
then
if
[[
-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"
...
...
@@ -961,7 +939,7 @@ then
wsrep_log_info
"Sleeping before data transfer for SST"
sleep
10
wsrep_log_info
"Streaming the backup to joiner at
${
REMOTEIP
}
${
SS
T_PORT
:-
4444
}
"
wsrep_log_info
"Streaming the backup to joiner at
${
WSREP_SST_OPT_HOST
}
${
WSREP_SST_OP
T_PORT
:-
4444
}
"
# Add compression to the head of the stream (if specified)
if
[[
-n
$scomp
]]
;
then
...
...
@@ -1023,9 +1001,9 @@ then
[[
-e
$SST_PROGRESS_FILE
]]
&&
wsrep_log_info
"Stale sst_in_progress file:
$SST_PROGRESS_FILE
"
[[
-n
$SST_PROGRESS_FILE
]]
&&
touch
$SST_PROGRESS_FILE
ib_home_dir
=
$(
parse_cnf mysqld innodb-data-home-dir
""
)
ib_log_dir
=
$(
parse_cnf mysqld innodb-log-group-home-dir
""
)
ib_undo_dir
=
$(
parse_cnf mysqld innodb-undo-directory
""
)
ib_home_dir
=
$(
parse_cnf
--
mysqld
innodb-data-home-dir
""
)
ib_log_dir
=
$(
parse_cnf
--
mysqld
innodb-log-group-home-dir
""
)
ib_undo_dir
=
$(
parse_cnf
--
mysqld
innodb-undo-directory
""
)
stagemsg
=
"Joiner-Recv"
...
...
@@ -1091,7 +1069,7 @@ 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
=
$(
parse_cnf
--
mysqld
log-bin
""
)
if
[[
-n
${
tempdir
:-}
]]
;
then
binlog_dir
=
$(
dirname
$tempdir
)
binlog_file
=
$(
basename
$tempdir
)
...
...
scripts/wsrep_sst_xtrabackup.sh
View file @
c383418c
...
...
@@ -30,15 +30,13 @@ encrypt=0
nproc
=
1
ecode
=
0
XTRABACKUP_PID
=
""
SST_PORT
=
""
REMOTEIP
=
""
tcert
=
""
tpem
=
""
sockopt
=
""
progress
=
""
ttime
=
0
totime
=
0
lsn
=
""
lsn
=
"
${
WSREP_SST_OPT_LSN
}
"
incremental
=
0
ecmd
=
""
rlimit
=
""
...
...
@@ -136,11 +134,7 @@ get_keys()
get_transfer
()
{
if
[[
-z
$SST_PORT
]]
;
then
TSST_PORT
=
4444
else
TSST_PORT
=
$SST_PORT
fi
TSST_PORT
=
${
WSREP_SST_OPT_PORT
:-
4444
}
if
[[
$tfmt
==
'nc'
]]
;
then
if
[[
!
-x
`
which nc
`
]]
;
then
...
...
@@ -155,7 +149,7 @@ get_transfer()
tcmd
=
"nc -dl
${
TSST_PORT
}
"
fi
else
tcmd
=
"nc
${
REMOTEIP
}
${
TSST_PORT
}
"
tcmd
=
"nc
${
WSREP_SST_OPT_HOST_UNESCAPED
}
${
TSST_PORT
}
"
fi
else
tfmt
=
'socat'
...
...
@@ -181,34 +175,23 @@ get_transfer()
tcmd
=
"socat -u openssl-listen:
${
TSST_PORT
}
,reuseaddr,cert=
$tpem
,cafile=
${
tcert
}${
sockopt
}
stdio"
else
wsrep_log_info
"Encrypting with PEM
$tpem
, CA:
$tcert
"
tcmd
=
"socat -u stdio openssl-connect:
${
REMOTEIP
}
:
${
TSST_PORT
}
,cert=
$tpem
,cafile=
${
tcert
}${
sockopt
}
"
tcmd
=
"socat -u stdio openssl-connect:
${
WSREP_SST_OPT_HOST
}
:
${
TSST_PORT
}
,cert=
$tpem
,cafile=
${
tcert
}${
sockopt
}
"
fi
else
if
[[
"
$WSREP_SST_OPT_ROLE
"
==
"joiner"
]]
;
then
tcmd
=
"socat -u TCP-LISTEN:
${
TSST_PORT
}
,reuseaddr
${
sockopt
}
stdio"
else
tcmd
=
"socat -u stdio TCP:
${
REMOTEIP
}
:
${
TSST_PORT
}${
sockopt
}
"
tcmd
=
"socat -u stdio TCP:
${
WSREP_SST_OPT_HOST
}
:
${
TSST_PORT
}${
sockopt
}
"
fi
fi
fi
}
parse_cnf
()
{
local
group
=
$1
local
var
=
$2
reval
=
$(
$MY_PRINT_DEFAULTS
$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
()
{
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
-s
|
awk
'END { print $1 }'
)
if
$MY_PRINT_DEFAULTS
xtrabackup |
grep
-q
--
"--compress"
;
then
# QuickLZ has around 50% compression ratio
# When compression/compaction used, the progress is only an approximate.
...
...
@@ -354,17 +337,6 @@ kill_xtrabackup()
rm
-f
"
$XTRABACKUP_PID
"
}
setup_ports
()
{
if
[[
"
$WSREP_SST_OPT_ROLE
"
==
"donor"
]]
;
then
SST_PORT
=
$(
echo
$WSREP_SST_OPT_ADDR
|
awk
-F
'[:/]'
'{ print $2 }'
)
REMOTEIP
=
$(
echo
$WSREP_SST_OPT_ADDR
|
awk
-F
':'
'{ print $1 }'
)
lsn
=
$(
echo
$WSREP_SST_OPT_ADDR
|
awk
-F
'[:/]'
'{ print $4 }'
)
else
SST_PORT
=
$(
echo
${
WSREP_SST_OPT_ADDR
}
|
awk
-F
':'
'{ print $2 }'
)
fi
}
# waits ~10 seconds for nc to open the port and then reports ready
# (regardless of timeout)
wait_for_listen
()
...
...
@@ -388,8 +360,8 @@ check_extra()
{
local
use_socket
=
1
if
[[
$uextra
-eq
1
]]
;
then
if
$MY_PRINT_DEFAULTS
--mysqld
|
tr
'_'
'-'
|
grep
--
"--thread-handling="
|
grep
-q
'pool-of-threads'
;
then
local
eport
=
$(
$MY_PRINT_DEFAULTS
--mysqld
|
tr
'_'
'-'
|
grep
--
"--extra-port="
|
cut
-d
=
-f2
)
if
[
$(
parse_cnf
--mysqld
thread-handling
)
=
'pool-of-threads'
]
;
then
local
eport
=
$(
parse_cnf
--mysqld
extra-port
)
if
[[
-n
$eport
]]
;
then
# Xtrabackup works only locally.
# Hence, setting host to 127.0.0.1 unconditionally.
...
...
@@ -466,7 +438,7 @@ then
check_extra
wsrep_log_info
"Streaming the backup to joiner at
${
REMOTEIP
}
${
SS
T_PORT
}
"
wsrep_log_info
"Streaming the backup to joiner at
${
WSREP_SST_OPT_HOST
}
${
WSREP_SST_OP
T_PORT
}
"
if
[[
-n
$progress
]]
;
then
get_footprint
...
...
@@ -547,14 +519,9 @@ then
# May need xtrabackup_checkpoints later on
rm
-f
${
DATA
}
/xtrabackup_binary
${
DATA
}
/xtrabackup_galera_info
${
DATA
}
/xtrabackup_logfile
ADDR
=
${
WSREP_SST_OPT_ADDR
}
if
[
-z
"
${
SST_PORT
}
"
]
then
SST_PORT
=
4444
ADDR
=
"
$(
echo
${
WSREP_SST_OPT_ADDR
}
|
awk
-F
':'
'{ print $1 }'
)
:
${
SST_PORT
}
"
fi
ADDR
=
"
${
WSREP_SST_OPT_HOST
}
:
${
WSREP_SST_OPT_PORT
:-
4444
}
"
wait_for_listen
${
SST_PORT
}
${
ADDR
}
${
MODULE
}
&
wait_for_listen
${
WSREP_SST_OPT_PORT
:-
4444
}
${
ADDR
}
${
MODULE
}
&
trap
sig_joiner_cleanup HUP PIPE INT TERM
trap
cleanup_joiner EXIT
...
...
sql/wsrep_sst.cc
View file @
c383418c
...
...
@@ -30,9 +30,10 @@
#include <cstdio>
#include <cstdlib>
char
wsrep_defaults_file
[
FN_REFLEN
*
2
+
10
+
sizeof
(
WSREP_SST_OPT_CONF
)
+
sizeof
(
WSREP_SST_OPT_EXTRA_CONF
)]
=
{
0
};
static
char
wsrep_defaults_file
[
FN_REFLEN
*
2
+
10
+
30
+
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_receive_address
=
WSREP_SST_ADDRESS_AUTO
;
...
...
@@ -75,7 +76,11 @@ static void make_wsrep_defaults_file()
if
(
my_defaults_extra_file
)
ptr
=
strxnmov
(
ptr
,
end
-
ptr
,
WSREP_SST_OPT_EXTRA_CONF
,
" '"
,
my_defaults_extra_file
,
"' "
,
NULL
);
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
);
}
}
...
...
@@ -581,8 +586,8 @@ static ssize_t sst_prepare_other (const char* method,
WSREP_SST_OPT_PARENT
" '%d'"
" %s '%s' "
,
method
,
addr_in
,
mysql_real_data_home
,
wsrep_defaults_file
,
(
int
)
getpid
(),
binlog_opt
,
binlog_opt_val
);
wsrep_defaults_file
,
(
int
)
getpid
(),
binlog_opt
,
binlog_opt_val
);
my_free
(
binlog_opt_val
);
if
(
ret
<
0
||
ret
>=
cmd_len
)
...
...
@@ -864,7 +869,7 @@ static int sst_donate_mysqldump (const char* addr,
WSREP_SST_OPT_PORT
" '%d' "
WSREP_SST_OPT_LPORT
" '%u' "
WSREP_SST_OPT_SOCKET
" '%s' "
"
%s
"
"
'%s'
"
WSREP_SST_OPT_GTID
" '%s:%lld' "
WSREP_SST_OPT_GTID_DOMAIN_ID
" '%d'"
"%s"
,
...
...
sql/wsrep_sst.h
View file @
c383418c
...
...
@@ -27,7 +27,8 @@
#define WSREP_SST_OPT_AUTH "--auth"
#define WSREP_SST_OPT_DATA "--datadir"
#define WSREP_SST_OPT_CONF "--defaults-file"
#define WSREP_SST_OPT_EXTRA_CONF "--defaults-extra-file"
#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_BINLOG "--binlog"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment