Linux ns1.utparral.edu.mx 6.8.0-79-generic #79~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 15 16:54:53 UTC 2 x86_64
Apache/2.4.58 (Unix) OpenSSL/1.1.1w PHP/8.2.12 mod_perl/2.0.12 Perl/v5.34.1
: 10.10.1.9 | : 10.10.1.254
Cant Read [ /etc/named.conf ]
daemon
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
README
+ Create Folder
+ Create File
/
opt /
lampp /
bin /
[ HOME SHELL ]
Name
Size
Permission
Action
ab
51.43
KB
-rwxr-xr-x
annotate
10.2
KB
-rwxr-xr-x
apachectl
3.33
KB
-rwxr-xr-x
apr-1-config
6.84
KB
-rwxr-xr-x
apreq2-config
5.96
KB
-rwxr-xr-x
apu-1-config
6.42
KB
-rwxr-xr-x
apxs
23.3
KB
-rwxr-xr-x
aria_chk
4.56
MB
-rwxr-xr-x
aria_dump_log
4.35
MB
-rwxr-xr-x
aria_ftdump
4.37
MB
-rwxr-xr-x
aria_pack
4.4
MB
-rwxr-xr-x
aria_read_log
4.51
MB
-rwxr-xr-x
autopoint
25.97
KB
-rwxr-xr-x
bdftogd
3.91
KB
-rwxr-xr-x
bison
288.55
KB
-rwxr-xr-x
bmp2tiff
14.32
KB
-rwxr-xr-x
bsqldb
26.76
KB
-rwxr-xr-x
bunzip2
85.55
KB
-rwxr-xr-x
bzcat
85.55
KB
-rwxr-xr-x
bzcmp
2.08
KB
-rwxr-xr-x
bzdiff
2.08
KB
-rwxr-xr-x
bzegrep
1.64
KB
-rwxr-xr-x
bzfgrep
1.64
KB
-rwxr-xr-x
bzgrep
1.64
KB
-rwxr-xr-x
bzip2
85.55
KB
-rwxr-xr-x
bzip2recover
14.23
KB
-rwxr-xr-x
bzless
1.23
KB
-rwxr-xr-x
bzmore
1.23
KB
-rwxr-xr-x
captoinfo
66.7
KB
-rwxr-xr-x
checkgid
6.13
KB
-rwxr-xr-x
cjpeg
30.29
KB
-rwxr-xr-x
clear
6.12
KB
-rwxr-xr-x
corelist
15.03
KB
-rwxr-xr-x
cpan
8.18
KB
-rwxr-xr-x
crc32
715
B
-r-xr-xr-x
c_rehash
6.57
KB
-rwxr-xr-x
curl
174.83
KB
-rwxr-xr-x
curl-config
5.48
KB
-rwxr-xr-x
cwebp
50.9
KB
-rwxr-xr-x
datacopy
22.45
KB
-rwxr-xr-x
dbilogstrip
1.44
KB
-r-xr-xr-x
dbiprof
6.17
KB
-r-xr-xr-x
dbiproxy
5.37
KB
-r-xr-xr-x
dbl2png
14.3
KB
-rwxr-xr-x
dbmmanage
8.72
KB
-rwxr-xr-x
defncopy
18.76
KB
-rwxr-xr-x
derb
23.09
KB
-rwxr-xr-x
djpeg
26.27
KB
-rwxr-xr-x
dwebp
30.49
KB
-rwxr-xr-x
enc2xs
40.79
KB
-rwxr-xr-x
encguess
3.02
KB
-rwxr-xr-x
envsubst
34.55
KB
-rwxr-xr-x
envvars
1.03
KB
-rw-r--r--
envvars-std
1.03
KB
-rw-r--r--
fax2ps
18.52
KB
-rwxr-xr-x
fax2tiff
14.66
KB
-rwxr-xr-x
fcgistarter
10.27
KB
-rwxr-xr-x
fisql
26.91
KB
-rwxr-xr-x
fix_rights
956
B
-rwxr-xr-x
flex
353.36
KB
-rwxr-xr-x
flex++
353.36
KB
-rwxr-xr-x
freebcp
18.59
KB
-rwxr-xr-x
freetype-config
3.75
KB
-rwxr-xr-x
ftpasswd
33.94
KB
-rwxr-xr-x
ftpcount
15.67
KB
-rwxr-xr-x
ftpdctl
82.73
KB
-rwxr-xr-x
ftpmail
13.69
KB
-rwxr-xr-x
ftpquota
32.21
KB
-rwxr-xr-x
ftptop
23.52
KB
-rwxr-xr-x
ftpwho
47.84
KB
-rwxr-xr-x
gd2copypal
10.15
KB
-rwxr-xr-x
gd2togif
10.14
KB
-rwxr-xr-x
gd2topng
10.16
KB
-rwxr-xr-x
gdcmpgif
10.15
KB
-rwxr-xr-x
gdparttopng
10.16
KB
-rwxr-xr-x
gdtopng
10.14
KB
-rwxr-xr-x
genbrk
14.84
KB
-rwxr-xr-x
gencfu
10.74
KB
-rwxr-xr-x
gencnval
22.73
KB
-rwxr-xr-x
gendict
22.91
KB
-rwxr-xr-x
gen_php_doc.sh
240
B
-rwxr-xr-x
genrb
161.05
KB
-rwxr-xr-x
GET
14.34
KB
-r-xr-xr-x
gettext
34.53
KB
-rwxr-xr-x
gettextize
42.73
KB
-rwxr-xr-x
gettext.sh
4.52
KB
-rwxr-xr-x
gif2tiff
14.48
KB
-rwxr-xr-x
giftogd2
10.15
KB
-rwxr-xr-x
h2ph
28.55
KB
-rwxr-xr-x
h2xs
59.52
KB
-rwxr-xr-x
HEAD
14.34
KB
-r-xr-xr-x
htcacheclean
30.53
KB
-rwxr-xr-x
htdbm
18.47
KB
-rwxr-xr-x
htdigest
10.27
KB
-rwxr-xr-x
html_template_phplibtool
107
B
-rwxr-xr-x
htpasswd
18.41
KB
-rwxr-xr-x
httpd
696.97
KB
-rwxr-xr-x
httxt2dbm
10.23
KB
-rwxr-xr-x
iconv
26.38
KB
-rwxr-xr-x
icu-config
21.58
KB
-rwxr-xr-x
icuinfo
10.54
KB
-rwxr-xr-x
infocmp
58.65
KB
-rwxr-xr-x
infotocap
66.7
KB
-rwxr-xr-x
innochecksum
3.62
MB
-rwxr-xr-x
instmodsh
4.16
KB
-r-xr-xr-x
jpegtran
42.36
KB
-rwxr-xr-x
json_pp
4.89
KB
-rwxr-xr-x
ldapadd
67.11
KB
-rwxr-xr-x
ldapcompare
55
KB
-rwxr-xr-x
ldapdelete
59.09
KB
-rwxr-xr-x
ldapexop
55.06
KB
-rwxr-xr-x
ldapmodify
67.11
KB
-rwxr-xr-x
ldapmodrdn
55
KB
-rwxr-xr-x
ldappasswd
55.03
KB
-rwxr-xr-x
ldapsearch
79.36
KB
-rwxr-xr-x
ldapurl
18.34
KB
-rwxr-xr-x
ldapwhoami
55.02
KB
-rwxr-xr-x
libmcrypt-config
1.43
KB
-rwxr-xr-x
libnetcfg
15.42
KB
-rwxr-xr-x
libpng16-config
2.27
KB
-rwxr-xr-x
libpng-config
2.27
KB
-rwxr-xr-x
listaction
170.55
KB
-rwxr-xr-x
listaction_d
170.54
KB
-rwxr-xr-x
listfdb
14.17
KB
-rwxr-xr-x
listjpeg
6.13
KB
-rwxr-xr-x
listmp3
10.54
KB
-rwxr-xr-x
listswf
174.55
KB
-rwxr-xr-x
listswf_d
174.54
KB
-rwxr-xr-x
logresolve
10.34
KB
-rwxr-xr-x
lwp-download
8.34
KB
-r-xr-xr-x
lwp-mirror
2.45
KB
-r-xr-xr-x
lwp-request
14.34
KB
-r-xr-xr-x
lwp-rget
14.78
KB
-r-xr-xr-x
makeconv
55.35
KB
-rwxr-xr-x
makefdb
70.41
KB
-rwxr-xr-x
makeswf
23.2
KB
-rwxr-xr-x
mariabackup
22.87
MB
-rwxr-xr-x
mariadb
4.28
MB
-rwxr-xr-x
mariadb-access
109.37
KB
-rwxr-xr-x
mariadb-admin
3.83
MB
-rwxr-xr-x
mariadb-backup
22.87
MB
-rwxr-xr-x
mariadb-binlog
4.05
MB
-rwxr-xr-x
mariadb-check
3.83
MB
-rwxr-xr-x
mariadb-client-test
4.38
MB
-rwxr-xr-x
mariadb_config
10.52
KB
-rwxr-xr-x
mariadb-convert-table-format
4.12
KB
-rwxr-xr-x
mariadbd-multi
26.76
KB
-rwxr-xr-x
mariadbd-safe
30.43
KB
-rwxr-xr-x
mariadbd-safe-helper
3.49
MB
-rwxr-xr-x
mariadb-dump
3.92
MB
-rwxr-xr-x
mariadb-dumpslow
8.05
KB
-rwxr-xr-x
mariadb-find-rows
3.21
KB
-rwxr-xr-x
mariadb-fix-extensions
1.22
KB
-rwxr-xr-x
mariadb-hotcopy
34.14
KB
-rwxr-xr-x
mariadb-import
3.82
MB
-rwxr-xr-x
mariadb-install-db
21.48
KB
-rwxr-xr-x
mariadb-ldb
4.05
MB
-rwxr-xr-x
mariadb-plugin
3.53
MB
-rwxr-xr-x
mariadb-secure-installation
13.38
KB
-rwxr-xr-x
mariadb-setpermission
17.13
KB
-rwxr-xr-x
mariadb-show
3.82
MB
-rwxr-xr-x
mariadb-slap
3.84
MB
-rwxr-xr-x
mariadb-test
4.21
MB
-rwxr-xr-x
mariadb-tzinfo-to-sql
3.53
MB
-rwxr-xr-x
mariadb-upgrade
3.62
MB
-rwxr-xr-x
mariadb-waitpid
3.52
MB
-rwxr-xr-x
mbstream
3.55
MB
-rwxr-xr-x
ming-config
561
B
-rwxr-xr-x
mp2bug
1.16
KB
-r-xr-xr-x
msgattrib
22.39
KB
-rwxr-xr-x
msgcat
18.38
KB
-rwxr-xr-x
msgcmp
22.49
KB
-rwxr-xr-x
msgcomm
18.37
KB
-rwxr-xr-x
msgconv
18.35
KB
-rwxr-xr-x
msgen
18.35
KB
-rwxr-xr-x
msgexec
14.38
KB
-rwxr-xr-x
msgfilter
26.45
KB
-rwxr-xr-x
msgfmt
79.41
KB
-rwxr-xr-x
msggrep
46.73
KB
-rwxr-xr-x
msginit
43.15
KB
-rwxr-xr-x
msgmerge
51.37
KB
-rwxr-xr-x
msgunfmt
30.57
KB
-rwxr-xr-x
msguniq
18.36
KB
-rwxr-xr-x
msql2mysql
1.42
KB
-rwxr-xr-x
myisamchk
4
MB
-rwxr-xr-x
myisam_ftdump
3.88
MB
-rwxr-xr-x
myisamlog
3.86
MB
-rwxr-xr-x
myisampack
3.91
MB
-rwxr-xr-x
my_print_defaults
3.53
MB
-rwxr-xr-x
myrocks_hotbackup
24.46
KB
-rwxr-xr-x
mysql
4.28
MB
-rwxr-xr-x
mysqlaccess
109.37
KB
-rwxr-xr-x
mysqladmin
3.83
MB
-rwxr-xr-x
mysqlbinlog
4.05
MB
-rwxr-xr-x
mysqlcheck
3.83
MB
-rwxr-xr-x
mysql_client_test
4.38
MB
-rwxr-xr-x
mysql_config
4.54
KB
-rwxr-xr-x
mysql_convert_table_format
4.12
KB
-rwxr-xr-x
mysqld_multi
26.76
KB
-rwxr-xr-x
mysqld_safe
30.43
KB
-rwxr-xr-x
mysqld_safe_helper
3.49
MB
-rwxr-xr-x
mysqldump
3.92
MB
-rwxr-xr-x
mysqldumpslow
8.05
KB
-rwxr-xr-x
mysql_find_rows
3.21
KB
-rwxr-xr-x
mysql_fix_extensions
1.22
KB
-rwxr-xr-x
mysqlhotcopy
34.14
KB
-rwxr-xr-x
mysqlimport
3.82
MB
-rwxr-xr-x
mysql_install_db
21.48
KB
-rwxr-xr-x
mysql_ldb
4.05
MB
-rwxr-xr-x
mysql_plugin
3.53
MB
-rwxr-xr-x
mysql_secure_installation
13.38
KB
-rwxr-xr-x
mysql.server
11.93
KB
-rwxr-xr-x
mysql_setpermission
17.13
KB
-rwxr-xr-x
mysqlshow
3.82
MB
-rwxr-xr-x
mysqlslap
3.84
MB
-rwxr-xr-x
mysqltest
4.21
MB
-rwxr-xr-x
mysql_tzinfo_to_sql
3.53
MB
-rwxr-xr-x
mysql_upgrade
3.62
MB
-rwxr-xr-x
mysql_waitpid
3.52
MB
-rwxr-xr-x
mytop
61.06
KB
-rwxr-xr-x
ncurses5-config
5.17
KB
-rwxr-xr-x
ngettext
34.55
KB
-rwxr-xr-x
onig-config
1.35
KB
-rwxr-xr-x
openssl
642.05
KB
-rwxr-xr-x
osql
8.84
KB
-rwxr-xr-x
pal2rgb
14.82
KB
-rwxr-xr-x
pcre-config
2.31
KB
-rwxr-xr-x
pcregrep
36.34
KB
-rwxr-xr-x
pcretest
66.56
KB
-rwxr-xr-x
pear
817
B
-rwxr-xr-x
peardev
838
B
-rwxr-xr-x
pearinfo
538
B
-rwxr-xr-x
pecl
751
B
-rwxr-xr-x
perl
3.3
MB
-rwxr-xr-x
perl5.34.1
3.3
MB
-rwxr-xr-x
perlbug
44.13
KB
-rwxr-xr-x
perldoc
274
B
-rwxr-xr-x
perlivp
10.58
KB
-rwxr-xr-x
perlthanks
44.13
KB
-rwxr-xr-x
perror
3.71
MB
-rwxr-xr-x
phar
14.89
KB
-rwxr-xr-x
phar.phar
14.89
KB
-rwxr-xr-x
php
18.06
MB
-rwxr-xr-x
php-8.2.12
18.06
MB
-rwxr-xr-x
php-cgi
18.06
MB
-rwxr-xr-x
php-cgi-8.2.12
18.06
MB
-rwxr-xr-x
php-config
4.39
KB
-rwxr-xr-x
php-config-8.2.12
4.39
KB
-rwxr-xr-x
phpdbg
18.06
MB
-rwxr-xr-x
phpize
4.43
KB
-rwxr-xr-x
phpize-8.2.12
4.43
KB
-rwxr-xr-x
phpunit
1.9
KB
-rwxr-xr-x
piconv
8.18
KB
-rwxr-xr-x
pkgdata
43.7
KB
-rwxr-xr-x
pl2pm
4.44
KB
-rwxr-xr-x
png2dbl
14.38
KB
-rwxr-xr-x
pngfix
46.48
KB
-rwxr-xr-x
png-fix-itxt
6.11
KB
-rwxr-xr-x
pngtogd
10.14
KB
-rwxr-xr-x
pngtogd2
10.15
KB
-rwxr-xr-x
pod2html
4.05
KB
-rwxr-xr-x
pod2man
14.69
KB
-rwxr-xr-x
pod2text
10.56
KB
-rwxr-xr-x
pod2usage
4.02
KB
-rwxr-xr-x
podchecker
3.58
KB
-rwxr-xr-x
POST
14.34
KB
-r-xr-xr-x
ppm2tiff
14.51
KB
-rwxr-xr-x
prove
13.35
KB
-rwxr-xr-x
prxs
8.96
KB
-rwxr-xr-x
ptar
3.49
KB
-rwxr-xr-x
ptardiff
2.59
KB
-rwxr-xr-x
ptargrep
4.3
KB
-rwxr-xr-x
ras2tiff
10.48
KB
-rwxr-xr-x
raw2adpcm
10.21
KB
-rwxr-xr-x
raw2tiff
18.35
KB
-rwxr-xr-x
rdjpgcom
10.18
KB
-rwxr-xr-x
recode-sr-latin
14.33
KB
-rwxr-xr-x
replace
3.5
MB
-rwxr-xr-x
reset
18.59
KB
-rwxr-xr-x
resolveip
3.52
MB
-rwxr-xr-x
resolve_stack_dump
3.53
MB
-rwxr-xr-x
rgb2ycbcr
14.46
KB
-rwxr-xr-x
rotatelogs
18.41
KB
-rwxr-xr-x
sabcmd
21.13
KB
-rwxr-xr-x
sablot-config
1.11
KB
-rwxr-xr-x
shasum
9.76
KB
-rwxr-xr-x
splain
18.97
KB
-rwxr-xr-x
sqlite
27.8
KB
-rwxr-xr-x
sqlite3
1.74
MB
-rwxr-xr-x
sst_dump
4.04
MB
-rwxr-xr-x
streamzip
5.31
KB
-r-xr-xr-x
suexec
14.36
KB
-rwsr-xr-x
swftocxx
154.57
KB
-rwxr-xr-x
swftoperl
154.57
KB
-rwxr-xr-x
swftophp
154.57
KB
-rwxr-xr-x
swftopython
154.57
KB
-rwxr-xr-x
swftotcl
154.57
KB
-rwxr-xr-x
tabs
14.31
KB
-rwxr-xr-x
tdspool
286.9
KB
-rwxr-xr-x
thumbnail
14.92
KB
-rwxr-xr-x
tic
66.7
KB
-rwxr-xr-x
tiff2bw
14.8
KB
-rwxr-xr-x
tiff2pdf
66.52
KB
-rwxr-xr-x
tiff2ps
55.95
KB
-rwxr-xr-x
tiff2rgba
14.32
KB
-rwxr-xr-x
tiffcmp
18.41
KB
-rwxr-xr-x
tiffcp
43.31
KB
-rwxr-xr-x
tiffcrop
112.88
KB
-rwxr-xr-x
tiffdither
14.48
KB
-rwxr-xr-x
tiffdump
18.52
KB
-rwxr-xr-x
tiffinfo
18.55
KB
-rwxr-xr-x
tiffmedian
22.44
KB
-rwxr-xr-x
tiffset
10.23
KB
-rwxr-xr-x
tiffsplit
14.3
KB
-rwxr-xr-x
toe
14.38
KB
-rwxr-xr-x
tput
14.41
KB
-rwxr-xr-x
tset
18.59
KB
-rwxr-xr-x
tsql
282.99
KB
-rwxr-xr-x
uconv
47.36
KB
-rwxr-xr-x
unzip-mem
14.21
KB
-rwxr-xr-x
unzzip
10.21
KB
-rwxr-xr-x
unzzipcat
10.2
KB
-rwxr-xr-x
unzzipcat-mem
10.17
KB
-rwxr-xr-x
unzzipcat-seeko
10.2
KB
-rwxr-xr-x
unzzipdir
6.16
KB
-rwxr-xr-x
unzzipdir-mem
6.13
KB
-rwxr-xr-x
use-devel-checklib
2.81
KB
-r-xr-xr-x
wcmgr
6.1
KB
-rwxr-xr-x
webalizer
157.1
KB
-rwxr-xr-x
webazolver
157.1
KB
-rwxr-xr-x
webpng
14.28
KB
-rwxr-xr-x
wrjpgcom
10.19
KB
-rwxr-xr-x
wsrep_sst_backup
2.95
KB
-rwxr-xr-x
wsrep_sst_common
54.05
KB
-rw-r--r--
wsrep_sst_mariabackup
51.01
KB
-rwxr-xr-x
wsrep_sst_mysqldump
7.7
KB
-rwxr-xr-x
wsrep_sst_rsync
32.31
KB
-rwxr-xr-x
wsrep_sst_rsync_wan
32.31
KB
-rwxr-xr-x
xgettext
330.1
KB
-rwxr-xr-x
xml2-config
1.69
KB
-rwxr-xr-x
xmlcatalog
14.35
KB
-rwxr-xr-x
xmllint
64.38
KB
-rwxr-xr-x
xmlwf
26.57
KB
-rwxr-xr-x
xslt-config
2.36
KB
-rwxr-xr-x
xsltproc
22.52
KB
-rwxr-xr-x
xsubpp
5.06
KB
-rwxr-xr-x
yacc
45
B
-rwxr-xr-x
zipcmp
19
KB
-rwxr-xr-x
zipdetails
49.95
KB
-r-xr-xr-x
zipmerge
14.88
KB
-rwxr-xr-x
ziptool
27.7
KB
-rwxr-xr-x
zzcat
6.13
KB
-rwxr-xr-x
zzdir
10.16
KB
-rwxr-xr-x
zzxorcat
10.16
KB
-rwxr-xr-x
zzxorcopy
10.17
KB
-rwxr-xr-x
zzxordir
10.19
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : wsrep_sst_rsync_wan
#!/usr/bin/env bash set -ue # Copyright (C) 2017-2022 MariaDB # Copyright (C) 2010-2022 Codership Oy # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to the # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston # MA 02110-1335 USA. # This is a reference script for rsync-based state snapshot transfer RSYNC_REAL_PID=0 # rsync process id STUNNEL_REAL_PID=0 # stunnel process id OS="$(uname)" [ "$OS" = 'Darwin' ] && export -n LD_LIBRARY_PATH . $(dirname "$0")/wsrep_sst_common wsrep_check_datadir wsrep_check_programs rsync cleanup_joiner() { # Since this is invoked just after exit NNN local estatus=$? if [ $estatus -ne 0 ]; then wsrep_log_error "Cleanup after exit with status: $estatus" elif [ -z "${coords:-}" ]; then estatus=32 wsrep_log_error "Failed to get current position" fi local failure=0 [ "$(pwd)" != "$OLD_PWD" ] && cd "$OLD_PWD" wsrep_log_info "Joiner cleanup: rsync PID=$RSYNC_REAL_PID," \ "stunnel PID=$STUNNEL_REAL_PID" if [ -n "$STUNNEL" ]; then if cleanup_pid $STUNNEL_REAL_PID "$STUNNEL_PID" "$STUNNEL_CONF"; then if [ $RSYNC_REAL_PID -eq 0 ]; then if [ -r "$RSYNC_PID" ]; then RSYNC_REAL_PID=$(cat "$RSYNC_PID" 2>/dev/null || :) if [ -z "$RSYNC_REAL_PID" ]; then RSYNC_REAL_PID=0 fi fi fi else wsrep_log_warning "stunnel cleanup failed." failure=1 fi fi if [ $failure -eq 0 ]; then if cleanup_pid $RSYNC_REAL_PID "$RSYNC_PID" "$RSYNC_CONF"; then [ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE" || : [ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE" || : else wsrep_log_warning "rsync cleanup failed." fi fi if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then wsrep_cleanup_progress_file fi [ -f "$SST_PID" ] && rm -f "$SST_PID" || : wsrep_log_info "Joiner cleanup done." exit $estatus } check_pid_and_port() { local pid_file="$1" local pid=$2 local addr="$3" local port="$4" local utils='rsync|stunnel' if ! check_port $pid "$port" "$utils"; then local port_info local busy=0 if [ $lsof_available -ne 0 ]; then port_info=$(lsof -Pnl -i ":$port" 2>/dev/null | \ grep -F '(LISTEN)') echo "$port_info" | \ grep -q -E "[[:space:]](\\*|\\[?::\\]?):$port[[:space:]]" && busy=1 else local filter='([^[:space:]]+[[:space:]]+){4}[^[:space:]]+' if [ $sockstat_available -ne 0 ]; then local opts='-p' if [ "$OS" = 'FreeBSD' ]; then # sockstat on FreeBSD requires the "-s" option # to display the connection state: opts='-sp' # in addition, sockstat produces an additional column: filter='([^[:space:]]+[[:space:]]+){5}[^[:space:]]+' fi port_info=$(sockstat "$opts" "$port" 2>/dev/null | \ grep -E '[[:space:]]LISTEN' | grep -o -E "$filter") else port_info=$(ss -nlpH "( sport = :$port )" 2>/dev/null | \ grep -F 'users:(' | grep -o -E "$filter") fi echo "$port_info" | \ grep -q -E "[[:space:]](\\*|\\[?::\\]?):$port\$" && busy=1 fi if [ $busy -eq 0 ]; then if ! echo "$port_info" | grep -qw -F "[$addr]:$port" && \ ! echo "$port_info" | grep -qw -F -- "$addr:$port" then if ! ps -p $pid >/dev/null 2>&1; then wsrep_log_error \ "rsync or stunnel daemon (PID: $pid)" \ "terminated unexpectedly." exit 16 # EBUSY fi return 1 fi fi if ! check_port $pid "$port" "$utils"; then wsrep_log_error "rsync or stunnel daemon port '$port'" \ "has been taken by another program" exit 16 # EBUSY fi fi check_pid "$pid_file" && [ $CHECK_PID -eq $pid ] } STUNNEL_CONF="$WSREP_SST_OPT_DATA/stunnel.conf" STUNNEL_PID="$WSREP_SST_OPT_DATA/stunnel.pid" MAGIC_FILE="$WSREP_SST_OPT_DATA/rsync_sst_complete" get_binlog if [ -n "$WSREP_SST_OPT_BINLOG" ]; then binlog_dir=$(dirname "$WSREP_SST_OPT_BINLOG") binlog_base=$(basename "$WSREP_SST_OPT_BINLOG") fi OLD_PWD="$(pwd)" DATA="$WSREP_SST_OPT_DATA" if [ -n "$DATA" -a "$DATA" != '.' ]; then [ ! -d "$DATA" ] && mkdir -p "$DATA" cd "$DATA" fi DATA_DIR="$(pwd)" cd "$OLD_PWD" BINLOG_TAR_FILE="$DATA_DIR/wsrep_sst_binlog.tar" ar_log_dir="$DATA_DIR" ib_log_dir="$DATA_DIR" ib_home_dir="$DATA_DIR" ib_undo_dir="$DATA_DIR" # if no command line argument and INNODB_LOG_GROUP_HOME is not set, # then try to get it from the my.cnf: if [ -z "$INNODB_LOG_GROUP_HOME" ]; then INNODB_LOG_GROUP_HOME=$(parse_cnf '--mysqld' 'innodb-log-group-home-dir') INNODB_LOG_GROUP_HOME=$(trim_dir "$INNODB_LOG_GROUP_HOME") fi if [ -n "$INNODB_LOG_GROUP_HOME" -a "$INNODB_LOG_GROUP_HOME" != '.' -a \ "$INNODB_LOG_GROUP_HOME" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_LOG_GROUP_HOME" ] && mkdir -p "$INNODB_LOG_GROUP_HOME" cd "$INNODB_LOG_GROUP_HOME" ib_log_dir="$(pwd)" cd "$OLD_PWD" fi # if no command line argument and INNODB_DATA_HOME_DIR environment # variable is not set, try to get it from the my.cnf: if [ -z "$INNODB_DATA_HOME_DIR" ]; then INNODB_DATA_HOME_DIR=$(parse_cnf '--mysqld' 'innodb-data-home-dir') INNODB_DATA_HOME_DIR=$(trim_dir "$INNODB_DATA_HOME_DIR") fi if [ -n "$INNODB_DATA_HOME_DIR" -a "$INNODB_DATA_HOME_DIR" != '.' -a \ "$INNODB_DATA_HOME_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_DATA_HOME_DIR" ] && mkdir -p "$INNODB_DATA_HOME_DIR" cd "$INNODB_DATA_HOME_DIR" ib_home_dir="$(pwd)" cd "$OLD_PWD" fi # if no command line argument and INNODB_UNDO_DIR is not set, # then try to get it from the my.cnf: if [ -z "$INNODB_UNDO_DIR" ]; then INNODB_UNDO_DIR=$(parse_cnf '--mysqld' 'innodb-undo-directory') INNODB_UNDO_DIR=$(trim_dir "$INNODB_UNDO_DIR") fi if [ -n "$INNODB_UNDO_DIR" -a "$INNODB_UNDO_DIR" != '.' -a \ "$INNODB_UNDO_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_UNDO_DIR" ] && mkdir -p "$INNODB_UNDO_DIR" cd "$INNODB_UNDO_DIR" ib_undo_dir="$(pwd)" cd "$OLD_PWD" fi # if no command line argument then try to get it from the my.cnf: if [ -z "$ARIA_LOG_DIR" ]; then ARIA_LOG_DIR=$(parse_cnf '--mysqld' 'aria-log-dir-path') ARIA_LOG_DIR=$(trim_dir "$ARIA_LOG_DIR") fi if [ -n "$ARIA_LOG_DIR" -a "$ARIA_LOG_DIR" != '.' -a \ "$ARIA_LOG_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$ARIA_LOG_DIR" ] && mkdir -p "$ARIA_LOG_DIR" cd "$ARIA_LOG_DIR" ar_log_dir="$(pwd)" cd "$OLD_PWD" fi encgroups='--mysqld|sst' check_server_ssl_config SSTKEY="$tkey" SSTCERT="$tpem" SSTCA="$tcert" SSTCAP="$tcap" SSLMODE=$(parse_cnf "$encgroups" 'ssl-mode' | tr '[[:lower:]]' '[[:upper:]]') if [ -z "$SSLMODE" ]; then # Implicit verification if CA is set and the SSL mode # is not specified by user: if [ -n "$SSTCA$SSTCAP" ]; then STUNNEL_BIN=$(commandex 'stunnel') if [ -n "$STUNNEL_BIN" ]; then SSLMODE='VERIFY_CA' fi # Require SSL by default if SSL key and cert are present: elif [ -n "$SSTKEY" -a -n "$SSTCERT" ]; then SSLMODE='REQUIRED' fi else case "$SSLMODE" in 'VERIFY_IDENTITY'|'VERIFY_CA'|'REQUIRED'|'DISABLED') ;; *) wsrep_log_error "Unrecognized ssl-mode option: '$SSLMODE'" exit 22 # EINVAL ;; esac fi if [ -n "$SSTKEY" -a -n "$SSTCERT" ]; then verify_cert_matches_key "$SSTCERT" "$SSTKEY" fi CAFILE_OPT="" CAPATH_OPT="" if [ -n "$SSTCA$SSTCAP" ]; then if [ -n "$SSTCA" ]; then CAFILE_OPT="CAfile = $SSTCA" fi if [ -n "$SSTCAP" ]; then CAPATH_OPT="CApath = $SSTCAP" fi if [ -n "$SSTCERT" ]; then verify_ca_matches_cert "$SSTCERT" "$SSTCA" "$SSTCAP" fi fi VERIFY_OPT="" CHECK_OPT="" CHECK_OPT_LOCAL="" if [ "${SSLMODE#VERIFY}" != "$SSLMODE" ]; then if [ "$SSLMODE" = 'VERIFY_IDENTITY' ]; then VERIFY_OPT='verifyPeer = yes' else VERIFY_OPT='verifyChain = yes' fi if [ -z "$SSTCA$SSTCAP" ]; then wsrep_log_error "Can't have ssl-mode='$SSLMODE' without CA file or path" exit 22 # EINVAL fi if [ -n "$WSREP_SST_OPT_REMOTE_USER" ]; then CHECK_OPT="checkHost = $WSREP_SST_OPT_REMOTE_USER" elif [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then # check if the address is an ip-address (v4 or v6): if echo "$WSREP_SST_OPT_HOST_UNESCAPED" | \ grep -q -E '^([0-9]+(\.[0-9]+){3}|[0-9a-fA-F]*(\:[0-9a-fA-F]*)+)$' then CHECK_OPT="checkIP = $WSREP_SST_OPT_HOST_UNESCAPED" else CHECK_OPT="checkHost = $WSREP_SST_OPT_HOST" fi if is_local_ip "$WSREP_SST_OPT_HOST_UNESCAPED"; then CHECK_OPT_LOCAL='checkHost = localhost' fi fi fi STUNNEL="" if [ -n "$SSLMODE" -a "$SSLMODE" != 'DISABLED' ]; then if [ -z "${STUNNEL_BIN+x}" ]; then STUNNEL_BIN=$(commandex 'stunnel') fi if [ -n "$STUNNEL_BIN" ]; then wsrep_log_info "Using stunnel for SSL encryption: CA: '$SSTCA'," \ "CAPATH='$SSTCAP', ssl-mode='$SSLMODE'" STUNNEL="$STUNNEL_BIN $STUNNEL_CONF" fi fi readonly SECRET_TAG='secret' readonly BYPASS_TAG='bypass' SST_PID="$WSREP_SST_OPT_DATA/wsrep_sst.pid" # give some time for previous SST to complete: check_round=0 while check_pid "$SST_PID" 0; do wsrep_log_info "Previous SST is not completed, waiting for it to exit" check_round=$(( check_round + 1 )) if [ $check_round -eq 20 ]; then wsrep_log_error "previous SST script still running." exit 114 # EALREADY fi sleep 1 done trap simple_cleanup EXIT echo $$ > "$SST_PID" # give some time for stunnel from the previous SST to complete: check_round=0 while check_pid "$STUNNEL_PID" 1 "$STUNNEL_CONF"; do wsrep_log_info "Lingering stunnel daemon found at startup," \ "waiting for it to exit" check_round=$(( check_round + 1 )) if [ $check_round -eq 10 ]; then wsrep_log_error "stunnel daemon still running." exit 114 # EALREADY fi sleep 1 done MODULE="${WSREP_SST_OPT_MODULE:-rsync_sst}" RSYNC_PID="$WSREP_SST_OPT_DATA/$MODULE.pid" RSYNC_CONF="$WSREP_SST_OPT_DATA/$MODULE.conf" # give some time for rsync from the previous SST to complete: check_round=0 while check_pid "$RSYNC_PID" 1 "$RSYNC_CONF"; do wsrep_log_info "Lingering rsync daemon found at startup," \ "waiting for it to exit" check_round=$(( check_round + 1 )) if [ $check_round -eq 10 ]; then wsrep_log_error "rsync daemon still running." exit 114 # EALREADY fi sleep 1 done [ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE" [ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE" RC=0 if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then if [ -n "$STUNNEL" ]; then cat << EOF > "$STUNNEL_CONF" key = $SSTKEY cert = $SSTCERT ${CAFILE_OPT} ${CAPATH_OPT} foreground = yes pid = $STUNNEL_PID debug = warning client = yes connect = $WSREP_SST_OPT_HOST_UNESCAPED:$WSREP_SST_OPT_PORT TIMEOUTclose = 0 ${VERIFY_OPT} ${CHECK_OPT} ${CHECK_OPT_LOCAL} EOF fi if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then FLUSHED="$WSREP_SST_OPT_DATA/tables_flushed" ERROR="$WSREP_SST_OPT_DATA/sst_error" [ -f "$FLUSHED" ] && rm -f "$FLUSHED" [ -f "$ERROR" ] && rm -f "$ERROR" echo 'flush tables' # Wait for : # (a) Tables to be flushed, AND # (b) Cluster state ID & wsrep_gtid_domain_id to be written to the file, OR # (c) ERROR file, in case flush tables operation failed. while [ ! -r "$FLUSHED" ] || \ ! grep -q -F ':' -- "$FLUSHED" do # Check whether ERROR file exists. if [ -f "$ERROR" ]; then # Flush tables operation failed. rm "$ERROR" exit 255 fi sleep 0.2 done STATE=$(cat "$FLUSHED") rm "$FLUSHED" sync wsrep_log_info "Tables flushed" if [ -n "$WSREP_SST_OPT_BINLOG" ]; then # Change the directory to binlog base (if possible): cd "$DATA" # Let's check the existence of the file with the index: if [ -f "$WSREP_SST_OPT_BINLOG_INDEX" ]; then # Let's read the binlog index: max_binlogs=$(parse_cnf "$encgroups" 'sst-max-binlogs' 1) if [ $max_binlogs -ge 0 ]; then binlog_files="" if [ $max_binlogs -gt 0 ]; then binlog_files=$(tail -n $max_binlogs \ "$WSREP_SST_OPT_BINLOG_INDEX") fi else binlog_files=$(cat "$WSREP_SST_OPT_BINLOG_INDEX") fi if [ -n "$binlog_files" ]; then # Preparing binlog files for transfer: wsrep_log_info "Preparing binlog files for transfer:" tar_type=0 if tar --help | grep -qw -F -- '--transform'; then tar_type=1 elif tar --version | grep -qw -E '^bsdtar'; then tar_type=2 fi if [ $tar_type -eq 2 ]; then if [ -n "$BASH_VERSION" ]; then printf '%s' "$binlog_files" >&2 else echo "$binlog_files" >&2 fi fi if [ $tar_type -ne 0 ]; then # Preparing list of the binlog file names: echo "$binlog_files" | { binlogs="" while read bin_file || [ -n "$bin_file" ]; do [ ! -f "$bin_file" ] && continue if [ -n "$BASH_VERSION" ]; then first="${bin_file:0:1}" else first=$(echo "$bin_file" | cut -c1) fi if [ "$first" = '-' -o "$first" = '@' ]; then bin_file="./$bin_file" fi binlogs="$binlogs${binlogs:+ }'$bin_file'" done if [ -n "$binlogs" ]; then if [ $tar_type -eq 1 ]; then tar_options="--transform='s/^.*\///g'" else # bsdtar handles backslash incorrectly: tar_options="-s '?^.*/??g'" fi eval tar -P $tar_options \ -cvf "'$BINLOG_TAR_FILE'" $binlogs >&2 fi } else tar_options='-cvf' echo "$binlog_files" | \ while read bin_file || [ -n "$bin_file" ]; do [ ! -f "$bin_file" ] && continue bin_dir=$(dirname "$bin_file") bin_base=$(basename "$bin_file") if [ -n "$BASH_VERSION" ]; then first="${bin_base:0:1}" else first=$(echo "$bin_base" | cut -c1) fi if [ "$first" = '-' -o "$first" = '@' ]; then bin_base="./$bin_base" fi if [ -n "$bin_dir" -a "$bin_dir" != '.' -a \ "$bin_dir" != "$DATA_DIR" ] then tar $tar_options "$BINLOG_TAR_FILE" \ -C "$bin_dir" "$bin_base" >&2 else tar $tar_options "$BINLOG_TAR_FILE" \ "$bin_base" >&2 fi tar_options='-rvf' done fi fi fi cd "$OLD_PWD" fi # Use deltaxfer only for WAN: WHOLE_FILE_OPT="" if [ "${WSREP_METHOD%_wan}" = "$WSREP_METHOD" ]; then WHOLE_FILE_OPT='--whole-file' fi # Old filter - include everything except selected # FILTER=(--exclude '*.err' --exclude '*.pid' --exclude '*.sock' \ # --exclude '*.conf' --exclude core --exclude 'galera.*' \ # --exclude grastate.txt --exclude '*.pem' \ # --exclude '*.[0-9][0-9][0-9][0-9][0-9][0-9]' --exclude '*.index') # New filter - exclude everything except dirs (schemas) and innodb files FILTER="-f '- /lost+found' -f '- /.zfs' -f '- /.fseventsd' -f '- /.Trashes' -f '- /.pid' -f '- /.conf' -f '- /.snapshot/' -f '+ /wsrep_sst_binlog.tar' -f '- $ib_home_dir/ib_lru_dump' -f '- $ib_home_dir/ibdata*' -f '- $ib_undo_dir/undo*' -f '- $ib_log_dir/ib_logfile[0-9]*' -f '- $ar_log_dir/aria_log_control' -f '- $ar_log_dir/aria_log.*' -f '+ /*/' -f '- /*'" # first, the normal directories, so that we can detect # incompatible protocol: eval rsync ${STUNNEL:+"--rsh='$STUNNEL'"} \ --owner --group --perms --links --specials \ --ignore-times --inplace --dirs --delete --quiet \ $WHOLE_FILE_OPT $FILTER "'$WSREP_SST_OPT_DATA/'" \ "'rsync://$WSREP_SST_OPT_ADDR'" >&2 || RC=$? if [ $RC -ne 0 ]; then wsrep_log_error "rsync returned code $RC:" case $RC in 12) RC=71 # EPROTO wsrep_log_error \ "rsync server on the other end has incompatible" \ "protocol. Make sure you have the same version of" \ "rsync on all nodes." ;; 22) RC=12 # ENOMEM ;; *) RC=255 # unknown error ;; esac exit $RC fi wsrep_log_info "Transfer of normal directories done" # Transfer InnoDB data files rsync ${STUNNEL:+--rsh="$STUNNEL"} \ --owner --group --perms --links --specials \ --ignore-times --inplace --dirs --delete --quiet \ $WHOLE_FILE_OPT -f '+ /ibdata*' -f '+ /ib_lru_dump' \ -f '- **' "$ib_home_dir/" \ "rsync://$WSREP_SST_OPT_ADDR-data_dir" >&2 || RC=$? if [ $RC -ne 0 ]; then wsrep_log_error "rsync innodb_data_home_dir returned code $RC:" exit 255 # unknown error fi wsrep_log_info "Transfer of InnoDB data files done" # second, we transfer InnoDB log files rsync ${STUNNEL:+--rsh="$STUNNEL"} \ --owner --group --perms --links --specials \ --ignore-times --inplace --dirs --delete --quiet \ $WHOLE_FILE_OPT -f '+ /ib_logfile[0-9]*' \ -f '- **' "$ib_log_dir/" \ "rsync://$WSREP_SST_OPT_ADDR-log_dir" >&2 || RC=$? if [ $RC -ne 0 ]; then wsrep_log_error "rsync innodb_log_group_home_dir returned code $RC:" exit 255 # unknown error fi wsrep_log_info "Transfer of InnoDB log files done" # third, we transfer InnoDB undo logs rsync ${STUNNEL:+--rsh="$STUNNEL"} \ --owner --group --perms --links --specials \ --ignore-times --inplace --dirs --delete --quiet \ $WHOLE_FILE_OPT -f '+ /undo*' \ -f '- **' "$ib_undo_dir/" \ "rsync://$WSREP_SST_OPT_ADDR-undo_dir" >&2 || RC=$? if [ $RC -ne 0 ]; then wsrep_log_error "rsync innodb_undo_dir returned code $RC:" exit 255 # unknown error fi wsrep_log_info "Transfer of InnoDB undo logs done" # fourth, we transfer Aria logs rsync ${STUNNEL:+--rsh="$STUNNEL"} \ --owner --group --perms --links --specials \ --ignore-times --inplace --dirs --delete --quiet \ $WHOLE_FILE_OPT -f '+ /aria_log_control' -f '+ /aria_log.*' \ -f '- **' "$ar_log_dir/" \ "rsync://$WSREP_SST_OPT_ADDR-aria_log" >&2 || RC=$? if [ $RC -ne 0 ]; then wsrep_log_error "rsync aria_log_dir_path returned code $RC:" exit 255 # unknown error fi wsrep_log_info "Transfer of Aria logs done" # then, we parallelize the transfer of database directories, # use '.' so that path concatenation works: backup_threads=$(parse_cnf '--mysqld|sst' 'backup-threads') if [ -z "$backup_threads" ]; then get_proc backup_threads=$nproc fi cd "$DATA" findopt='-L' [ "$OS" = 'FreeBSD' ] && findopt="$findopt -E" find $findopt . -maxdepth 1 -mindepth 1 -type d -not -name 'lost+found' \ -not -name '.zfs' -not -name .snapshot -print0 \ | xargs -I{} -0 -P $backup_threads \ rsync ${STUNNEL:+--rsh="$STUNNEL"} \ --owner --group --perms --links --specials --ignore-times \ --inplace --recursive --delete --quiet $WHOLE_FILE_OPT \ -f '- $ib_home_dir/ib_lru_dump' \ -f '- $ib_home_dir/ibdata*' \ -f '- $ib_undo_dir/undo*' \ -f '- $ib_log_dir/ib_logfile[0-9]*' \ -f '- $ar_log_dir/aria_log_control' \ -f '- $ar_log_dir/aria_log.*' \ "$WSREP_SST_OPT_DATA/{}/" \ "rsync://$WSREP_SST_OPT_ADDR/{}" >&2 || RC=$? cd "$OLD_PWD" if [ $RC -ne 0 ]; then wsrep_log_error "find/rsync returned code $RC:" exit 255 # unknown error fi wsrep_log_info "Transfer of data done" [ -f "$BINLOG_TAR_FILE" ] && rm "$BINLOG_TAR_FILE" else # BYPASS wsrep_log_info "Bypassing state dump." # Store donor's wsrep GTID (state ID) and wsrep_gtid_domain_id # (separated by a space). STATE="$WSREP_SST_OPT_GTID $WSREP_SST_OPT_GTID_DOMAIN_ID" fi wsrep_log_info "Sending continue to donor" echo 'continue' # now server can resume updating data echo "$STATE" > "$MAGIC_FILE" if [ -n "$WSREP_SST_OPT_REMOTE_PSWD" ]; then # Let joiner know that we know its secret echo "$SECRET_TAG $WSREP_SST_OPT_REMOTE_PSWD" >> "$MAGIC_FILE" fi if [ $WSREP_SST_OPT_BYPASS -ne 0 ]; then echo "$BYPASS_TAG" >> "$MAGIC_FILE" fi rsync ${STUNNEL:+--rsh="$STUNNEL"} \ --archive --quiet --checksum "$MAGIC_FILE" \ "rsync://$WSREP_SST_OPT_ADDR" >&2 || RC=$? rm "$MAGIC_FILE" if [ $RC -ne 0 ]; then wsrep_log_error "rsync $MAGIC_FILE returned code $RC:" exit 255 # unknown error fi echo "done $STATE" if [ -n "$STUNNEL" ]; then rm "$STUNNEL_CONF" [ -f "$STUNNEL_PID" ] && rm "$STUNNEL_PID" fi else # joiner check_sockets_utils ADDR="$WSREP_SST_OPT_HOST" RSYNC_PORT="$WSREP_SST_OPT_PORT" RSYNC_ADDR="$WSREP_SST_OPT_HOST" RSYNC_ADDR_UNESCAPED="$WSREP_SST_OPT_HOST_UNESCAPED" trap cleanup_joiner EXIT touch "$SST_PROGRESS_FILE" if [ -n "${MYSQL_TMP_DIR:-}" ]; then SILENT="log file = $MYSQL_TMP_DIR/rsyncd.log" else SILENT="" fi cat << EOF > "$RSYNC_CONF" pid file = $RSYNC_PID use chroot = no read only = no timeout = 300 $SILENT [$MODULE] path = $WSREP_SST_OPT_DATA exclude = .zfs [$MODULE-log_dir] path = $ib_log_dir [$MODULE-data_dir] path = $ib_home_dir [$MODULE-undo_dir] path = $ib_undo_dir [$MODULE-aria_log] path = $ar_log_dir EOF # If the IP is local, listen only on it: if is_local_ip "$RSYNC_ADDR_UNESCAPED"; then RSYNC_EXTRA_ARGS="--address $RSYNC_ADDR_UNESCAPED" STUNNEL_ACCEPT="$RSYNC_ADDR_UNESCAPED:$RSYNC_PORT" else # Not local, possibly a NAT, listen on all interfaces: RSYNC_EXTRA_ARGS="" STUNNEL_ACCEPT="$RSYNC_PORT" # Overwrite address with all: RSYNC_ADDR='*' fi if [ -z "$STUNNEL" ]; then rsync --daemon --no-detach --port "$RSYNC_PORT" \ --config "$RSYNC_CONF" $RSYNC_EXTRA_ARGS & RSYNC_REAL_PID=$! TRANSFER_REAL_PID=$RSYNC_REAL_PID TRANSFER_PID="$RSYNC_PID" else # Let's check if the path to the config file contains a space? RSYNC_BIN=$(commandex 'rsync') if [ "${RSYNC_CONF#* }" = "$RSYNC_CONF" ]; then cat << EOF > "$STUNNEL_CONF" key = $SSTKEY cert = $SSTCERT ${CAFILE_OPT} ${CAPATH_OPT} foreground = yes pid = $STUNNEL_PID debug = warning client = no ${VERIFY_OPT} ${CHECK_OPT} ${CHECK_OPT_LOCAL} [rsync] accept = $STUNNEL_ACCEPT exec = $RSYNC_BIN execargs = rsync --server --daemon --config=$RSYNC_CONF . EOF else # The path contains a space, so we will run it via # shell with "eval" command: export RSYNC_CMD="eval '$RSYNC_BIN' --server --daemon --config='$RSYNC_CONF' ." cat << EOF > "$STUNNEL_CONF" key = $SSTKEY cert = $SSTCERT ${CAFILE_OPT} ${CAPATH_OPT} foreground = yes pid = $STUNNEL_PID debug = warning client = no ${VERIFY_OPT} ${CHECK_OPT} ${CHECK_OPT_LOCAL} [rsync] accept = $STUNNEL_ACCEPT exec = $SHELL execargs = $SHELL -c \$RSYNC_CMD EOF fi stunnel "$STUNNEL_CONF" & STUNNEL_REAL_PID=$! TRANSFER_REAL_PID=$STUNNEL_REAL_PID TRANSFER_PID="$STUNNEL_PID" fi if [ "${SSLMODE#VERIFY}" != "$SSLMODE" ]; then # backward-incompatible behavior: CN="" if [ -n "$SSTCERT" ]; then # find out my Common Name get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_error \ 'openssl not found but it is required for authentication' exit 42 fi CN=$("$OPENSSL_BINARY" x509 -noout -subject -in "$SSTCERT" | \ tr ',' '\n' | grep -F 'CN =' | cut -d '=' -f2 | sed s/^\ // | \ sed s/\ %//) fi MY_SECRET="$(wsrep_gen_secret)" # Add authentication data to address ADDR="$CN:$MY_SECRET@$WSREP_SST_OPT_HOST" else MY_SECRET="" # for check down in recv_joiner() fi until check_pid_and_port "$TRANSFER_PID" $TRANSFER_REAL_PID \ "$RSYNC_ADDR_UNESCAPED" "$RSYNC_PORT" do sleep 0.2 done echo "ready $ADDR:$RSYNC_PORT/$MODULE" MYSQLD_PID="$WSREP_SST_OPT_PARENT" # wait for SST to complete by monitoring magic file while [ ! -r "$MAGIC_FILE" ] && check_pid "$TRANSFER_PID" && \ ps -p $MYSQLD_PID >/dev/null 2>&1 do sleep 1 done if ! ps -p $MYSQLD_PID >/dev/null 2>&1; then wsrep_log_error \ "Parent mysqld process (PID: $MYSQLD_PID) terminated unexpectedly." kill -- -$MYSQLD_PID sleep 1 exit 32 fi if [ ! -r "$MAGIC_FILE" ]; then # This message should cause joiner to abort: wsrep_log_info "rsync process ended without creating" \ "magic file ($MAGIC_FILE)" exit 32 fi if [ -n "$MY_SECRET" ]; then # Check donor supplied secret: SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]" "$MAGIC_FILE" || :) SECRET=$(trim_string "${SECRET#$SECRET_TAG}") if [ "$SECRET" != "$MY_SECRET" ]; then wsrep_log_error "Donor does not know my secret!" wsrep_log_info "Donor: '$SECRET', my: '$MY_SECRET'" exit 32 fi fi if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then if grep -m1 -qE "^$BYPASS_TAG([[:space:]]+.*)?\$" "$MAGIC_FILE"; then readonly WSREP_SST_OPT_BYPASS=1 readonly WSREP_TRANSFER_TYPE='IST' fi fi binlog_tar_present=0 if [ -f "$BINLOG_TAR_FILE" ]; then binlog_tar_present=1 if [ $WSREP_SST_OPT_BYPASS -ne 0 ]; then wsrep_log_warning "tar with binlogs transferred in the IST mode" fi fi if [ $WSREP_SST_OPT_BYPASS -eq 0 -a -n "$WSREP_SST_OPT_BINLOG" ]; then # If it is SST (not an IST) or tar with binlogs is present # among the transferred files, then we need to remove the # old binlogs: cd "$DATA" # Clean up the old binlog files and index: binlog_index="$WSREP_SST_OPT_BINLOG_INDEX" if [ -f "$binlog_index" ]; then while read bin_file || [ -n "$bin_file" ]; do rm -f "$bin_file" || : done < "$binlog_index" rm "$binlog_index" fi binlog_cd=0 # Change the directory to binlog base (if possible): if [ -n "$binlog_dir" -a "$binlog_dir" != '.' -a \ "$binlog_dir" != "$DATA_DIR" -a -d "$binlog_dir" ] then binlog_cd=1 cd "$binlog_dir" fi # Clean up unindexed binlog files: rm -f "$binlog_base".[0-9]* || : [ $binlog_cd -ne 0 ] && cd "$DATA_DIR" if [ $binlog_tar_present -ne 0 ]; then # Create a temporary file: tmpdir=$(parse_cnf '--mysqld|sst' 'tmpdir') if [ -z "$tmpdir" ]; then tmpfile="$(mktemp)" elif [ "$OS" = 'Linux' ]; then tmpfile=$(mktemp "--tmpdir=$tmpdir") else tmpfile=$(TMPDIR="$tmpdir"; mktemp) fi index_dir=$(dirname "$binlog_index"); if [ -n "$index_dir" -a "$index_dir" != '.' -a \ "$index_dir" != "$DATA_DIR" ] then [ ! -d "$index_dir" ] && mkdir -p "$index_dir" fi binlog_cd=0 if [ -n "$binlog_dir" -a "$binlog_dir" != '.' -a \ "$binlog_dir" != "$DATA_DIR" ] then [ ! -d "$binlog_dir" ] && mkdir -p "$binlog_dir" binlog_cd=1 cd "$binlog_dir" fi # Extracting binlog files: wsrep_log_info "Extracting binlog files:" if tar --version | grep -qw -E '^bsdtar'; then tar -tf "$BINLOG_TAR_FILE" > "$tmpfile" && \ tar -xvf "$BINLOG_TAR_FILE" > /dev/null || RC=$? else tar -xvf "$BINLOG_TAR_FILE" > "$tmpfile" && \ cat "$tmpfile" >&2 || RC=$? fi if [ $RC -ne 0 ]; then wsrep_log_error "Error unpacking tar file with binlog files" rm "$tmpfile" exit 32 fi # Rebuild binlog index: [ $binlog_cd -ne 0 ] && cd "$DATA_DIR" while read bin_file || [ -n "$bin_file" ]; do echo "$binlog_dir${binlog_dir:+/}$bin_file" >> "$binlog_index" done < "$tmpfile" rm "$tmpfile" cd "$OLD_PWD" fi fi # Remove special tags from the magic file, and from the output: coords=$(head -n1 "$MAGIC_FILE") wsrep_log_info "Galera co-ords from recovery: $coords" echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id fi wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE completed on $WSREP_SST_OPT_ROLE" exit 0
Close