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
a8a27e65
Commit
a8a27e65
authored
Jan 14, 2019
by
Vladislav Vaintroub
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-18212 mariabackup: Make output format uniform whenever possible
parent
61b60007
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
407 additions
and
476 deletions
+407
-476
extra/mariabackup/CMakeLists.txt
extra/mariabackup/CMakeLists.txt
+13
-13
extra/mariabackup/backup_copy.cc
extra/mariabackup/backup_copy.cc
+58
-69
extra/mariabackup/backup_mysql.cc
extra/mariabackup/backup_mysql.cc
+52
-56
extra/mariabackup/changed_page_bitmap.cc
extra/mariabackup/changed_page_bitmap.cc
+13
-13
extra/mariabackup/common.h
extra/mariabackup/common.h
+37
-31
extra/mariabackup/datasink.cc
extra/mariabackup/datasink.cc
+2
-2
extra/mariabackup/ds_archive.cc
extra/mariabackup/ds_archive.cc
+0
-0
extra/mariabackup/ds_buffer.cc
extra/mariabackup/ds_buffer.cc
+1
-1
extra/mariabackup/ds_compress.cc
extra/mariabackup/ds_compress.cc
+4
-4
extra/mariabackup/ds_stdout.cc
extra/mariabackup/ds_stdout.cc
+1
-1
extra/mariabackup/ds_tmpfile.cc
extra/mariabackup/ds_tmpfile.cc
+7
-7
extra/mariabackup/ds_xbstream.cc
extra/mariabackup/ds_xbstream.cc
+6
-6
extra/mariabackup/encryption_plugin.cc
extra/mariabackup/encryption_plugin.cc
+4
-4
extra/mariabackup/fil_cur.cc
extra/mariabackup/fil_cur.cc
+10
-22
extra/mariabackup/innobackupex.cc
extra/mariabackup/innobackupex.cc
+1
-1
extra/mariabackup/write_filt.cc
extra/mariabackup/write_filt.cc
+5
-6
extra/mariabackup/xbstream.cc
extra/mariabackup/xbstream.cc
+18
-19
extra/mariabackup/xbstream.h
extra/mariabackup/xbstream.h
+1
-1
extra/mariabackup/xbstream_read.cc
extra/mariabackup/xbstream_read.cc
+12
-12
extra/mariabackup/xbstream_write.cc
extra/mariabackup/xbstream_write.cc
+3
-3
extra/mariabackup/xtrabackup.cc
extra/mariabackup/xtrabackup.cc
+154
-196
extra/mariabackup/xtrabackup.h
extra/mariabackup/xtrabackup.h
+5
-9
No files found.
extra/mariabackup/CMakeLists.txt
View file @
a8a27e65
...
...
@@ -57,19 +57,19 @@ MYSQL_ADD_EXECUTABLE(mariabackup
xtrabackup.cc
innobackupex.cc
changed_page_bitmap.cc
datasink.c
ds_buffer.c
ds_compress.c
datasink.c
c
ds_buffer.c
c
ds_compress.c
c
ds_local.cc
ds_stdout.c
ds_tmpfile.c
ds_xbstream.c
ds_stdout.c
c
ds_tmpfile.c
c
ds_xbstream.c
c
fil_cur.cc
quicklz/quicklz.c
read_filt.cc
write_filt.cc
wsrep.cc
xbstream_write.c
xbstream_write.c
c
backup_mysql.cc
backup_copy.cc
encryption_plugin.cc
...
...
@@ -96,13 +96,13 @@ ENDIF()
# xbstream binary
########################################################################
MYSQL_ADD_EXECUTABLE
(
mbstream
ds_buffer.c
ds_buffer.c
c
ds_local.cc
ds_stdout.c
datasink.c
xbstream.c
xbstream_read.c
xbstream_write.c
ds_stdout.c
c
datasink.c
c
xbstream.c
c
xbstream_read.c
c
xbstream_write.c
c
COMPONENT backup
)
...
...
extra/mariabackup/backup_copy.cc
View file @
a8a27e65
...
...
@@ -237,7 +237,7 @@ datadir_iter_next_database(datadir_iter_t *it)
if
(
os_file_closedir
(
it
->
dbdir
)
!=
0
)
{
msg
(
"Warning: could not"
" close database directory %s
\n
"
,
it
->
dbpath
);
" close database directory %s"
,
it
->
dbpath
);
it
->
err
=
DB_ERROR
;
...
...
@@ -278,7 +278,7 @@ datadir_iter_next_database(datadir_iter_t *it)
}
if
(
check_if_skip_database_by_path
(
it
->
dbpath
))
{
msg
(
"Skipping db: %s
\n
"
,
it
->
dbpath
);
msg
(
"Skipping db: %s"
,
it
->
dbpath
);
continue
;
}
...
...
@@ -522,19 +522,15 @@ datafile_open(const char *file, datafile_cur_t *cursor, uint thread_n)
/* The following call prints an error message */
os_file_get_last_error
(
TRUE
);
msg
(
"[%02u] error: cannot open "
"file %s
\n
"
,
thread_n
,
cursor
->
abs_path
);
msg
(
thread_n
,
"error: cannot open "
"file %s"
,
cursor
->
abs_path
);
return
(
false
);
}
if
(
!
my_stat
(
cursor
->
abs_path
,
&
cursor
->
statinfo
,
0
))
{
msg
(
"[%02u] error: cannot stat %s
\n
"
,
thread_n
,
cursor
->
abs_path
);
msg
(
thread_n
,
"error: cannot stat %s"
,
cursor
->
abs_path
);
datafile_close
(
cursor
);
return
(
false
);
}
...
...
@@ -728,9 +724,8 @@ directory_exists(const char *dir, bool create)
if
(
mkdirp
(
dir
,
0777
,
MYF
(
0
))
<
0
)
{
my_strerror
(
errbuf
,
sizeof
(
errbuf
),
my_errno
);
msg
(
"Can not create directory %s: %s
\n
"
,
dir
,
errbuf
);
msg
(
"Can not create directory %s: %s"
,
dir
,
errbuf
);
return
(
false
);
}
}
...
...
@@ -739,7 +734,7 @@ directory_exists(const char *dir, bool create)
if
(
os_dir
==
NULL
)
{
my_strerror
(
errbuf
,
sizeof
(
errbuf
),
my_errno
);
msg
(
"Can not open directory %s: %s
\n
"
,
dir
,
msg
(
"Can not open directory %s: %s"
,
dir
,
errbuf
);
return
(
false
);
...
...
@@ -768,7 +763,7 @@ directory_exists_and_empty(const char *dir, const char *comment)
os_dir
=
os_file_opendir
(
dir
,
FALSE
);
if
(
os_dir
==
NULL
)
{
msg
(
"%s can not open directory %s
\n
"
,
comment
,
dir
);
msg
(
"%s can not open directory %s"
,
comment
,
dir
);
return
(
false
);
}
...
...
@@ -777,7 +772,7 @@ directory_exists_and_empty(const char *dir, const char *comment)
os_file_closedir
(
os_dir
);
if
(
!
empty
)
{
msg
(
"%s directory %s is not empty!
\n
"
,
comment
,
dir
);
msg
(
"%s directory %s is not empty!"
,
comment
,
dir
);
}
return
(
empty
);
...
...
@@ -826,7 +821,7 @@ datafile_copy_backup(const char *filepath, uint thread_n)
of the filters value. */
if
(
check_if_skip_table
(
filepath
))
{
msg
_ts
(
"[%02u] Skipping %s.
\n
"
,
thread_n
,
filepath
);
msg
(
thread_n
,
"Skipping %s."
,
filepath
);
return
(
true
);
}
...
...
@@ -892,14 +887,13 @@ backup_file_vprintf(const char *filename, const char *fmt, va_list ap)
dstfile
=
ds_open
(
ds_data
,
filename
,
&
stat
);
if
(
dstfile
==
NULL
)
{
msg
(
"[%02u] error: "
"cannot open the destination stream for %s
\n
"
,
0
,
filename
);
msg
(
"error: Can't open the destination stream for %s"
,
filename
);
goto
error
;
}
action
=
xb_get_copy_action
(
"Writing"
);
msg
_ts
(
"[%02u] %s %s
\n
"
,
0
,
action
,
filename
);
msg
(
"%s %s"
,
action
,
filename
);
if
(
buf_len
==
-
1
)
{
goto
error
;
...
...
@@ -910,7 +904,7 @@ backup_file_vprintf(const char *filename, const char *fmt, va_list ap)
}
/* close */
msg
_ts
(
"[%02u] ...done
\n
"
,
0
);
msg
(
" ...done"
);
free
(
buf
);
if
(
ds_close
(
dstfile
))
{
...
...
@@ -926,7 +920,7 @@ backup_file_vprintf(const char *filename, const char *fmt, va_list ap)
}
error_close:
msg
(
"
[%02u] Error: backup file failed.
\n
"
,
0
);
msg
(
"
Error: backup file failed."
);
return
(
false
);
/*ERROR*/
}
...
...
@@ -986,7 +980,7 @@ run_data_threads(datadir_iter_t *it, os_thread_func_t func, uint n)
for
(
i
=
0
;
i
<
n
;
i
++
)
{
ret
=
data_threads
[
i
].
ret
&&
ret
;
if
(
!
data_threads
[
i
].
ret
)
{
msg
(
"Error: thread %u failed.
\n
"
,
i
);
msg
(
"Error: thread %u failed."
,
i
);
}
}
...
...
@@ -1021,14 +1015,12 @@ copy_file(ds_ctxt_t *datasink,
dstfile
=
ds_open
(
datasink
,
dst_path
,
&
cursor
.
statinfo
);
if
(
dstfile
==
NULL
)
{
msg
(
"[%02u] error: "
"cannot open the destination stream for %s
\n
"
,
thread_n
,
dst_name
);
msg
(
thread_n
,
"error: "
"cannot open the destination stream for %s"
,
dst_name
);
goto
error
;
}
msg_ts
(
"[%02u] %s %s to %s
\n
"
,
thread_n
,
xb_get_copy_action
(),
src_file_path
,
dstfile
->
path
);
msg
(
thread_n
,
"%s %s to %s"
,
xb_get_copy_action
(),
src_file_path
,
dstfile
->
path
);
/* The main copy loop */
while
((
res
=
datafile_read
(
&
cursor
))
==
XB_FIL_CUR_SUCCESS
)
{
...
...
@@ -1043,7 +1035,7 @@ copy_file(ds_ctxt_t *datasink,
}
/* close */
msg
_ts
(
"[%02u] ...done
\n
"
,
thread_n
);
msg
(
thread_n
,
" ...done"
);
datafile_close
(
&
cursor
);
if
(
ds_close
(
dstfile
))
{
goto
error_close
;
...
...
@@ -1057,7 +1049,7 @@ copy_file(ds_ctxt_t *datasink,
}
error_close:
msg
(
"[%02u] Error: copy_file() failed.
\n
"
,
thread_n
);
msg
(
thread_n
,
"Error: copy_file() failed."
);
return
(
false
);
/*ERROR*/
}
...
...
@@ -1089,36 +1081,34 @@ move_file(ds_ctxt_t *datasink,
if
(
file_exists
(
dst_file_path_abs
))
{
msg
(
"Error: Move file %s to %s failed: Destination "
"file exists
\n
"
,
src_file_path
,
dst_file_path_abs
);
"file exists"
,
src_file_path
,
dst_file_path_abs
);
return
(
false
);
}
msg_ts
(
"[%02u] Moving %s to %s
\n
"
,
thread_n
,
src_file_path
,
dst_file_path_abs
);
msg
(
thread_n
,
"Moving %s to %s"
,
src_file_path
,
dst_file_path_abs
);
if
(
my_rename
(
src_file_path
,
dst_file_path_abs
,
MYF
(
0
))
!=
0
)
{
if
(
my_errno
==
EXDEV
)
{
bool
ret
;
ret
=
copy_file
(
datasink
,
src_file_path
,
dst_file_path
,
thread_n
);
msg
_ts
(
"[%02u] Removing %s
\n
"
,
thread_n
,
src_file_path
);
msg
(
thread_n
,
"Removing %s"
,
src_file_path
);
if
(
unlink
(
src_file_path
)
!=
0
)
{
my_strerror
(
errbuf
,
sizeof
(
errbuf
),
errno
);
msg
(
"Error: unlink %s failed: %s
\n
"
,
msg
(
"Error: unlink %s failed: %s"
,
src_file_path
,
errbuf
);
}
return
(
ret
);
}
my_strerror
(
errbuf
,
sizeof
(
errbuf
),
my_errno
);
msg
(
"Can not move file %s to %s: %s
\n
"
,
msg
(
"Can not move file %s to %s: %s"
,
src_file_path
,
dst_file_path_abs
,
errbuf
);
return
(
false
);
}
msg
_ts
(
"[%02u] ...done
\n
"
,
thread_n
);
msg
(
thread_n
,
" ...done"
);
return
(
true
);
}
...
...
@@ -1270,13 +1260,13 @@ backup_files(const char *from, bool prep_mode)
prep_mode
?
1
:
2
);
rsync_tmpfile
=
fopen
(
rsync_tmpfile_name
,
"w"
);
if
(
rsync_tmpfile
==
NULL
)
{
msg
(
"Error: can't create file %s
\n
"
,
msg
(
"Error: can't create file %s"
,
rsync_tmpfile_name
);
return
(
false
);
}
}
msg
_ts
(
"Starting %s non-InnoDB tables and files
\n
"
,
msg
(
"Starting %s non-InnoDB tables and files
"
,
prep_mode
?
"prep copy of"
:
"to backup"
);
datadir_node_init
(
&
node
);
...
...
@@ -1292,7 +1282,7 @@ backup_files(const char *from, bool prep_mode)
ret
=
datafile_copy_backup
(
node
.
filepath
,
1
);
}
if
(
!
ret
)
{
msg
(
"Failed to copy file %s
\n
"
,
node
.
filepath
);
msg
(
"Failed to copy file %s"
,
node
.
filepath
);
goto
out
;
}
}
else
if
(
!
prep_mode
)
{
...
...
@@ -1302,7 +1292,7 @@ backup_files(const char *from, bool prep_mode)
"%s/db.opt"
,
node
.
filepath
);
if
(
!
(
ret
=
backup_file_printf
(
trim_dotslash
(
path
),
"%s"
,
""
)))
{
msg
(
"Failed to create file %s
\n
"
,
path
);
msg
(
"Failed to create file %s"
,
path
);
goto
out
;
}
}
...
...
@@ -1327,13 +1317,13 @@ backup_files(const char *from, bool prep_mode)
cmd
<<
"rsync -t . --files-from="
<<
rsync_tmpfile_name
<<
" "
<<
xtrabackup_target_dir
;
msg
_ts
(
"Starting rsync as: %s
\n
"
,
cmd
.
str
().
c_str
());
msg
(
"Starting rsync as: %s
"
,
cmd
.
str
().
c_str
());
if
((
err
=
system
(
cmd
.
str
().
c_str
())
&&
!
prep_mode
)
!=
0
)
{
msg
_ts
(
"Error: rsync failed with error code %d
\n
"
,
err
);
msg
(
"Error: rsync failed with error code %d
"
,
err
);
ret
=
false
;
goto
out
;
}
msg
_ts
(
"rsync finished successfully.
\n
"
);
msg
(
"rsync finished successfully.
"
);
if
(
!
prep_mode
&&
!
opt_no_lock
)
{
char
path
[
FN_REFLEN
];
...
...
@@ -1349,7 +1339,7 @@ backup_files(const char *from, bool prep_mode)
rsync_tmpfile
=
fopen
(
rsync_tmpfile_name
,
"r"
);
if
(
rsync_tmpfile
==
NULL
)
{
msg
(
"Error: can't open file %s
\n
"
,
msg
(
"Error: can't open file %s"
,
rsync_tmpfile_name
);
ret
=
false
;
goto
out
;
...
...
@@ -1365,7 +1355,7 @@ backup_files(const char *from, bool prep_mode)
snprintf
(
dst_path
,
sizeof
(
dst_path
),
"%s/%s"
,
xtrabackup_target_dir
,
path
);
msg
_ts
(
"Removing %s
\n
"
,
dst_path
);
msg
(
"Removing %s
"
,
dst_path
);
unlink
(
dst_path
);
}
}
...
...
@@ -1375,7 +1365,7 @@ backup_files(const char *from, bool prep_mode)
}
}
msg
_ts
(
"Finished %s non-InnoDB tables and files
\n
"
,
msg
(
"Finished %s non-InnoDB tables and files
"
,
prep_mode
?
"a prep copy of"
:
"backing up"
);
out:
...
...
@@ -1447,7 +1437,7 @@ bool backup_start()
rocksdb_create_checkpoint
();
}
msg
_ts
(
"Waiting for log copy thread to read lsn %llu
\n
"
,
(
ulonglong
)
server_lsn_after_lock
);
msg
(
"Waiting for log copy thread to read lsn %llu
"
,
(
ulonglong
)
server_lsn_after_lock
);
backup_wait_for_lsn
(
server_lsn_after_lock
);
backup_fix_ddl
();
...
...
@@ -1490,7 +1480,7 @@ bool backup_start()
}
if
(
have_flush_engine_logs
&&
!
opt_no_lock
)
{
msg
_ts
(
"Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
\n
"
);
msg
(
"Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
"
);
xb_mysql_query
(
mysql_connection
,
"FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS"
,
false
);
}
...
...
@@ -1514,7 +1504,7 @@ void backup_release()
}
if
(
opt_safe_slave_backup
&&
sql_thread_started
)
{
msg
(
"Starting slave SQL thread
\n
"
);
msg
(
"Starting slave SQL thread"
);
xb_mysql_query
(
mysql_connection
,
"START SLAVE SQL_THREAD"
,
false
);
}
...
...
@@ -1540,12 +1530,12 @@ bool backup_finish()
rocksdb_backup_checkpoint
();
}
msg
_ts
(
"Backup created in directory '%s'
\n
"
,
xtrabackup_target_dir
);
msg
(
"Backup created in directory '%s'
"
,
xtrabackup_target_dir
);
if
(
mysql_binlog_position
!=
NULL
)
{
msg
(
"MySQL binlog position: %s
\n
"
,
mysql_binlog_position
);
msg
(
"MySQL binlog position: %s"
,
mysql_binlog_position
);
}
if
(
mysql_slave_position
&&
opt_slave_info
)
{
msg
(
"MySQL slave binlog position: %s
\n
"
,
msg
(
"MySQL slave binlog position: %s"
,
mysql_slave_position
);
}
...
...
@@ -1605,7 +1595,7 @@ ibx_copy_incremental_over_full()
if
(
!
(
ret
=
copy_file
(
ds_data
,
node
.
filepath
,
node
.
filepath_rel
,
1
)))
{
msg
(
"Failed to copy file %s
\n
"
,
msg
(
"Failed to copy file %s"
,
node
.
filepath
);
goto
cleanup
;
}
...
...
@@ -1745,7 +1735,7 @@ copy_back()
/* cd to backup directory */
if
(
my_setwd
(
xtrabackup_target_dir
,
MYF
(
MY_WME
)))
{
msg
(
"
cannot my_setwd %s
\n
"
,
xtrabackup_target_dir
);
msg
(
"
Can't my_setwd %s
"
,
xtrabackup_target_dir
);
return
(
false
);
}
...
...
@@ -1758,7 +1748,7 @@ copy_back()
srv_sys_space
.
set_path
(
"."
);
if
(
!
srv_sys_space
.
parse_params
(
innobase_data_file_path
,
true
))
{
msg
(
"syntax error in innodb_data_file_path
\n
"
);
msg
(
"syntax error in innodb_data_file_path"
);
return
(
false
);
}
...
...
@@ -1872,12 +1862,12 @@ copy_back()
snprintf
(
path
,
sizeof
(
path
),
"%s/%s"
,
mysql_data_home
,
node
.
filepath_rel
);
msg
_ts
(
"[%02u] Creating directory %s
\n
"
,
1
,
path
);
msg
(
"Creating directory %s"
,
path
);
if
(
mkdirp
(
path
,
0777
,
MYF
(
0
))
<
0
)
{
char
errbuf
[
MYSYS_STRERROR_SIZE
];
my_strerror
(
errbuf
,
sizeof
(
errbuf
),
my_errno
);
msg
(
"Can not create directory %s: %s
\n
"
,
msg
(
"Can not create directory %s: %s"
,
path
,
errbuf
);
ret
=
false
;
...
...
@@ -1885,7 +1875,7 @@ copy_back()
}
msg
_ts
(
"[%02u] ...done."
,
1
);
msg
(
" ...done."
);
continue
;
}
...
...
@@ -1995,14 +1985,14 @@ decrypt_decompress_file(const char *filepath, uint thread_n)
if
(
needs_action
)
{
msg
_ts
(
"[%02u] %s
\n
"
,
thread_n
,
message
.
str
().
c_str
());
msg
(
thread_n
,
"%s
\n
"
,
message
.
str
().
c_str
());
if
(
system
(
cmd
.
str
().
c_str
())
!=
0
)
{
return
(
false
);
}
if
(
opt_remove_original
)
{
msg
_ts
(
"[%02u] removing %s
\n
"
,
thread_n
,
filepath
);
msg
(
thread_n
,
"Removing %s"
,
filepath
);
if
(
my_delete
(
filepath
,
MYF
(
MY_WME
))
!=
0
)
{
return
(
false
);
}
...
...
@@ -2065,7 +2055,7 @@ decrypt_decompress()
/* cd to backup directory */
if
(
my_setwd
(
xtrabackup_target_dir
,
MYF
(
MY_WME
)))
{
msg
(
"
cannot my_setwd %s
\n
"
,
xtrabackup_target_dir
);
msg
(
"
Can't my_setwd %s
"
,
xtrabackup_target_dir
);
return
(
false
);
}
...
...
@@ -2215,8 +2205,7 @@ static void copy_or_move_dir(const char *from, const char *to, bool do_copy, boo
rc
=
make_hardlink
(
from_path
,
to_path
);
if
(
rc
)
{
msg_ts
(
"[%02u] Creating hardlink from %s to %s
\n
"
,
1
,
from_path
,
to_path
);
msg
(
"Creating hardlink from %s to %s"
,
from_path
,
to_path
);
}
else
{
...
...
@@ -2250,14 +2239,14 @@ static void copy_or_move_dir(const char *from, const char *to, bool do_copy, boo
*/
static
void
rocksdb_lock_checkpoint
()
{
msg
_ts
(
"Obtaining rocksdb checkpoint lock.
\n
"
);
msg
(
"Obtaining rocksdb checkpoint lock.
"
);
MYSQL_RES
*
res
=
xb_mysql_query
(
mysql_connection
,
"SELECT GET_LOCK('mariabackup_rocksdb_checkpoint',3600)"
,
true
,
true
);
MYSQL_ROW
r
=
mysql_fetch_row
(
res
);
if
(
r
&&
r
[
0
]
&&
strcmp
(
r
[
0
],
"1"
))
{
msg
_ts
(
"Could not obtain rocksdb checkpont lock
\n
"
);
msg
(
"Could not obtain rocksdb checkpont lock.
"
);
exit
(
EXIT_FAILURE
);
}
mysql_free_result
(
res
);
...
...
@@ -2311,7 +2300,7 @@ static void rocksdb_create_checkpoint()
if
(
!
access
(
rocksdb_checkpoint_dir
,
0
))
{
msg
_ts
(
"Removing rocksdb checkpoint from previous backup attempt.
\n
"
);
msg
(
"Removing rocksdb checkpoint from previous backup attempt.
"
);
rocksdb_remove_checkpoint_directory
();
}
...
...
@@ -2327,14 +2316,14 @@ static void rocksdb_create_checkpoint()
*/
static
void
rocksdb_backup_checkpoint
()
{
msg
_ts
(
"Backing up rocksdb files.
\n
"
);
msg
(
"Backing up rocksdb files.
"
);
char
rocksdb_backup_dir
[
FN_REFLEN
];
snprintf
(
rocksdb_backup_dir
,
sizeof
(
rocksdb_backup_dir
),
"%s/"
ROCKSDB_BACKUP_DIR
,
xtrabackup_target_dir
);
bool
backup_to_directory
=
xtrabackup_backup
&&
xtrabackup_stream_fmt
==
XB_STREAM_FMT_NONE
;
if
(
backup_to_directory
)
{
if
(
my_mkdir
(
rocksdb_backup_dir
,
0777
,
MYF
(
0
))){
msg
_ts
(
"Can't create rocksdb backup directory %s
\n
"
,
rocksdb_backup_dir
);
msg
(
"Can't create rocksdb backup directory %s
"
,
rocksdb_backup_dir
);
exit
(
EXIT_FAILURE
);
}
}
...
...
extra/mariabackup/backup_mysql.cc
View file @
a8a27e65
...
...
@@ -104,7 +104,7 @@ xb_mysql_connect()
sprintf
(
mysql_port_str
,
"%d"
,
opt_port
);
if
(
connection
==
NULL
)
{
msg
(
"Failed to init MySQL struct: %s.
\n
"
,
msg
(
"Failed to init MySQL struct: %s."
,
mysql_error
(
connection
));
return
(
NULL
);
}
...
...
@@ -120,8 +120,8 @@ xb_mysql_connect()
mysql_options
(
connection
,
MYSQL_OPT_PROTOCOL
,
&
opt_protocol
);
mysql_options
(
connection
,
MYSQL_SET_CHARSET_NAME
,
"utf8"
);
msg
_ts
(
"Connecting to MySQL server host: %s, user: %s, password: %s, "
"port: %s, socket: %s
\n
"
,
opt_host
?
opt_host
:
"localhost"
,
msg
(
"Connecting to MySQL server host: %s, user: %s, password: %s, "
"port: %s, socket: %s"
,
opt_host
?
opt_host
:
"localhost"
,
opt_user
?
opt_user
:
"not set"
,
opt_password
?
"set"
:
"not set"
,
opt_port
!=
0
?
mysql_port_str
:
"not set"
,
...
...
@@ -147,8 +147,7 @@ xb_mysql_connect()
opt_password
,
""
/*database*/
,
opt_port
,
opt_socket
,
0
))
{
msg
(
"Failed to connect to MySQL server: %s.
\n
"
,
mysql_error
(
connection
));
msg
(
"Failed to connect to MySQL server: %s."
,
mysql_error
(
connection
));
mysql_close
(
connection
);
return
(
NULL
);
}
...
...
@@ -168,8 +167,7 @@ xb_mysql_query(MYSQL *connection, const char *query, bool use_result,
MYSQL_RES
*
mysql_result
=
NULL
;
if
(
mysql_query
(
connection
,
query
))
{
msg
(
"Error: failed to execute query %s: %s
\n
"
,
query
,
mysql_error
(
connection
));
msg
(
"Error: failed to execute query %s: %s"
,
query
,
mysql_error
(
connection
));
if
(
die_on_error
)
{
exit
(
EXIT_FAILURE
);
}
...
...
@@ -179,7 +177,7 @@ xb_mysql_query(MYSQL *connection, const char *query, bool use_result,
/* store result set on client if there is a result */
if
(
mysql_field_count
(
connection
)
>
0
)
{
if
((
mysql_result
=
mysql_store_result
(
connection
))
==
NULL
)
{
msg
(
"Error: failed to fetch query result %s: %s
\n
"
,
msg
(
"Error: failed to fetch query result %s: %s"
,
query
,
mysql_error
(
connection
));
exit
(
EXIT_FAILURE
);
}
...
...
@@ -316,11 +314,11 @@ check_server_version(unsigned long version_number,
msg
(
"Error: Built-in InnoDB in MySQL 5.1 is not "
"supported in this release. You can either use "
"Percona XtraBackup 2.0, or upgrade to InnoDB "
"plugin.
\n
"
);
"plugin."
);
}
else
if
(
!
version_supported
)
{
msg
(
"Error: Unsupported server version: '%s'. Please "
"report a bug at "
"https://bugs.launchpad.net/percona-xtrabackup
\n
"
,
"https://bugs.launchpad.net/percona-xtrabackup"
,
version_string
);
}
...
...
@@ -407,7 +405,7 @@ get_mysql_vars(MYSQL *connection)
opt_binlog_info
==
BINLOG_INFO_LOCKLESS
)
{
msg
(
"Error: --binlog-info=LOCKLESS is not supported by the "
"server
\n
"
);
"server"
);
return
(
false
);
}
...
...
@@ -445,7 +443,7 @@ get_mysql_vars(MYSQL *connection)
have_gtid_slave
=
true
;
}
msg
(
"Using server version %s
\n
"
,
version_var
);
msg
(
"Using server version %s"
,
version_var
);
if
(
!
(
ret
=
detect_mysql_capabilities_for_backup
()))
{
goto
out
;
...
...
@@ -455,17 +453,17 @@ get_mysql_vars(MYSQL *connection)
if
(
check_if_param_set
(
"datadir"
))
{
if
(
!
directory_exists
(
mysql_data_home
,
false
))
{
msg
(
"Warning: option 'datadir' points to "
"nonexistent directory '%s'
\n
"
,
mysql_data_home
);
"nonexistent directory '%s'"
,
mysql_data_home
);
}
if
(
!
directory_exists
(
datadir_var
,
false
))
{
msg
(
"Warning: MySQL variable 'datadir' points to "
"nonexistent directory '%s'
\n
"
,
datadir_var
);
"nonexistent directory '%s'"
,
datadir_var
);
}
if
(
!
equal_paths
(
mysql_data_home
,
datadir_var
))
{
msg
(
"Warning: option 'datadir' has different "
"values:
\n
"
" '%s' in defaults file
\n
"
" '%s' in SHOW VARIABLES
\n
"
,
" '%s' in SHOW VARIABLES"
,
mysql_data_home
,
datadir_var
);
}
}
...
...
@@ -564,14 +562,14 @@ detect_mysql_capabilities_for_backup()
if
(
opt_galera_info
&&
!
have_galera_enabled
)
{
msg
(
"--galera-info is specified on the command "
"line, but the server does not support Galera "
"replication. Ignoring the option.
\n
"
);
"replication. Ignoring the option."
);
opt_galera_info
=
false
;
}
if
(
opt_slave_info
&&
have_multi_threaded_slave
&&
!
have_gtid_slave
)
{
msg
(
"The --slave-info option requires GTID enabled for a "
"multi-threaded slave.
\n
"
);
"multi-threaded slave."
);
return
(
false
);
}
...
...
@@ -618,7 +616,7 @@ select_incremental_lsn_from_history(lsn_t *incremental_lsn)
const
MYSQL_ROW
row
=
mysql_fetch_row
(
mysql_result
);
if
(
row
)
{
*
incremental_lsn
=
strtoull
(
row
[
0
],
NULL
,
10
);
msg
(
"Found and using lsn: "
LSN_PF
" for %s %s
\n
"
,
msg
(
"Found and using lsn: "
LSN_PF
" for %s %s"
,
*
incremental_lsn
,
opt_incremental_history_uuid
?
"uuid"
:
"name"
,
opt_incremental_history_uuid
?
...
...
@@ -626,7 +624,7 @@ select_incremental_lsn_from_history(lsn_t *incremental_lsn)
opt_incremental_history_name
);
}
else
{
msg
(
"Error while attempting to find history record "
"for %s %s
\n
"
,
"for %s %s"
,
opt_incremental_history_uuid
?
"uuid"
:
"name"
,
opt_incremental_history_uuid
?
opt_incremental_history_uuid
:
...
...
@@ -736,7 +734,7 @@ have_queries_to_wait_for(MYSQL *connection, uint threshold)
&&
duration
>=
(
int
)
threshold
&&
((
all_queries
&&
is_query
(
info
))
||
is_update_query
(
info
)))
{
msg
_ts
(
"Waiting for query %s (duration %d sec): %s"
,
msg
(
"Waiting for query %s (duration %d sec): %s"
,
id
,
duration
,
info
);
have_to_wait
=
true
;
break
;
...
...
@@ -765,7 +763,7 @@ kill_long_queries(MYSQL *connection, time_t timeout)
(
time_t
)
duration
>=
timeout
&&
((
all_queries
&&
is_query
(
info
))
||
is_select_query
(
info
)))
{
msg
_ts
(
"Killing query %s (duration %d sec): %s
\n
"
,
msg
(
"Killing query %s (duration %d sec): %s
"
,
id
,
(
int
)
duration
,
info
);
snprintf
(
kill_stmt
,
sizeof
(
kill_stmt
),
"KILL %s"
,
id
);
...
...
@@ -784,8 +782,8 @@ wait_for_no_updates(MYSQL *connection, uint timeout, uint threshold)
start_time
=
time
(
NULL
);
msg
_ts
(
"Waiting %u seconds for queries running longer than %u seconds "
"to finish
\n
"
,
timeout
,
threshold
);
msg
(
"Waiting %u seconds for queries running longer than %u seconds "
"to finish"
,
timeout
,
threshold
);
while
(
time
(
NULL
)
<=
(
time_t
)(
start_time
+
timeout
))
{
if
(
!
have_queries_to_wait_for
(
connection
,
threshold
))
{
...
...
@@ -794,7 +792,7 @@ wait_for_no_updates(MYSQL *connection, uint timeout, uint threshold)
os_thread_sleep
(
1000000
);
}
msg
_ts
(
"Unable to obtain lock. Please try again later."
);
msg
(
"Unable to obtain lock. Please try again later."
);
return
(
false
);
}
...
...
@@ -812,7 +810,7 @@ kill_query_thread(
os_event_set
(
kill_query_thread_started
);
msg
_ts
(
"Kill query timeout %d seconds.
\n
"
,
msg
(
"Kill query timeout %d seconds.
"
,
opt_kill_long_queries_timeout
);
while
(
time
(
NULL
)
-
start_time
<
...
...
@@ -824,7 +822,7 @@ kill_query_thread(
}
if
((
mysql
=
xb_mysql_connect
())
==
NULL
)
{
msg
(
"Error: kill query thread failed
\n
"
);
msg
(
"Error: kill query thread failed"
);
goto
stop_thread
;
}
...
...
@@ -839,7 +837,7 @@ kill_query_thread(
mysql_close
(
mysql
);
stop_thread:
msg
_ts
(
"Kill query thread stopped
\n
"
);
msg
(
"Kill query thread stopped
"
);
os_event_set
(
kill_query_thread_stopped
);
...
...
@@ -889,7 +887,7 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *))
{
MYSQL
*
mysql
;
if
((
mysql
=
xb_mysql_connect
())
==
NULL
)
{
msg
(
"Error: kill mdl waiters thread failed to connect
\n
"
);
msg
(
"Error: kill mdl waiters thread failed to connect"
);
goto
stop_thread
;
}
...
...
@@ -908,11 +906,11 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *))
if
(
row
[
1
]
&&
!
strcmp
(
row
[
1
],
"Killed"
))
continue
;
msg
_ts
(
"Killing MDL waiting %s ('%s') on connection %s
\n
"
,
msg
(
"Killing MDL waiting %s ('%s') on connection %s
"
,
row
[
1
],
row
[
2
],
row
[
0
]);
snprintf
(
query
,
sizeof
(
query
),
"KILL QUERY %s"
,
row
[
0
]);
if
(
mysql_query
(
mysql
,
query
)
&&
(
mysql_errno
(
mysql
)
!=
ER_NO_SUCH_THREAD
))
{
msg
(
"Error: failed to execute query %s: %s
\n
"
,
query
,
mysql_error
(
mysql
));
msg
(
"Error: failed to execute query %s: %s"
,
query
,
mysql_error
(
mysql
));
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -922,7 +920,7 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *))
mysql_close
(
mysql
);
stop_thread:
msg
_ts
(
"Kill mdl waiters thread stopped
\n
"
);
msg
(
"Kill mdl waiters thread stopped
"
);
os_event_set
(
mdl_killer_finished_event
);
os_thread_exit
();
return
os_thread_ret_t
(
0
);
...
...
@@ -964,7 +962,7 @@ lock_tables(MYSQL *connection)
}
if
(
have_backup_locks
)
{
msg
_ts
(
"Executing LOCK TABLES FOR BACKUP...
\n
"
);
msg
(
"Executing LOCK TABLES FOR BACKUP...
"
);
xb_mysql_query
(
connection
,
"LOCK TABLES FOR BACKUP"
,
false
);
return
(
true
);
}
...
...
@@ -987,7 +985,7 @@ lock_tables(MYSQL *connection)
compatible with this trick.
*/
msg
_ts
(
"Executing FLUSH NO_WRITE_TO_BINLOG TABLES...
\n
"
);
msg
(
"Executing FLUSH NO_WRITE_TO_BINLOG TABLES...
"
);
xb_mysql_query
(
connection
,
"FLUSH NO_WRITE_TO_BINLOG TABLES"
,
false
);
...
...
@@ -1000,7 +998,7 @@ lock_tables(MYSQL *connection)
}
}
msg
_ts
(
"Executing FLUSH TABLES WITH READ LOCK...
\n
"
);
msg
(
"Executing FLUSH TABLES WITH READ LOCK...
"
);
if
(
opt_kill_long_queries_timeout
)
{
start_query_killer
();
...
...
@@ -1033,7 +1031,7 @@ bool
lock_binlog_maybe
(
MYSQL
*
connection
)
{
if
(
have_backup_locks
&&
!
opt_no_lock
&&
!
binlog_locked
)
{
msg
_ts
(
"Executing LOCK BINLOG FOR BACKUP...
\n
"
);
msg
(
"Executing LOCK BINLOG FOR BACKUP...
"
);
xb_mysql_query
(
connection
,
"LOCK BINLOG FOR BACKUP"
,
false
);
binlog_locked
=
true
;
...
...
@@ -1052,20 +1050,20 @@ void
unlock_all
(
MYSQL
*
connection
)
{
if
(
opt_debug_sleep_before_unlock
)
{
msg
_ts
(
"Debug sleep for %u seconds
\n
"
,
msg
(
"Debug sleep for %u seconds
"
,
opt_debug_sleep_before_unlock
);
os_thread_sleep
(
opt_debug_sleep_before_unlock
*
1000
);
}
if
(
binlog_locked
)
{
msg
_ts
(
"Executing UNLOCK BINLOG
\n
"
);
msg
(
"Executing UNLOCK BINLOG
"
);
xb_mysql_query
(
connection
,
"UNLOCK BINLOG"
,
false
);
}
msg
_ts
(
"Executing UNLOCK TABLES
\n
"
);
msg
(
"Executing UNLOCK TABLES
"
);
xb_mysql_query
(
connection
,
"UNLOCK TABLES"
,
false
);
msg
_ts
(
"All tables unlocked
\n
"
);
msg
(
"All tables unlocked
"
);
}
...
...
@@ -1116,7 +1114,7 @@ wait_for_safe_slave(MYSQL *connection)
if
(
!
(
read_master_log_pos
&&
slave_sql_running
))
{
msg
(
"Not checking slave open temp tables for "
"--safe-slave-backup because host is not a slave
\n
"
);
"--safe-slave-backup because host is not a slave"
);
goto
cleanup
;
}
...
...
@@ -1130,36 +1128,36 @@ wait_for_safe_slave(MYSQL *connection)
}
open_temp_tables
=
get_open_temp_tables
(
connection
);
msg
_ts
(
"Slave open temp tables: %d
\n
"
,
open_temp_tables
);
msg
(
"Slave open temp tables: %d
"
,
open_temp_tables
);
while
(
open_temp_tables
&&
n_attempts
--
)
{
msg
_ts
(
"Starting slave SQL thread, waiting %d seconds, then "
msg
(
"Starting slave SQL thread, waiting %d seconds, then "
"checking Slave_open_temp_tables again (%d attempts "
"remaining)...
\n
"
,
sleep_time
,
n_attempts
);
"remaining)..."
,
sleep_time
,
n_attempts
);
xb_mysql_query
(
connection
,
"START SLAVE SQL_THREAD"
,
false
);
os_thread_sleep
(
sleep_time
*
1000000
);
xb_mysql_query
(
connection
,
"STOP SLAVE SQL_THREAD"
,
false
);
open_temp_tables
=
get_open_temp_tables
(
connection
);
msg
_ts
(
"Slave open temp tables: %d
\n
"
,
open_temp_tables
);
msg
(
"Slave open temp tables: %d
"
,
open_temp_tables
);
}
/* Restart the slave if it was running at start */
if
(
open_temp_tables
==
0
)
{
msg
_ts
(
"Slave is safe to backup
\n
"
);
msg
(
"Slave is safe to backup
"
);
goto
cleanup
;
}
result
=
false
;
if
(
sql_thread_started
)
{
msg
_ts
(
"Restarting slave SQL thread.
\n
"
);
msg
(
"Restarting slave SQL thread.
"
);
xb_mysql_query
(
connection
,
"START SLAVE SQL_THREAD"
,
false
);
}
msg
_ts
(
"Slave_open_temp_tables did not become zero after "
"%d seconds
\n
"
,
opt_safe_slave_backup_timeout
);
msg
(
"Slave_open_temp_tables did not become zero after "
"%d seconds"
,
opt_safe_slave_backup_timeout
);
cleanup:
free_mysql_variables
(
status
);
...
...
@@ -1201,10 +1199,8 @@ write_slave_info(MYSQL *connection)
if
(
master
==
NULL
||
filename
==
NULL
||
position
==
NULL
)
{
msg
(
"Failed to get master binlog coordinates "
"from SHOW SLAVE STATUS
\n
"
);
msg
(
"This means that the server is not a "
"replication slave. Ignoring the --slave-info "
"option
\n
"
);
"from SHOW SLAVE STATUS.This means that the server is not a "
"replication slave. Ignoring the --slave-info option"
);
/* we still want to continue the backup */
result
=
true
;
goto
cleanup
;
...
...
@@ -1287,7 +1283,7 @@ write_galera_info(MYSQL *connection)
if
((
state_uuid
==
NULL
&&
state_uuid55
==
NULL
)
||
(
last_committed
==
NULL
&&
last_committed55
==
NULL
))
{
msg
(
"Failed to get master wsrep state from SHOW STATUS.
\n
"
);
msg
(
"Failed to get master wsrep state from SHOW STATUS."
);
result
=
false
;
goto
cleanup
;
}
...
...
@@ -1800,9 +1796,9 @@ mdl_lock_table(ulint space_id)
std
::
ostringstream
lock_query
;
lock_query
<<
"SELECT 1 FROM "
<<
full_table_name
<<
" LIMIT 0"
;
msg
_ts
(
"Locking MDL for %s
\n
"
,
full_table_name
.
c_str
());
msg
(
"Locking MDL for %s
"
,
full_table_name
.
c_str
());
if
(
mysql_query
(
mdl_con
,
lock_query
.
str
().
c_str
()))
{
msg
_ts
(
"Warning : locking MDL failed for space id %zu, name %s
\n
"
,
space_id
,
full_table_name
.
c_str
());
msg
(
"Warning : locking MDL failed for space id %zu, name %s
"
,
space_id
,
full_table_name
.
c_str
());
}
else
{
MYSQL_RES
*
r
=
mysql_store_result
(
mdl_con
);
mysql_free_result
(
r
);
...
...
@@ -1812,7 +1808,7 @@ mdl_lock_table(ulint space_id)
void
mdl_unlock_all
()
{
msg
_ts
(
"Unlocking MDL for all tables
\n
"
);
msg
(
"Unlocking MDL for all tables
"
);
xb_mysql_query
(
mdl_con
,
"COMMIT"
,
false
,
true
);
mysql_close
(
mdl_con
);
spaceid_to_tablename
.
clear
();
...
...
extra/mariabackup/changed_page_bitmap.cc
View file @
a8a27e65
...
...
@@ -202,7 +202,7 @@ log_online_read_bitmap_page(
/* The following call prints an error message */
os_file_get_last_error
(
TRUE
);
msg
(
"InnoDB: Warning: failed reading changed page bitmap "
"file
\'
%s
\'
\n
"
,
bitmap_file
->
name
);
"file
\'
%s
\'
"
,
bitmap_file
->
name
);
return
FALSE
;
}
...
...
@@ -281,7 +281,7 @@ log_online_setup_bitmap_file_range(
bitmap_dir
=
os_file_opendir
(
srv_data_home
,
FALSE
);
if
(
UNIV_UNLIKELY
(
!
bitmap_dir
))
{
msg
(
"InnoDB: Error: failed to open bitmap directory
\'
%s
\'
\n
"
,
msg
(
"InnoDB: Error: failed to open bitmap directory
\'
%s
\'
"
,
srv_data_home
);
return
FALSE
;
}
...
...
@@ -331,7 +331,7 @@ log_online_setup_bitmap_file_range(
if
(
UNIV_UNLIKELY
(
os_file_closedir
(
bitmap_dir
)))
{
os_file_get_last_error
(
TRUE
);
msg
(
"InnoDB: Error: cannot close
\'
%s
\'
\n
"
,
srv_data_home
);
msg
(
"InnoDB: Error: cannot close
\'
%s
\'
"
,
srv_data_home
);
return
FALSE
;
}
...
...
@@ -348,7 +348,7 @@ log_online_setup_bitmap_file_range(
bitmap_dir
=
os_file_opendir
(
srv_data_home
,
FALSE
);
if
(
UNIV_UNLIKELY
(
!
bitmap_dir
))
{
msg
(
"InnoDB: Error: failed to open bitmap directory
\'
%s
\'
\n
"
,
msg
(
"InnoDB: Error: failed to open bitmap directory
\'
%s
\'
"
,
srv_data_home
);
return
FALSE
;
}
...
...
@@ -379,7 +379,7 @@ log_online_setup_bitmap_file_range(
if
(
UNIV_UNLIKELY
(
array_pos
>=
bitmap_files
->
count
))
{
msg
(
"InnoDB: Error: inconsistent bitmap file "
"directory
\n
"
);
"directory"
);
free
(
bitmap_files
->
files
);
return
FALSE
;
}
...
...
@@ -399,7 +399,7 @@ log_online_setup_bitmap_file_range(
if
(
UNIV_UNLIKELY
(
os_file_closedir
(
bitmap_dir
)))
{
os_file_get_last_error
(
TRUE
);
msg
(
"InnoDB: Error: cannot close
\'
%s
\'
\n
"
,
srv_data_home
);
msg
(
"InnoDB: Error: cannot close
\'
%s
\'
"
,
srv_data_home
);
free
(
bitmap_files
->
files
);
return
FALSE
;
}
...
...
@@ -450,7 +450,7 @@ log_online_open_bitmap_file_read_only(
/* Here and below assume that bitmap file names do not
contain apostrophes, thus no need for ut_print_filename(). */
msg
(
"InnoDB: Warning: error opening the changed page "
"bitmap
\'
%s
\'
\n
"
,
bitmap_file
->
name
);
"bitmap
\'
%s
\'
"
,
bitmap_file
->
name
);
return
success
;
}
...
...
@@ -494,7 +494,7 @@ log_online_diagnose_bitmap_eof(
itself. */
msg
(
"InnoDB: Warning: junk at the end of changed "
"page bitmap file
\'
%s
\'
.
\n
"
,
bitmap_file
->
name
);
"page bitmap file
\'
%s
\'
."
,
bitmap_file
->
name
);
}
if
(
UNIV_UNLIKELY
(
!
last_page_in_run
))
{
...
...
@@ -505,7 +505,7 @@ log_online_diagnose_bitmap_eof(
for the whole server */
msg
(
"InnoDB: Warning: changed page bitmap "
"file
\'
%s
\'
does not contain a complete run "
"at the end.
\n
"
,
bitmap_file
->
name
);
"at the end."
,
bitmap_file
->
name
);
return
FALSE
;
}
}
...
...
@@ -536,7 +536,7 @@ xb_msg_missing_lsn_data(
lsn_t
missing_interval_end
)
/*!<in: interval end */
{
msg
(
"mariabackup: warning: changed page data missing for LSNs between "
LSN_PF
" and "
LSN_PF
"
\n
"
,
missing_interval_start
,
LSN_PF
" and "
LSN_PF
,
missing_interval_start
,
missing_interval_end
);
}
...
...
@@ -614,7 +614,7 @@ xb_page_bitmap_init(void)
msg
(
"mariabackup: incremental backup LSN "
LSN_PF
" is larger than than the last checkpoint LSN "
LSN_PF
"
\n
"
,
bmp_start_lsn
,
bmp_end_lsn
);
,
bmp_start_lsn
,
bmp_end_lsn
);
return
NULL
;
}
...
...
@@ -698,7 +698,7 @@ xb_page_bitmap_init(void)
bmp_start_lsn
)))
{
msg
(
"mariabackup: Warning: changed page bitmap file "
"
\'
%s
\'
corrupted
\n
"
,
bitmap_file
.
name
);
"
\'
%s
\'
corrupted"
,
bitmap_file
.
name
);
rbt_free
(
result
);
free
(
bitmap_files
.
files
);
os_file_close
(
bitmap_file
.
file
);
...
...
@@ -803,7 +803,7 @@ xb_page_bitmap_init(void)
if
(
UNIV_UNLIKELY
(
!
last_page_ok
))
{
msg
(
"mariabackup: warning: changed page bitmap file "
"
\'
%s
\'
corrupted.
\n
"
,
bitmap_file
.
name
);
"
\'
%s
\'
corrupted."
,
bitmap_file
.
name
);
rbt_free
(
result
);
free
(
bitmap_files
.
files
);
os_file_close
(
bitmap_file
.
file
);
...
...
extra/mariabackup/common.h
View file @
a8a27e65
...
...
@@ -72,7 +72,7 @@ static inline int asprintf(char **strp, const char *fmt,...)
#define xb_a(expr) \
do { \
if (!(expr)) { \
msg(
"Assertion \"%s\" failed at %s:%lu\n", \
fprintf(stderr,
"Assertion \"%s\" failed at %s:%lu\n", \
#expr, __FILE__, (ulong) __LINE__); \
abort(); \
} \
...
...
@@ -86,42 +86,48 @@ static inline int asprintf(char **strp, const char *fmt,...)
#define XB_DELTA_INFO_SUFFIX ".meta"
static
inline
int
msg
(
const
char
*
fmt
,
...)
ATTRIBUTE_FORMAT
(
printf
,
1
,
2
);
static
inline
int
msg
(
const
char
*
fmt
,
...)
{
int
result
;
va_list
args
;
va_start
(
args
,
fmt
);
result
=
vfprintf
(
stderr
,
fmt
,
args
);
va_end
(
args
);
return
result
;
static
inline
int
msg1
(
unsigned
int
thread_num
,
const
char
*
fmt
,
...)
ATTRIBUTE_FORMAT
(
printf
,
2
,
3
);
static
inline
int
msg1
(
uint
thread_num
,
const
char
*
fmt
,
va_list
args
)
{
int
result
;
time_t
t
=
time
(
NULL
);
char
date
[
100
];
char
*
line
;
strftime
(
date
,
sizeof
(
date
),
"%Y-%m-%d %H:%M:%S"
,
localtime
(
&
t
));
result
=
vasprintf
(
&
line
,
fmt
,
args
);
if
(
result
!=
-
1
)
{
if
(
fmt
&&
fmt
[
strlen
(
fmt
)]
!=
'\n'
)
result
=
fprintf
(
stderr
,
"[%02u] %s %s
\n
"
,
thread_num
,
date
,
line
);
else
result
=
fprintf
(
stderr
,
"[%02u] %s %s"
,
thread_num
,
date
,
line
);
free
(
line
);
}
return
result
;
}
static
inline
int
msg_ts
(
const
char
*
fmt
,
...)
ATTRIBUTE_FORMAT
(
printf
,
1
,
2
);
static
inline
int
msg_ts
(
const
char
*
fmt
,
...)
static
inline
int
msg
(
unsigned
int
,
const
char
*
fmt
,
...)
ATTRIBUTE_FORMAT
(
printf
,
2
,
3
);
static
inline
int
msg
(
unsigned
int
thread_num
,
const
char
*
fmt
,
...)
{
int
result
;
time_t
t
=
time
(
NULL
);
char
date
[
100
];
char
*
line
;
va_list
args
;
strftime
(
date
,
sizeof
(
date
),
"%y%m%d %H:%M:%S"
,
localtime
(
&
t
));
va_start
(
args
,
fmt
);
result
=
vasprintf
(
&
line
,
fmt
,
args
);
va_end
(
args
);
if
(
result
!=
-
1
)
{
result
=
fprintf
(
stderr
,
"%s %s"
,
date
,
line
);
free
(
line
);
}
int
result
;
va_list
args
;
va_start
(
args
,
fmt
);
result
=
msg1
(
thread_num
,
fmt
,
args
);
va_end
(
args
);
return
result
;
}
return
result
;
static
inline
int
msg
(
const
char
*
fmt
,
...)
ATTRIBUTE_FORMAT
(
printf
,
1
,
2
);
static
inline
int
msg
(
const
char
*
fmt
,
...)
{
int
result
;
va_list
args
;
va_start
(
args
,
fmt
);
result
=
msg1
(
0
,
fmt
,
args
);
va_end
(
args
);
return
result
;
}
/* Use POSIX_FADV_NORMAL when available */
#ifdef POSIX_FADV_NORMAL
...
...
extra/mariabackup/datasink.c
→
extra/mariabackup/datasink.c
c
View file @
a8a27e65
...
...
@@ -71,7 +71,7 @@ ds_create(const char *root, ds_type_t type)
ds
=
&
datasink_buffer
;
break
;
default:
msg
(
"Unknown datasink type: %d
\n
"
,
type
);
msg
(
"Unknown datasink type: %d"
,
type
);
xb_ad
(
0
);
return
NULL
;
}
...
...
@@ -80,7 +80,7 @@ ds_create(const char *root, ds_type_t type)
if
(
ctxt
!=
NULL
)
{
ctxt
->
datasink
=
ds
;
}
else
{
msg
(
"Error: failed to initialize datasink.
\n
"
);
msg
(
"Error: failed to initialize datasink."
);
exit
(
EXIT_FAILURE
);
}
...
...
extra/mariabackup/ds_archive.c
→
extra/mariabackup/ds_archive.c
c
View file @
a8a27e65
File moved
extra/mariabackup/ds_buffer.c
→
extra/mariabackup/ds_buffer.c
c
View file @
a8a27e65
...
...
@@ -71,7 +71,7 @@ buffer_init(const char *root)
ds_ctxt_t
*
ctxt
;
ds_buffer_ctxt_t
*
buffer_ctxt
;
ctxt
=
my_malloc
(
sizeof
(
ds_ctxt_t
)
+
sizeof
(
ds_buffer_ctxt_t
),
ctxt
=
(
ds_ctxt_t
*
)
my_malloc
(
sizeof
(
ds_ctxt_t
)
+
sizeof
(
ds_buffer_ctxt_t
),
MYF
(
MY_FAE
));
buffer_ctxt
=
(
ds_buffer_ctxt_t
*
)
(
ctxt
+
1
);
buffer_ctxt
->
buffer_size
=
DS_DEFAULT_BUFFER_SIZE
;
...
...
extra/mariabackup/ds_compress.c
→
extra/mariabackup/ds_compress.c
c
View file @
a8a27e65
...
...
@@ -95,7 +95,7 @@ compress_init(const char *root)
/* Create and initialize the worker threads */
threads
=
create_worker_threads
(
xtrabackup_compress_threads
);
if
(
threads
==
NULL
)
{
msg
(
"compress: failed to create worker threads.
\n
"
);
msg
(
"compress: failed to create worker threads."
);
return
NULL
;
}
...
...
@@ -243,7 +243,7 @@ compress_write(ds_file_t *file, const uchar *buf, size_t len)
write_uint64_le
(
dest_file
,
comp_file
->
bytes_processed
))
{
msg
(
"compress: write to the destination stream "
"failed.
\n
"
);
"failed."
);
return
1
;
}
...
...
@@ -253,7 +253,7 @@ compress_write(ds_file_t *file, const uchar *buf, size_t len)
ds_write
(
dest_file
,
threads
[
i
].
to
,
threads
[
i
].
to_len
))
{
msg
(
"compress: write to the destination stream "
"failed.
\n
"
);
"failed."
);
return
1
;
}
...
...
@@ -367,7 +367,7 @@ create_worker_threads(uint n)
if
(
pthread_create
(
&
thd
->
id
,
NULL
,
compress_worker_thread_func
,
thd
))
{
msg
(
"compress: pthread_create() failed: "
"errno = %d
\n
"
,
errno
);
"errno = %d"
,
errno
);
goto
err
;
}
}
...
...
extra/mariabackup/ds_stdout.c
→
extra/mariabackup/ds_stdout.c
c
View file @
a8a27e65
...
...
@@ -48,7 +48,7 @@ stdout_init(const char *root)
{
ds_ctxt_t
*
ctxt
;
ctxt
=
my_malloc
(
sizeof
(
ds_ctxt_t
),
MYF
(
MY_FAE
));
ctxt
=
(
ds_ctxt_t
*
)
my_malloc
(
sizeof
(
ds_ctxt_t
),
MYF
(
MY_FAE
));
ctxt
->
root
=
my_strdup
(
root
,
MYF
(
MY_FAE
));
...
...
extra/mariabackup/ds_tmpfile.c
→
extra/mariabackup/ds_tmpfile.c
c
View file @
a8a27e65
...
...
@@ -60,7 +60,7 @@ tmpfile_init(const char *root)
ds_ctxt_t
*
ctxt
;
ds_tmpfile_ctxt_t
*
tmpfile_ctxt
;
ctxt
=
my_malloc
(
sizeof
(
ds_ctxt_t
)
+
sizeof
(
ds_tmpfile_ctxt_t
),
ctxt
=
(
ds_ctxt_t
*
)
my_malloc
(
sizeof
(
ds_ctxt_t
)
+
sizeof
(
ds_tmpfile_ctxt_t
),
MYF
(
MY_FAE
));
tmpfile_ctxt
=
(
ds_tmpfile_ctxt_t
*
)
(
ctxt
+
1
);
tmpfile_ctxt
->
file_list
=
NULL
;
...
...
@@ -191,11 +191,11 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
/* Walk the files in the order they have been added */
list
=
list_reverse
(
list
);
while
(
list
!=
NULL
)
{
tmp_file
=
list
->
data
;
tmp_file
=
(
ds_tmp_file_t
*
)
list
->
data
;
/* Stat the file to replace size and mtime on the original
* mystat struct */
if
(
my_fstat
(
tmp_file
->
fd
,
&
mystat
,
MYF
(
0
)))
{
msg
(
"error: my_fstat() failed.
\n
"
);
msg
(
"error: my_fstat() failed."
);
exit
(
EXIT_FAILURE
);
}
tmp_file
->
mystat
.
st_size
=
mystat
.
st_size
;
...
...
@@ -205,7 +205,7 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
&
tmp_file
->
mystat
);
if
(
dst_file
==
NULL
)
{
msg
(
"error: could not stream a temporary file to "
"'%s'
\n
"
,
tmp_file
->
orig_path
);
"'%s'"
,
tmp_file
->
orig_path
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -213,17 +213,17 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
posix_fadvise
(
tmp_file
->
fd
,
0
,
0
,
POSIX_FADV_SEQUENTIAL
);
if
(
my_seek
(
tmp_file
->
fd
,
0
,
SEEK_SET
,
MYF
(
0
))
==
MY_FILEPOS_ERROR
)
{
msg
(
"error: my_seek() failed for '%s', errno = %d.
\n
"
,
msg
(
"error: my_seek() failed for '%s', errno = %d."
,
tmp_file
->
file
->
path
,
my_errno
);
exit
(
EXIT_FAILURE
);
}
offset
=
0
;
while
((
bytes
=
my_read
(
tmp_file
->
fd
,
buf
,
buf_size
,
while
((
bytes
=
my_read
(
tmp_file
->
fd
,
(
unsigned
char
*
)
buf
,
buf_size
,
MYF
(
MY_WME
)))
>
0
)
{
posix_fadvise
(
tmp_file
->
fd
,
offset
,
buf_size
,
POSIX_FADV_DONTNEED
);
offset
+=
buf_size
;
if
(
ds_write
(
dst_file
,
buf
,
bytes
))
{
msg
(
"error: cannot write to stream for '%s'.
\n
"
,
msg
(
"error: cannot write to stream for '%s'."
,
tmp_file
->
orig_path
);
exit
(
EXIT_FAILURE
);
}
...
...
extra/mariabackup/ds_xbstream.c
→
extra/mariabackup/ds_xbstream.c
c
View file @
a8a27e65
...
...
@@ -79,18 +79,18 @@ xbstream_init(const char *root __attribute__((unused)))
ds_stream_ctxt_t
*
stream_ctxt
;
xb_wstream_t
*
xbstream
;
ctxt
=
my_malloc
(
sizeof
(
ds_ctxt_t
)
+
sizeof
(
ds_stream_ctxt_t
),
ctxt
=
(
ds_ctxt_t
*
)
my_malloc
(
sizeof
(
ds_ctxt_t
)
+
sizeof
(
ds_stream_ctxt_t
),
MYF
(
MY_FAE
));
stream_ctxt
=
(
ds_stream_ctxt_t
*
)(
ctxt
+
1
);
if
(
pthread_mutex_init
(
&
stream_ctxt
->
mutex
,
NULL
))
{
msg
(
"xbstream_init: pthread_mutex_init() failed.
\n
"
);
msg
(
"xbstream_init: pthread_mutex_init() failed."
);
goto
err
;
}
xbstream
=
xb_stream_write_new
();
if
(
xbstream
==
NULL
)
{
msg
(
"xb_stream_write_new() failed.
\n
"
);
msg
(
"xb_stream_write_new() failed."
);
goto
err
;
}
stream_ctxt
->
xbstream
=
xbstream
;
...
...
@@ -143,7 +143,7 @@ xbstream_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
my_xbstream_write_callback
);
if
(
xbstream_file
==
NULL
)
{
msg
(
"xb_stream_write_open() failed.
\n
"
);
msg
(
"xb_stream_write_open() failed."
);
goto
err
;
}
...
...
@@ -177,7 +177,7 @@ xbstream_write(ds_file_t *file, const uchar *buf, size_t len)
xbstream_file
=
stream_file
->
xbstream_file
;
if
(
xb_stream_write_data
(
xbstream_file
,
buf
,
len
))
{
msg
(
"xb_stream_write_data() failed.
\n
"
);
msg
(
"xb_stream_write_data() failed."
);
return
1
;
}
...
...
@@ -209,7 +209,7 @@ xbstream_deinit(ds_ctxt_t *ctxt)
stream_ctxt
=
(
ds_stream_ctxt_t
*
)
ctxt
->
ptr
;
if
(
xb_stream_write_done
(
stream_ctxt
->
xbstream
))
{
msg
(
"xb_stream_done() failed.
\n
"
);
msg
(
"xb_stream_done() failed."
);
}
if
(
stream_ctxt
->
dest_file
)
{
...
...
extra/mariabackup/encryption_plugin.cc
View file @
a8a27e65
...
...
@@ -45,7 +45,7 @@ static std::string get_encryption_plugin_from_cnf()
FILE
*
f
=
fopen
(
"backup-my.cnf"
,
"r"
);
if
(
!
f
)
{
msg
(
"
cannot open backup-my.cnf for reading
\n
"
);
msg
(
"
Can't open backup-my.cnf for reading
"
);
exit
(
EXIT_FAILURE
);
}
char
line
[
512
];
...
...
@@ -167,7 +167,7 @@ void encryption_plugin_prepare_init(int argc, char **argv)
std
::
string
plugin_load
=
get_encryption_plugin_from_cnf
();
if
(
plugin_load
.
size
())
{
msg
(
"Loading encryption plugin from %s
\n
"
,
plugin_load
.
c_str
());
msg
(
"Loading encryption plugin from %s"
,
plugin_load
.
c_str
());
}
else
{
...
...
@@ -193,9 +193,9 @@ static void encryption_plugin_init(int argc, char **argv)
{
/* Patch optional and mandatory plugins, we only need to load the one in xb_plugin_load. */
mysql_optional_plugins
[
0
]
=
mysql_mandatory_plugins
[
0
]
=
0
;
msg
(
"Loading encryption plugin
\n
"
);
msg
(
"Loading encryption plugin"
);
for
(
int
i
=
1
;
i
<
argc
;
i
++
)
msg
(
"
\t
Encryption plugin parameter : '%s'
\n
"
,
argv
[
i
]);
msg
(
"
\t
Encryption plugin parameter : '%s'"
,
argv
[
i
]);
plugin_init
(
&
argc
,
argv
,
PLUGIN_INIT_SKIP_PLUGIN_TABLE
);
}
extra/mariabackup/fil_cur.cc
View file @
a8a27e65
...
...
@@ -174,9 +174,8 @@ xb_fil_cur_open(
/* The following call prints an error message */
os_file_get_last_error
(
TRUE
);
msg
(
"[%02u] mariabackup: error: cannot open "
"tablespace %s
\n
"
,
thread_n
,
cursor
->
abs_path
);
msg
(
thread_n
,
"mariabackup: error: cannot open "
"tablespace %s"
,
cursor
->
abs_path
);
return
(
XB_FIL_CUR_SKIP
);
}
...
...
@@ -217,8 +216,8 @@ xb_fil_cur_open(
cursor
->
statinfo
.
st_size
=
(
ulonglong
)
max_file_size
;
}
if
(
err
)
{
msg
(
"[%02u] mariabackup: error: cannot fstat %s
\n
"
,
thread_n
,
cursor
->
abs_path
);
msg
(
thread_n
,
"mariabackup: error: cannot fstat %s
"
,
cursor
->
abs_path
);
xb_fil_cur_close
(
cursor
);
...
...
@@ -262,8 +261,6 @@ xb_fil_cur_open(
mutex_exit
(
&
fil_system
->
mutex
);
}
/*msg("crypt: %s,%u\n", node->name, node->space->crypt_data->type);*/
cursor
->
space_size
=
(
ulint
)(
cursor
->
statinfo
.
st_size
/
page_size
.
physical
());
...
...
@@ -413,14 +410,8 @@ xb_fil_cur_read(
&&
offset
+
to_read
==
cursor
->
statinfo
.
st_size
)
{
if
(
to_read
<
(
ib_int64_t
)
page_size
)
{
msg
(
"[%02u] mariabackup: Warning: junk at the end of "
"%s:
\n
"
,
cursor
->
thread_n
,
cursor
->
abs_path
);
msg
(
"[%02u] mariabackup: Warning: offset = %llu, "
"to_read = %llu
\n
"
,
cursor
->
thread_n
,
(
unsigned
long
long
)
offset
,
(
unsigned
long
long
)
to_read
);
msg
(
cursor
->
thread_n
,
"Warning: junk at the end of "
"%s, offset = %llu, to_read = %llu"
,
cursor
->
abs_path
,
(
ulonglong
)
offset
,
(
ulonglong
)
to_read
);
return
(
XB_FIL_CUR_EOF
);
}
...
...
@@ -464,20 +455,17 @@ xb_fil_cur_read(
retry_count
--
;
if
(
retry_count
==
0
)
{
msg
(
"[%02u] mariabackup: "
msg
(
cursor
->
thread_n
,
"Error: failed to read page after "
"10 retries. File %s seems to be "
"corrupted.
\n
"
,
cursor
->
thread_n
,
cursor
->
abs_path
);
"corrupted."
,
cursor
->
abs_path
);
ret
=
XB_FIL_CUR_ERROR
;
buf_page_print
(
page
,
cursor
->
page_size
);
break
;
}
msg
(
"[%02u] mariabackup: "
"Database page corruption detected at page "
ULINTPF
", retrying...
\n
"
,
cursor
->
thread_n
,
msg
(
cursor
->
thread_n
,
"Database page corruption detected at page "
ULINTPF
", retrying..."
,
page_no
);
os_thread_sleep
(
100000
);
goto
read_retry
;
}
...
...
extra/mariabackup/innobackupex.cc
View file @
a8a27e65
...
...
@@ -738,7 +738,7 @@ ibx_get_one_option(int optid,
exit
(
0
);
break
;
case
'v'
:
msg
(
"innobackupex version %s %s (%s)
\n
"
,
printf
(
"innobackupex version %s %s (%s)
"
,
MYSQL_SERVER_VERSION
,
SYSTEM_TYPE
,
MACHINE_TYPE
);
exit
(
0
);
...
...
extra/mariabackup/write_filt.cc
View file @
a8a27e65
...
...
@@ -79,9 +79,8 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name,
cp
->
delta_buf
=
(
unsigned
char
*
)
os_mem_alloc_large
(
&
cp
->
delta_buf_size
);
if
(
!
cp
->
delta_buf
)
{
msg
(
"[%02u] mariabackup: Error: "
"cannot allocate %zu bytes
\n
"
,
cursor
->
thread_n
,
(
size_t
)
cp
->
delta_buf_size
);
msg
(
cursor
->
thread_n
,
"Can't allocate %zu bytes"
,
(
size_t
)
cp
->
delta_buf_size
);
return
(
FALSE
);
}
...
...
@@ -90,9 +89,9 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name,
XB_DELTA_INFO_SUFFIX
);
const
xb_delta_info_t
info
(
cursor
->
page_size
,
cursor
->
space_id
);
if
(
!
xb_write_delta_metadata
(
meta_name
,
&
info
))
{
msg
(
"[%02u] mariabackup:
Error: "
"failed to write meta info for %s
\n
"
,
cursor
->
thread_n
,
cursor
->
rel_path
);
msg
(
cursor
->
thread_n
,
"
Error: "
"failed to write meta info for %s"
,
cursor
->
rel_path
);
return
(
FALSE
);
}
...
...
extra/mariabackup/xbstream.c
→
extra/mariabackup/xbstream.c
c
View file @
a8a27e65
...
...
@@ -45,7 +45,6 @@ datasink_t datasink_archive;
datasink_t
datasink_xbstream
;
datasink_t
datasink_compress
;
datasink_t
datasink_tmpfile
;
datasink_t
datasink_buffer
;
static
run_mode_t
opt_mode
;
static
char
*
opt_directory
=
NULL
;
...
...
@@ -106,7 +105,7 @@ main(int argc, char **argv)
}
if
(
opt_mode
==
RUN_MODE_NONE
)
{
msg
(
"%s: either -c or -x must be specified.
\n
"
,
my_progname
);
msg
(
"%s: either -c or -x must be specified."
,
my_progname
);
goto
err
;
}
...
...
@@ -184,7 +183,7 @@ int
set_run_mode
(
run_mode_t
mode
)
{
if
(
opt_mode
!=
RUN_MODE_NONE
)
{
msg
(
"%s: can't set specify both -c and -x.
\n
"
,
my_progname
);
msg
(
"%s: can't set specify both -c and -x."
,
my_progname
);
return
1
;
}
...
...
@@ -233,7 +232,7 @@ stream_one_file(File file, xb_wstream_file_t *xbfile)
while
((
bytes
=
(
ssize_t
)
my_read
(
file
,
buf
,
XBSTREAM_BUFFER_SIZE
,
MYF
(
MY_WME
)))
>
0
)
{
if
(
xb_stream_write_data
(
xbfile
,
buf
,
bytes
))
{
msg
(
"%s: xb_stream_write_data() failed.
\n
"
,
msg
(
"%s: xb_stream_write_data() failed."
,
my_progname
);
my_free
(
buf
);
return
1
;
...
...
@@ -262,13 +261,13 @@ mode_create(int argc, char **argv)
xb_wstream_t
*
stream
;
if
(
argc
<
1
)
{
msg
(
"%s: no files are specified.
\n
"
,
my_progname
);
msg
(
"%s: no files are specified."
,
my_progname
);
return
1
;
}
stream
=
xb_stream_write_new
();
if
(
stream
==
NULL
)
{
msg
(
"%s: xb_stream_write_new() failed.
\n
"
,
my_progname
);
msg
(
"%s: xb_stream_write_new() failed."
,
my_progname
);
return
1
;
}
...
...
@@ -281,13 +280,13 @@ mode_create(int argc, char **argv)
goto
err
;
}
if
(
!
MY_S_ISREG
(
mystat
.
st_mode
))
{
msg
(
"%s: %s is not a regular file, exiting.
\n
"
,
msg
(
"%s: %s is not a regular file, exiting."
,
my_progname
,
filepath
);
goto
err
;
}
if
((
src_file
=
my_open
(
filepath
,
O_RDONLY
,
MYF
(
MY_WME
)))
<
0
)
{
msg
(
"%s: failed to open %s.
\n
"
,
my_progname
,
filepath
);
msg
(
"%s: failed to open %s."
,
my_progname
,
filepath
);
goto
err
;
}
...
...
@@ -297,7 +296,7 @@ mode_create(int argc, char **argv)
}
if
(
opt_verbose
)
{
msg
(
"%s
\n
"
,
filepath
);
msg
(
"%s"
,
filepath
);
}
if
(
stream_one_file
(
src_file
,
file
)
||
...
...
@@ -338,12 +337,12 @@ file_entry_new(extract_ctxt_t *ctxt, const char *path, uint pathlen)
file
=
ds_open
(
ctxt
->
ds_ctxt
,
path
,
NULL
);
if
(
file
==
NULL
)
{
msg
(
"%s: failed to create file.
\n
"
,
my_progname
);
msg
(
"%s: failed to create file."
,
my_progname
);
goto
err
;
}
if
(
opt_verbose
)
{
msg
(
"%s
\n
"
,
entry
->
path
);
msg
(
"%s"
,
entry
->
path
);
}
entry
->
file
=
file
;
...
...
@@ -425,7 +424,7 @@ extract_worker_thread_func(void *arg)
break
;
}
if
(
my_hash_insert
(
ctxt
->
filehash
,
(
uchar
*
)
entry
))
{
msg
(
"%s: my_hash_insert() failed.
\n
"
,
msg
(
"%s: my_hash_insert() failed."
,
my_progname
);
pthread_mutex_unlock
(
ctxt
->
mutex
);
break
;
...
...
@@ -454,7 +453,7 @@ extract_worker_thread_func(void *arg)
if
(
entry
->
offset
!=
chunk
.
offset
)
{
msg
(
"%s: out-of-order chunk: real offset = 0x%llx, "
"expected offset = 0x%llx
\n
"
,
my_progname
,
"expected offset = 0x%llx"
,
my_progname
,
chunk
.
offset
,
entry
->
offset
);
pthread_mutex_unlock
(
&
entry
->
mutex
);
res
=
XB_STREAM_READ_ERROR
;
...
...
@@ -462,7 +461,7 @@ extract_worker_thread_func(void *arg)
}
if
(
ds_write
(
entry
->
file
,
chunk
.
data
,
chunk
.
length
))
{
msg
(
"%s: my_write() failed.
\n
"
,
my_progname
);
msg
(
"%s: my_write() failed."
,
my_progname
);
pthread_mutex_unlock
(
&
entry
->
mutex
);
res
=
XB_STREAM_READ_ERROR
;
break
;
...
...
@@ -500,12 +499,12 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
if
(
my_hash_init
(
&
filehash
,
&
my_charset_bin
,
START_FILE_HASH_SIZE
,
0
,
0
,
(
my_hash_get_key
)
get_file_entry_key
,
(
my_hash_free_key
)
file_entry_free
,
MYF
(
0
)))
{
msg
(
"%s: failed to initialize file hash.
\n
"
,
my_progname
);
msg
(
"%s: failed to initialize file hash."
,
my_progname
);
return
1
;
}
if
(
pthread_mutex_init
(
&
mutex
,
NULL
))
{
msg
(
"%s: failed to initialize mutex.
\n
"
,
my_progname
);
msg
(
"%s: failed to initialize mutex."
,
my_progname
);
my_hash_free
(
&
filehash
);
return
1
;
}
...
...
@@ -520,7 +519,7 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
stream
=
xb_stream_read_new
();
if
(
stream
==
NULL
)
{
msg
(
"%s: xb_stream_read_new() failed.
\n
"
,
my_progname
);
msg
(
"%s: xb_stream_read_new() failed."
,
my_progname
);
pthread_mutex_destroy
(
&
mutex
);
ret
=
1
;
goto
exit
;
...
...
@@ -531,8 +530,8 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
ctxt
.
ds_ctxt
=
ds_ctxt
;
ctxt
.
mutex
=
&
mutex
;
tids
=
calloc
(
n_threads
,
sizeof
(
pthread_t
));
retvals
=
calloc
(
n_threads
,
sizeof
(
void
*
));
tids
=
(
pthread_t
*
)
calloc
(
n_threads
,
sizeof
(
pthread_t
));
retvals
=
(
void
**
)
calloc
(
n_threads
,
sizeof
(
void
*
));
for
(
i
=
0
;
i
<
n_threads
;
i
++
)
pthread_create
(
tids
+
i
,
NULL
,
extract_worker_thread_func
,
...
...
extra/mariabackup/xbstream.h
View file @
a8a27e65
...
...
@@ -101,6 +101,6 @@ xb_rstream_result_t xb_stream_read_chunk(xb_rstream_t *stream,
int
xb_stream_read_done
(
xb_rstream_t
*
stream
);
in
t
xb_stream_validate_checksum
(
xb_rstream_chunk_t
*
chunk
);
xb_rstream_result_
t
xb_stream_validate_checksum
(
xb_rstream_chunk_t
*
chunk
);
#endif
extra/mariabackup/xbstream_read.c
→
extra/mariabackup/xbstream_read.c
c
View file @
a8a27e65
...
...
@@ -67,15 +67,15 @@ validate_chunk_type(uchar code)
}
}
in
t
xb_rstream_result_
t
xb_stream_validate_checksum
(
xb_rstream_chunk_t
*
chunk
)
{
ulong
checksum
;
checksum
=
crc32_iso3309
(
0
,
chunk
->
data
,
(
uint
)
chunk
->
length
);
checksum
=
crc32_iso3309
(
0
,
(
unsigned
char
*
)
chunk
->
data
,
(
uint
)
chunk
->
length
);
if
(
checksum
!=
chunk
->
checksum
)
{
msg
(
"xb_stream_read_chunk(): invalid checksum at offset "
"0x%llx: expected 0x%lx, read 0x%lx.
\n
"
,
"0x%llx: expected 0x%lx, read 0x%lx."
,
(
ulonglong
)
chunk
->
checksum_offset
,
chunk
->
checksum
,
checksum
);
return
XB_STREAM_READ_ERROR
;
...
...
@@ -86,8 +86,8 @@ xb_stream_validate_checksum(xb_rstream_chunk_t *chunk)
#define F_READ(buf,len) \
do { \
if (xb_read_full(fd, buf, len) < len) { \
msg("xb_stream_read_chunk(): my_read() failed.
\n
"); \
if (xb_read_full(fd,
(uchar *)
buf, len) < len) { \
msg("xb_stream_read_chunk(): my_read() failed."); \
goto err; \
} \
} while (0)
...
...
@@ -111,7 +111,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
return
XB_STREAM_READ_EOF
;
}
else
if
(
tbytes
<
CHUNK_HEADER_CONSTANT_LEN
)
{
msg
(
"xb_stream_read_chunk(): unexpected end of stream at "
"offset 0x%llx.
\n
"
,
stream
->
offset
);
"offset 0x%llx."
,
stream
->
offset
);
goto
err
;
}
...
...
@@ -120,7 +120,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
/* Chunk magic value */
if
(
memcmp
(
tmpbuf
,
XB_STREAM_CHUNK_MAGIC
,
8
))
{
msg
(
"xb_stream_read_chunk(): wrong chunk magic at offset "
"0x%llx.
\n
"
,
(
ulonglong
)
stream
->
offset
);
"0x%llx."
,
(
ulonglong
)
stream
->
offset
);
goto
err
;
}
ptr
+=
8
;
...
...
@@ -135,7 +135,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
if
(
chunk
->
type
==
XB_CHUNK_TYPE_UNKNOWN
&&
!
(
chunk
->
flags
&
XB_STREAM_FLAG_IGNORABLE
))
{
msg
(
"xb_stream_read_chunk(): unknown chunk type 0x%lu at "
"offset 0x%llx.
\n
"
,
(
ulong
)
*
ptr
,
"offset 0x%llx."
,
(
ulong
)
*
ptr
,
(
ulonglong
)
stream
->
offset
);
goto
err
;
}
...
...
@@ -146,7 +146,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
pathlen
=
uint4korr
(
ptr
);
if
(
pathlen
>=
FN_REFLEN
)
{
msg
(
"xb_stream_read_chunk(): path length (%lu) is too large at "
"offset 0x%llx.
\n
"
,
(
ulong
)
pathlen
,
stream
->
offset
);
"offset 0x%llx."
,
(
ulong
)
pathlen
,
stream
->
offset
);
goto
err
;
}
chunk
->
pathlen
=
pathlen
;
...
...
@@ -170,7 +170,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
ullval
=
uint8korr
(
tmpbuf
);
if
(
ullval
>
(
ulonglong
)
SIZE_T_MAX
)
{
msg
(
"xb_stream_read_chunk(): chunk length is too large at "
"offset 0x%llx: 0x%llx.
\n
"
,
(
ulonglong
)
stream
->
offset
,
"offset 0x%llx: 0x%llx."
,
(
ulonglong
)
stream
->
offset
,
ullval
);
goto
err
;
}
...
...
@@ -181,7 +181,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
ullval
=
uint8korr
(
tmpbuf
+
8
);
if
(
ullval
>
(
ulonglong
)
MY_OFF_T_MAX
)
{
msg
(
"xb_stream_read_chunk(): chunk offset is too large at "
"offset 0x%llx: 0x%llx.
\n
"
,
(
ulonglong
)
stream
->
offset
,
"offset 0x%llx: 0x%llx."
,
(
ulonglong
)
stream
->
offset
,
ullval
);
goto
err
;
}
...
...
@@ -194,7 +194,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
MYF
(
MY_WME
|
MY_ALLOW_ZERO_PTR
));
if
(
chunk
->
data
==
NULL
)
{
msg
(
"xb_stream_read_chunk(): failed to increase buffer "
"to %lu bytes.
\n
"
,
(
ulong
)
chunk
->
length
);
"to %lu bytes."
,
(
ulong
)
chunk
->
length
);
goto
err
;
}
chunk
->
buflen
=
chunk
->
length
;
...
...
extra/mariabackup/xbstream_write.c
→
extra/mariabackup/xbstream_write.c
c
View file @
a8a27e65
...
...
@@ -55,7 +55,7 @@ xb_stream_default_write_callback(xb_wstream_file_t *file __attribute__((unused))
void
*
userdata
__attribute__
((
unused
)),
const
void
*
buf
,
size_t
len
)
{
if
(
my_write
(
my_fileno
(
stdout
),
buf
,
len
,
MYF
(
MY_WME
|
MY_NABP
)))
if
(
my_write
(
my_fileno
(
stdout
),
(
const
uchar
*
)
buf
,
len
,
MYF
(
MY_WME
|
MY_NABP
)))
return
-
1
;
return
len
;
}
...
...
@@ -83,7 +83,7 @@ xb_stream_write_open(xb_wstream_t *stream, const char *path,
path_len
=
strlen
(
path
);
if
(
path_len
>
FN_REFLEN
)
{
msg
(
"xb_stream_write_open(): file path is too long.
\n
"
);
msg
(
"xb_stream_write_open(): file path is too long."
);
return
NULL
;
}
...
...
@@ -216,7 +216,7 @@ xb_stream_write_chunk(xb_wstream_file_t *file, const void *buf, size_t len)
int8store
(
ptr
,
len
);
/* Payload length */
ptr
+=
8
;
checksum
=
crc32_iso3309
(
0
,
buf
,
(
uint
)
len
);
/* checksum */
checksum
=
crc32_iso3309
(
0
,
(
const
uchar
*
)
buf
,
(
uint
)
len
);
/* checksum */
pthread_mutex_lock
(
&
stream
->
mutex
);
...
...
extra/mariabackup/xtrabackup.cc
View file @
a8a27e65
...
...
@@ -185,7 +185,7 @@ xb_stream_fmt_t xtrabackup_stream_fmt = XB_STREAM_FMT_NONE;
ibool
xtrabackup_stream
=
FALSE
;
const
char
*
xtrabackup_compress_alg
=
NULL
;
ibool
xtrabackup_compress
=
FALSE
;
uint
xtrabackup_compress
=
FALSE
;
uint
xtrabackup_compress_threads
;
ulonglong
xtrabackup_compress_chunk_size
=
0
;
...
...
@@ -531,13 +531,13 @@ static os_event_t dbug_start_query_thread(
if
(
exists
)
{
goto
end
;
}
msg
_ts
(
"Waiting for query '%s' on connection %lu to "
msg
(
"Waiting for query '%s' on connection %lu to "
" reach state '%s'"
,
query
,
mysql_thread_id
(
par
->
con
),
wait_state
);
my_sleep
(
1000
);
}
end:
msg
_ts
(
"query '%s' on connection %lu reached state '%s'"
,
query
,
msg
(
"query '%s' on connection %lu reached state '%s'"
,
query
,
mysql_thread_id
(
par
->
con
),
wait_state
);
return
par
->
done_event
;
}
...
...
@@ -608,16 +608,16 @@ static void backup_file_op(ulint space_id, const byte* flags,
if
(
flags
)
{
ddl_tracker
.
id_to_name
[
space_id
]
=
filename_to_spacename
(
name
,
len
);
msg
(
"DDL tracking : create %zu
\"
%.*s
\"
: %x
\n
"
,
msg
(
"DDL tracking : create %zu
\"
%.*s
\"
: %x"
,
space_id
,
int
(
len
),
name
,
mach_read_from_4
(
flags
));
}
else
if
(
new_name
)
{
ddl_tracker
.
id_to_name
[
space_id
]
=
filename_to_spacename
(
new_name
,
new_len
);
msg
(
"DDL tracking : rename %zu
\"
%.*s
\"
,
\"
%.*s
\"
\n
"
,
msg
(
"DDL tracking : rename %zu
\"
%.*s
\"
,
\"
%.*s
\"
"
,
space_id
,
int
(
len
),
name
,
int
(
new_len
),
new_name
);
}
else
{
ddl_tracker
.
drops
.
insert
(
space_id
);
msg
(
"DDL tracking : delete %zu
\"
%.*s
\"
\n
"
,
space_id
,
int
(
len
),
name
);
msg
(
"DDL tracking : delete %zu
\"
%.*s
\"
"
,
space_id
,
int
(
len
),
name
);
}
pthread_mutex_unlock
(
&
backup_mutex
);
}
...
...
@@ -639,13 +639,13 @@ static void backup_file_op_fail(ulint space_id, const byte* flags,
ut_a
(
opt_no_lock
);
bool
fail
;
if
(
flags
)
{
msg
(
"DDL tracking : create %zu
\"
%.*s
\"
: %x
\n
"
,
msg
(
"DDL tracking : create %zu
\"
%.*s
\"
: %x"
,
space_id
,
int
(
len
),
name
,
mach_read_from_4
(
flags
));
std
::
string
spacename
=
filename_to_spacename
(
name
,
len
);
fail
=
!
check_if_skip_table
(
spacename
.
c_str
());
}
else
if
(
new_name
)
{
msg
(
"DDL tracking : rename %zu
\"
%.*s
\"
,
\"
%.*s
\"
\n
"
,
msg
(
"DDL tracking : rename %zu
\"
%.*s
\"
,
\"
%.*s
\"
"
,
space_id
,
int
(
len
),
name
,
int
(
new_len
),
new_name
);
std
::
string
spacename
=
filename_to_spacename
(
name
,
len
);
std
::
string
new_spacename
=
filename_to_spacename
(
new_name
,
new_len
);
...
...
@@ -654,11 +654,11 @@ static void backup_file_op_fail(ulint space_id, const byte* flags,
else
{
std
::
string
spacename
=
filename_to_spacename
(
name
,
len
);
fail
=
!
check_if_skip_table
(
spacename
.
c_str
());
msg
(
"DDL tracking : delete %zu
\"
%.*s
\"
\n
"
,
space_id
,
int
(
len
),
name
);
msg
(
"DDL tracking : delete %zu
\"
%.*s
\"
"
,
space_id
,
int
(
len
),
name
);
}
if
(
fail
)
{
msg
(
"ERROR : DDL operation detected in the late phase of backup."
"Backup is inconsistent. Remove --no-lock option to fix.
\n
"
);
"Backup is inconsistent. Remove --no-lock option to fix."
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -679,10 +679,10 @@ static void backup_optimized_ddl_op(ulint space_id)
*/
static
void
backup_optimized_ddl_op_fail
(
ulint
space_id
)
{
ut_a
(
opt_no_lock
);
msg
(
"DDL tracking : optimized DDL on space %zu
\n
"
,
space_id
);
msg
(
"DDL tracking : optimized DDL on space %zu"
,
space_id
);
if
(
ddl_tracker
.
tables_in_backup
.
find
(
space_id
)
!=
ddl_tracker
.
tables_in_backup
.
end
())
{
msg
(
"ERROR : Optimized DDL operation detected in the late phase of backup."
"Backup is inconsistent. Remove --no-lock option to fix.
\n
"
);
"Backup is inconsistent. Remove --no-lock option to fix."
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -691,7 +691,7 @@ static void backup_optimized_ddl_op_fail(ulint space_id) {
/** Callback whenever MLOG_TRUNCATE happens. */
static
void
backup_truncate_fail
()
{
msg
(
"mariabackup: Incompatible TRUNCATE operation detected.%s
\n
"
,
msg
(
"mariabackup: Incompatible TRUNCATE operation detected.%s"
,
opt_lock_ddl_per_table
?
""
:
" Use --lock-ddl-per-table to lock all tables before backup."
);
...
...
@@ -1457,14 +1457,14 @@ debug_sync_point(const char *name)
xtrabackup_target_dir
);
fp
=
fopen
(
pid_path
,
"w"
);
if
(
fp
==
NULL
)
{
msg
(
"mariabackup: Error: cannot open %s
\n
"
,
pid_path
);
msg
(
"mariabackup: Error: cannot open %s"
,
pid_path
);
exit
(
EXIT_FAILURE
);
}
fprintf
(
fp
,
"%u
\n
"
,
(
uint
)
pid
);
fclose
(
fp
);
msg
(
"mariabackup: DEBUG: Suspending at debug sync point '%s'. "
"Resume with 'kill -SIGCONT %u'.
\n
"
,
name
,
(
uint
)
pid
);
"Resume with 'kill -SIGCONT %u'."
,
name
,
(
uint
)
pid
);
debug_sync_resumed
=
0
;
kill
(
pid
,
SIGSTOP
);
...
...
@@ -1473,7 +1473,7 @@ debug_sync_point(const char *name)
}
/* On resume */
msg
(
"mariabackup: DEBUG: removing the pid file.
\n
"
);
msg
(
"mariabackup: DEBUG: removing the pid file."
);
my_delete
(
pid_path
,
MYF
(
MY_WME
));
#endif
}
...
...
@@ -1593,7 +1593,7 @@ static const char *xb_server_default_groups[]=
static
void
print_version
(
void
)
{
msg
(
"%s based on MariaDB server %s %s (%s)
\n
"
,
msg
(
"%s based on MariaDB server %s %s (%s)"
,
my_progname
,
MYSQL_SERVER_VERSION
,
SYSTEM_TYPE
,
MACHINE_TYPE
);
}
...
...
@@ -1717,7 +1717,7 @@ xb_get_one_option(int optid,
xtrabackup_stream_fmt
=
XB_STREAM_FMT_XBSTREAM
;
else
{
msg
(
"Invalid --stream argument: %s
\n
"
,
argument
);
msg
(
"Invalid --stream argument: %s"
,
argument
);
return
1
;
}
xtrabackup_stream
=
TRUE
;
...
...
@@ -1727,7 +1727,7 @@ xb_get_one_option(int optid,
xtrabackup_compress_alg
=
"quicklz"
;
else
if
(
strcasecmp
(
argument
,
"quicklz"
))
{
msg
(
"Invalid --compress argument: %s
\n
"
,
argument
);
msg
(
"Invalid --compress argument: %s"
,
argument
);
return
1
;
}
xtrabackup_compress
=
TRUE
;
...
...
@@ -1808,8 +1808,8 @@ innodb_init_param(void)
if
(
n_shift
>=
12
&&
n_shift
<=
UNIV_PAGE_SIZE_SHIFT_MAX
)
{
srv_page_size_shift
=
n_shift
;
srv_page_size
=
1
<<
n_shift
;
msg
(
"InnoDB: The
universal
page size of the "
"database is set to %lu.
\n
"
,
srv_page_size
);
msg
(
"InnoDB: The page size of the "
"database is set to %lu."
,
srv_page_size
);
}
else
{
msg
(
"InnoDB: Error: invalid value of "
"innobase_page_size: %lld"
,
innobase_page_size
);
...
...
@@ -1824,12 +1824,12 @@ innodb_init_param(void)
if
(
sizeof
(
ulint
)
==
4
)
{
if
(
xtrabackup_use_memory
>
UINT_MAX32
)
{
msg
(
"mariabackup: use-memory can't be over 4GB"
" on 32-bit systems
\n
"
);
" on 32-bit systems"
);
}
if
(
innobase_buffer_pool_size
>
UINT_MAX32
)
{
msg
(
"mariabackup: innobase_buffer_pool_size can't be "
"over 4GB on 32-bit systems
\n
"
);
"over 4GB on 32-bit systems"
);
goto
error
;
}
...
...
@@ -1842,10 +1842,10 @@ innodb_init_param(void)
read from MySQL .cnf file */
if
(
xtrabackup_backup
)
{
msg
(
"mariabackup: using the following InnoDB configuration:
\n
"
);
msg
(
"mariabackup: using the following InnoDB configuration:"
);
}
else
{
msg
(
"mariabackup: using the following InnoDB configuration "
"for recovery:
\n
"
);
"for recovery:"
);
}
/*--------------- Data files -------------------------*/
...
...
@@ -1854,7 +1854,7 @@ innodb_init_param(void)
srv_data_home
=
(
xtrabackup_backup
&&
innobase_data_home_dir
?
innobase_data_home_dir
:
default_path
);
msg
(
"
mariabackup: innodb_data_home_dir = %s
\n
"
,
srv_data_home
);
msg
(
"
innodb_data_home_dir = %s
"
,
srv_data_home
);
/* Set default InnoDB data file size to 10 MB and let it be
auto-extending. Thus users can use InnoDB in >= 4.0 without having
...
...
@@ -1863,7 +1863,7 @@ innodb_init_param(void)
if
(
!
innobase_data_file_path
)
{
innobase_data_file_path
=
(
char
*
)
"ibdata1:10M:autoextend"
;
}
msg
(
"
mariabackup: innodb_data_file_path = %s
\n
"
,
msg
(
"
innodb_data_file_path = %s
"
,
innobase_data_file_path
);
/* This is the first time univ_page_size is used.
...
...
@@ -1890,13 +1890,12 @@ innodb_init_param(void)
if
(
xtrabackup_prepare
&&
xtrabackup_incremental_dir
)
{
srv_log_group_home_dir
=
xtrabackup_incremental_dir
;
}
msg
(
"
mariabackup: innodb_log_group_home_dir = %s
\n
"
,
msg
(
"
innodb_log_group_home_dir = %s
"
,
srv_log_group_home_dir
);
os_normalize_path
(
srv_log_group_home_dir
);
if
(
strchr
(
srv_log_group_home_dir
,
';'
))
{
msg
(
"syntax error in innodb_log_group_home_dir, "
);
goto
error
;
}
...
...
@@ -1963,8 +1962,7 @@ innodb_init_param(void)
#elif defined(LINUX_NATIVE_AIO)
if
(
srv_use_native_aio
)
{
ut_print_timestamp
(
stderr
);
msg
(
" InnoDB: Using Linux native AIO
\n
"
);
msg
(
"InnoDB: Using Linux native AIO"
);
}
#else
/* Currently native AIO is supported only on windows and linux
...
...
@@ -1991,7 +1989,7 @@ innodb_init_param(void)
return
(
FALSE
);
error:
msg
(
"
mariabackup: innodb_init_param(): Error occured.
\n
"
);
msg
(
"
innodb_init_param(): Error occured.
"
);
return
(
TRUE
);
}
...
...
@@ -1999,7 +1997,7 @@ static bool innodb_init()
{
dberr_t
err
=
innobase_start_or_create_for_mysql
();
if
(
err
!=
DB_SUCCESS
)
{
msg
(
"mariabackup: innodb_init() returned %d (%s).
\n
"
,
msg
(
"mariabackup: innodb_init() returned %d (%s)."
,
err
,
ut_strerr
(
err
));
innodb_shutdown
();
return
(
TRUE
);
...
...
@@ -2023,7 +2021,7 @@ xtrabackup_read_metadata(char *filename)
fp
=
fopen
(
filename
,
"r"
);
if
(
!
fp
)
{
msg
(
"
mariabackup: Error: cannot open %s
\n
"
,
filename
);
msg
(
"
Error: cannot open %s
"
,
filename
);
return
(
FALSE
);
}
...
...
@@ -2102,8 +2100,7 @@ xtrabackup_stream_metadata(ds_ctxt_t *ds_ctxt)
stream
=
ds_open
(
ds_ctxt
,
XTRABACKUP_METADATA_FILENAME
,
&
mystat
);
if
(
stream
==
NULL
)
{
msg
(
"mariabackup: Error: cannot open output stream "
"for %s
\n
"
,
XTRABACKUP_METADATA_FILENAME
);
msg
(
"Error: cannot open output stream for %s"
,
XTRABACKUP_METADATA_FILENAME
);
return
(
FALSE
);
}
...
...
@@ -2135,7 +2132,7 @@ xtrabackup_write_metadata(const char *filepath)
fp
=
fopen
(
filepath
,
"w"
);
if
(
!
fp
)
{
msg
(
"
mariabackup: Error: cannot open %s
\n
"
,
filepath
);
msg
(
"
Error: cannot open %s
"
,
filepath
);
return
(
FALSE
);
}
if
(
fwrite
(
buf
,
len
,
1
,
fp
)
<
1
)
{
...
...
@@ -2184,7 +2181,7 @@ xb_read_delta_metadata(const char *filepath, xb_delta_info_t *info)
fclose
(
fp
);
if
(
page_size
==
ULINT_UNDEFINED
)
{
msg
(
"
mariabackup: page_size is required in %s
\n
"
,
filepath
);
msg
(
"
page_size is required in %s
"
,
filepath
);
r
=
FALSE
;
}
else
{
info
->
page_size
=
page_size_t
(
zip_size
?
zip_size
:
page_size
,
...
...
@@ -2194,7 +2191,7 @@ xb_read_delta_metadata(const char *filepath, xb_delta_info_t *info)
if
(
info
->
space_id
==
ULINT_UNDEFINED
)
{
msg
(
"mariabackup: Warning: This backup was taken with XtraBackup 2.0.1 "
"or earlier, some DDL operations between full and incremental "
"backups may be handled incorrectly
\n
"
);
"backups may be handled incorrectly"
);
}
return
(
r
);
...
...
@@ -2227,8 +2224,7 @@ xb_write_delta_metadata(const char *filename, const xb_delta_info_t *info)
f
=
ds_open
(
ds_meta
,
filename
,
&
mystat
);
if
(
f
==
NULL
)
{
msg
(
"mariabackup: Error: cannot open output stream for %s
\n
"
,
filename
);
msg
(
"Error: Can't open output stream for %s"
,
filename
);
return
(
FALSE
);
}
...
...
@@ -2536,7 +2532,7 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
if
(
fil_is_user_tablespace_id
(
node
->
space
->
id
)
&&
check_if_skip_table
(
node_name
))
{
msg
(
"[%02u] Skipping %s.
\n
"
,
thread_n
,
node_name
);
msg
(
thread_n
,
"Skipping %s."
,
node_name
);
return
(
FALSE
);
}
...
...
@@ -2578,26 +2574,22 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
if
(
write_filter
->
init
!=
NULL
&&
!
write_filter
->
init
(
&
write_filt_ctxt
,
dst_name
,
&
cursor
))
{
msg
(
"[%02u] mariabackup: error: "
"failed to initialize page write filter.
\n
"
,
thread_n
);
msg
(
thread_n
,
"mariabackup: error: failed to initialize page write filter."
);
goto
error
;
}
dstfile
=
ds_open
(
ds_data
,
dst_name
,
&
cursor
.
statinfo
);
if
(
dstfile
==
NULL
)
{
msg
(
"[%02u] mariabackup: error: "
"cannot open the destination stream for %s
\n
"
,
thread_n
,
dst_name
);
msg
(
thread_n
,
"mariabackup: error: can't open the destination stream for %s"
,
dst_name
);
goto
error
;
}
action
=
xb_get_copy_action
();
if
(
xtrabackup_stream
)
{
msg
_ts
(
"[%02u] %s %s
\n
"
,
thread_n
,
action
,
node_path
);
msg
(
thread_n
,
"%s %s"
,
action
,
node_path
);
}
else
{
msg_ts
(
"[%02u] %s %s to %s
\n
"
,
thread_n
,
action
,
node_path
,
dstfile
->
path
);
msg
(
thread_n
,
"%s %s to %s"
,
action
,
node_path
,
dstfile
->
path
);
}
/* The main copy loop */
...
...
@@ -2621,7 +2613,7 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
pthread_mutex_unlock
(
&
backup_mutex
);
/* close */
msg
_ts
(
"[%02u] ...done
\n
"
,
thread_n
);
msg
(
thread_n
,
" ...done"
);
xb_fil_cur_close
(
&
cursor
);
if
(
ds_close
(
dstfile
))
{
rc
=
TRUE
;
...
...
@@ -2639,8 +2631,7 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
if
(
write_filter
&&
write_filter
->
deinit
)
{
write_filter
->
deinit
(
&
write_filt_ctxt
);;
}
msg
(
"[%02u] mariabackup: Error: "
"xtrabackup_copy_datafile() failed.
\n
"
,
thread_n
);
msg
(
thread_n
,
"mariabackup: xtrabackup_copy_datafile() failed."
);
return
(
TRUE
);
/*ERROR*/
skip:
...
...
@@ -2651,11 +2642,7 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
if
(
write_filter
&&
write_filter
->
deinit
)
{
write_filter
->
deinit
(
&
write_filt_ctxt
);
}
msg
(
"[%02u] mariabackup: Warning: We assume the "
"table was dropped during xtrabackup execution "
"and ignore the file.
\n
"
,
thread_n
);
msg
(
"[%02u] mariabackup: Warning: skipping tablespace %s.
\n
"
,
thread_n
,
node_name
);
msg
(
thread_n
,
"Warning: We assume the table was dropped during xtrabackup execution and ignore the tablespace %s"
,
node_name
);
return
(
FALSE
);
}
...
...
@@ -2680,9 +2667,8 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
&&
scanned_checkpoint
-
checkpoint
>=
0x80000000UL
)
{
/* Garbage from a log buffer flush which was made
before the most recent database recovery */
msg
(
"mariabackup: checkpoint wrap: "
LSN_PF
",%zx,%zx
\n
"
,
scanned_lsn
,
scanned_checkpoint
,
checkpoint
);
msg
(
0
,
"checkpoint wrap: "
LSN_PF
",%zx,%zx"
,
scanned_lsn
,
scanned_checkpoint
,
checkpoint
);
break
;
}
...
...
@@ -2703,8 +2689,7 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
>=
OS_FILE_LOG_BLOCK_SIZE
-
LOG_BLOCK_TRL_SIZE
||
data_len
<=
LOG_BLOCK_HDR_SIZE
)
{
/* We got a garbage block (abrupt end of the log). */
msg
(
"mariabackup: garbage block: "
LSN_PF
",%zu
\n
"
,
scanned_lsn
,
data_len
);
msg
(
0
,
"garbage block: "
LSN_PF
",%zu"
,
scanned_lsn
,
data_len
);
break
;
}
else
{
/* We got a partial block (abrupt end of the log). */
...
...
@@ -2715,7 +2700,7 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
if
(
more_data
&&
recv_parse_log_recs
(
0
,
STORE_NO
,
false
))
{
msg
(
"
mariabackup: copying the log failed
\n
"
);
msg
(
"
Error: copying the log failed
"
);
return
(
0
);
}
...
...
@@ -2734,8 +2719,7 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
}
if
(
ds_write
(
dst_log_file
,
log_sys
->
buf
,
write_size
))
{
msg
(
"mariabackup: Error: "
"write to logfile failed
\n
"
);
msg
(
"Error: write to logfile failed
\n
"
);
return
(
0
);
}
}
...
...
@@ -2772,7 +2756,7 @@ static bool xtrabackup_copy_logfile(bool last = false)
||
lsn
!=
start_lsn
)
{
break
;
}
msg
(
"Retrying read of log at LSN="
LSN_PF
"
\n
"
,
lsn
);
msg
(
"Retrying read of log at LSN="
LSN_PF
,
lsn
);
my_sleep
(
1000
);
}
...
...
@@ -2782,15 +2766,14 @@ static bool xtrabackup_copy_logfile(bool last = false)
log_mutex_exit
();
if
(
!
start_lsn
)
{
msg
(
"mariabackup: Error: xtrabackup_copy_logfile()"
" failed.
\n
"
);
msg
(
"Error: xtrabackup_copy_logfile() failed."
);
exit
(
EXIT_FAILURE
);
}
}
while
(
start_lsn
==
end_lsn
);
ut_ad
(
start_lsn
==
log_sys
->
log
.
scanned_lsn
);
msg
_ts
(
">> log scanned up to ("
LSN_PF
")
\n
"
,
start_lsn
);
msg
(
">> log scanned up to ("
LSN_PF
")
"
,
start_lsn
);
/* update global variable*/
pthread_mutex_lock
(
&
backup_mutex
);
...
...
@@ -2899,7 +2882,7 @@ static void dbug_mariabackup_event(const char *event,const char *key)
}
char
*
sql
=
getenv
(
envvar
);
if
(
sql
)
{
msg
(
"dbug_mariabackup_event : executing '%s'
\n
"
,
sql
);
msg
(
"dbug_mariabackup_event : executing '%s'"
,
sql
);
xb_mysql_query
(
mysql_connection
,
sql
,
false
,
true
);
}
...
...
@@ -2930,14 +2913,10 @@ data_copy_thread_func(
debug_sync_point
(
"data_copy_thread_func"
);
while
((
node
=
datafiles_iter_next
(
ctxt
->
it
))
!=
NULL
)
{
DBUG_MARIABACKUP_EVENT
(
"before_copy"
,
node
->
space
->
name
);
/* copy the datafile */
if
(
xtrabackup_copy_datafile
(
node
,
num
))
{
msg
(
"[%02u] mariabackup: Error: "
"failed to copy datafile.
\n
"
,
num
);
msg
(
num
,
"mariabackup: Error: failed to copy datafile."
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3115,7 +3094,7 @@ xb_load_single_table_tablespace(
Datafile
*
file
=
xb_new_datafile
(
name
,
is_remote
);
if
(
file
->
open_read_only
(
true
)
!=
DB_SUCCESS
)
{
msg
(
"Can't open datafile %s
\n
"
,
name
);
msg
(
"Can't open datafile %s"
,
name
);
ut_free
(
name
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3318,7 +3297,7 @@ static dberr_t xb_assign_undo_space_start()
OS_FILE_OPEN
,
OS_FILE_NORMAL
,
OS_DATA_FILE
,
true
,
&
ret
);
if
(
!
ret
)
{
msg
(
"
mariabackup: Error in opening %s
\n
"
,
srv_sys_space
.
first_datafile
()
->
filepath
());
msg
(
"
Error opening %s
"
,
srv_sys_space
.
first_datafile
()
->
filepath
());
return
DB_ERROR
;
}
...
...
@@ -3328,7 +3307,7 @@ static dberr_t xb_assign_undo_space_start()
retry:
if
(
!
os_file_read
(
IORequestRead
,
file
,
page
,
TRX_SYS_PAGE_NO
*
UNIV_PAGE_SIZE
,
UNIV_PAGE_SIZE
))
{
msg
(
"
mariabackup: Reading TRX_SYS page failed.
\n
"
);
msg
(
"
Reading TRX_SYS page failed.
"
);
error
=
DB_ERROR
;
goto
func_exit
;
}
...
...
@@ -3386,8 +3365,7 @@ xb_load_tablespaces()
/* create_new_db must not be true. */
if
(
err
!=
DB_SUCCESS
||
create_new_db
)
{
msg
(
"mariabackup: could not find data files at the "
"specified datadir
\n
"
);
msg
(
"Could not find data files at the specified datadir"
);
return
(
DB_ERROR
);
}
...
...
@@ -3402,7 +3380,7 @@ xb_load_tablespaces()
}
if
(
err
!=
DB_SUCCESS
)
{
msg
(
"
mariabackup:
Could not open data files.
\n
"
);
msg
(
"Could not open data files.
\n
"
);
return
(
err
);
}
...
...
@@ -3424,7 +3402,7 @@ xb_load_tablespaces()
srv_undo_tablespaces_init(), because fil_is_user_tablespace_id() *
relies on srv_undo_tablespaces_open to be properly initialized */
msg
(
"mariabackup: Generating a list of tablespaces
\n
"
);
msg
(
"mariabackup: Generating a list of tablespaces"
);
err
=
enumerate_ibd_files
(
xb_load_single_table_tablespace
);
if
(
err
!=
DB_SUCCESS
)
{
...
...
@@ -3527,12 +3505,12 @@ xb_validate_name(
/* perform only basic validation. validate length and
path symbols */
if
(
len
>
NAME_LEN
)
{
msg
(
"mariabackup: name `%s` is too long.
\n
"
,
name
);
msg
(
"mariabackup: name `%s` is too long."
,
name
);
exit
(
EXIT_FAILURE
);
}
p
=
strpbrk
(
name
,
"/
\\
~"
);
if
(
p
&&
(
uint
)
(
p
-
name
)
<
NAME_LEN
)
{
msg
(
"mariabackup: name `%s` is not valid.
\n
"
,
name
);
msg
(
"mariabackup: name `%s` is not valid."
,
name
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -3611,7 +3589,7 @@ xb_register_table(
const
char
*
name
)
/*!< in: name of table */
{
if
(
strchr
(
name
,
'.'
)
==
NULL
)
{
msg
(
"mariabackup: `%s` is not fully qualified name.
\n
"
,
name
);
msg
(
"mariabackup: `%s` is not fully qualified name."
,
name
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3633,7 +3611,7 @@ xb_add_regex_to_list(
if
(
ret
!=
0
)
{
regerror
(
ret
,
&
compiled_regex
,
errbuf
,
sizeof
(
errbuf
));
msg
(
"mariabackup: error: %s regcomp(%s): %s
\n
"
,
msg
(
"mariabackup: error: %s regcomp(%s): %s"
,
error_context
,
regex
,
errbuf
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3702,7 +3680,7 @@ xb_load_list_file(
/* read and store the filenames */
fp
=
fopen
(
filename
,
"r"
);
if
(
!
fp
)
{
msg
(
"mariabackup: cannot open %s
\n
"
,
msg
(
"mariabackup: cannot open %s"
,
filename
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -3965,11 +3943,11 @@ static bool xtrabackup_backup_low()
}
metadata_to_lsn
=
mach_read_from_8
(
log_sys
->
checkpoint_buf
+
LOG_CHECKPOINT_LSN
);
msg
(
"
mariabackup:
The latest check point"
" (for incremental): '"
LSN_PF
"'
\n
"
,
msg
(
"The latest check point"
" (for incremental): '"
LSN_PF
"'"
,
metadata_to_lsn
);
}
else
{
msg
(
"
mariabackup: Error: recv_find_max_checkpoint() failed.
\n
"
);
msg
(
"
Error: recv_find_max_checkpoint() failed.
"
);
}
log_mutex_exit
();
}
...
...
@@ -3999,7 +3977,7 @@ static bool xtrabackup_backup_low()
metadata_last_lsn
=
log_copy_scanned_lsn
;
if
(
!
xtrabackup_stream_metadata
(
ds_meta
))
{
msg
(
"
mariabackup: Error: failed to stream metadata.
\n
"
);
msg
(
"
Error: failed to stream metadata.
"
);
return
false
;
}
if
(
xtrabackup_extra_lsndir
)
{
...
...
@@ -4008,15 +3986,15 @@ static bool xtrabackup_backup_low()
sprintf
(
filename
,
"%s/%s"
,
xtrabackup_extra_lsndir
,
XTRABACKUP_METADATA_FILENAME
);
if
(
!
xtrabackup_write_metadata
(
filename
))
{
msg
(
"
mariabackup:
Error: failed to write metadata "
"to '%s'.
\n
"
,
filename
);
msg
(
"Error: failed to write metadata "
"to '%s'."
,
filename
);
return
false
;
}
sprintf
(
filename
,
"%s/%s"
,
xtrabackup_extra_lsndir
,
XTRABACKUP_INFO
);
if
(
!
write_xtrabackup_info
(
mysql_connection
,
filename
,
false
))
{
msg
(
"
mariabackup:
Error: failed to write info "
"to '%s'.
\n
"
,
filename
);
msg
(
"Error: failed to write info "
"to '%s'."
,
filename
);
return
false
;
}
}
...
...
@@ -4039,19 +4017,19 @@ xtrabackup_backup_func()
pthread_cond_init
(
&
scanned_lsn_cond
,
NULL
);
#ifdef USE_POSIX_FADVISE
msg
(
"
mariabackup: uses posix_fadvise().
\n
"
);
msg
(
"
uses posix_fadvise().
"
);
#endif
/* cd to datadir */
if
(
my_setwd
(
mysql_real_data_home
,
MYF
(
MY_WME
)))
{
msg
(
"m
ariabackup: cannot my_setwd %s
\n
"
,
mysql_real_data_home
);
msg
(
"m
y_setwd() failed , %s
"
,
mysql_real_data_home
);
return
(
false
);
}
msg
(
"
mariabackup: cd to %s
\n
"
,
mysql_real_data_home
);
msg
(
"
cd to %s
"
,
mysql_real_data_home
);
encryption_plugin_backup_init
(
mysql_connection
);
msg
(
"
mariabackup: open files limit requested %u, set to %u
\n
"
,
msg
(
"
open files limit requested %u, set to %u
"
,
(
uint
)
xb_open_files_limit
,
xb_set_max_open_files
(
xb_open_files_limit
));
...
...
@@ -4066,12 +4044,6 @@ xtrabackup_backup_func()
log_file_op
=
backup_file_op
;
metadata_to_lsn
=
0
;
if
(
xb_close_files
)
msg
(
"mariabackup: warning: close-files specified. Use it "
"at your own risk. If there are DDL operations like table DROP TABLE "
"or RENAME TABLE during the backup, inconsistent backup will be "
"produced.
\n
"
);
/* initialize components */
if
(
innodb_init_param
())
{
fail:
...
...
@@ -4100,21 +4072,21 @@ xtrabackup_backup_func()
}
else
if
(
0
==
ut_strcmp
(
srv_file_flush_method_str
,
"O_DIRECT"
))
{
srv_file_flush_method
=
SRV_O_DIRECT
;
msg
(
"
mariabackup: using O_DIRECT
\n
"
);
msg
(
"
using O_DIRECT
"
);
}
else
if
(
0
==
ut_strcmp
(
srv_file_flush_method_str
,
"littlesync"
))
{
srv_file_flush_method
=
SRV_LITTLESYNC
;
}
else
if
(
0
==
ut_strcmp
(
srv_file_flush_method_str
,
"nosync"
))
{
srv_file_flush_method
=
SRV_NOSYNC
;
}
else
if
(
0
==
ut_strcmp
(
srv_file_flush_method_str
,
"ALL_O_DIRECT"
))
{
srv_file_flush_method
=
SRV_ALL_O_DIRECT_FSYNC
;
msg
(
"
mariabackup: using ALL_O_DIRECT
\n
"
);
msg
(
"
using ALL_O_DIRECT
"
);
}
else
if
(
0
==
ut_strcmp
(
srv_file_flush_method_str
,
"O_DIRECT_NO_FSYNC"
))
{
srv_file_flush_method
=
SRV_O_DIRECT_NO_FSYNC
;
msg
(
"
mariabackup: using O_DIRECT_NO_FSYNC
\n
"
);
msg
(
"
using O_DIRECT_NO_FSYNC
"
);
}
else
{
msg
(
"
mariabackup:
Unrecognized value %s for "
"innodb_flush_method
\n
"
,
srv_file_flush_method_str
);
msg
(
"Unrecognized value %s for "
"innodb_flush_method"
,
srv_file_flush_method_str
);
goto
fail
;
}
...
...
@@ -4179,7 +4151,7 @@ xtrabackup_backup_func()
if
(
xtrabackup_extra_lsndir
&&!
my_stat
(
xtrabackup_extra_lsndir
,
&
stat_info
,
MYF
(
0
))
&&
(
my_mkdir
(
xtrabackup_extra_lsndir
,
0777
,
MYF
(
0
))
<
0
))
{
msg
(
"
mariabackup:
Error: cannot mkdir %d: %s
\n
"
,
msg
(
"Error: cannot mkdir %d: %s
\n
"
,
my_errno
,
xtrabackup_extra_lsndir
);
goto
fail
;
}
...
...
@@ -4187,7 +4159,7 @@ xtrabackup_backup_func()
/* create target dir if not exist */
if
(
!
xtrabackup_stream_str
&&
!
my_stat
(
xtrabackup_target_dir
,
&
stat_info
,
MYF
(
0
))
&&
(
my_mkdir
(
xtrabackup_target_dir
,
0777
,
MYF
(
0
))
<
0
)){
msg
(
"
mariabackup:
Error: cannot mkdir %d: %s
\n
"
,
msg
(
"Error: cannot mkdir %d: %s
\n
"
,
my_errno
,
xtrabackup_target_dir
);
goto
fail
;
}
...
...
@@ -4214,8 +4186,8 @@ xtrabackup_backup_func()
if
(
log_sys
->
log
.
format
==
0
)
{
old_format:
msg
(
"
mariabackup:
Error: cannot process redo log"
" before MariaDB 10.2.2
\n
"
);
msg
(
"Error: cannot process redo log"
" before MariaDB 10.2.2"
);
log_mutex_exit
();
goto
log_fail
;
}
...
...
@@ -4254,8 +4226,8 @@ xtrabackup_backup_func()
memset
(
&
stat_info
,
0
,
sizeof
(
MY_STAT
));
dst_log_file
=
ds_open
(
ds_redo
,
"ib_logfile0"
,
&
stat_info
);
if
(
dst_log_file
==
NULL
)
{
msg
(
"
mariabackup: e
rror: failed to open the target stream for "
"'ib_logfile0'.
\n
"
);
msg
(
"
§
rror: failed to open the target stream for "
"'ib_logfile0'."
);
goto
fail
;
}
...
...
@@ -4274,7 +4246,7 @@ xtrabackup_backup_func()
/* Write the log header. */
if
(
ds_write
(
dst_log_file
,
log_hdr
,
sizeof
log_hdr
))
{
log_write_fail:
msg
(
"
mariabackup: error: write to logfile failed
\n
"
);
msg
(
"
error: write to logfile failed
"
);
goto
fail
;
}
/* Adjust the checkpoint page. */
...
...
@@ -4309,8 +4281,8 @@ xtrabackup_backup_func()
/* Populate fil_system with tablespaces to copy */
err
=
xb_load_tablespaces
();
if
(
err
!=
DB_SUCCESS
)
{
msg
(
"m
ariabackup:
error: xb_load_tablespaces() failed with"
" error %s.
\n
"
,
ut_strerr
(
err
));
msg
(
"merror: xb_load_tablespaces() failed with"
" error %s."
,
ut_strerr
(
err
));
fail_before_log_copying_thread_start:
log_copying_running
=
false
;
goto
fail
;
...
...
@@ -4339,7 +4311,7 @@ xtrabackup_backup_func()
if
(
xtrabackup_parallel
>
1
)
{
msg
(
"mariabackup: Starting %u threads for parallel data "
"files transfer
\n
"
,
xtrabackup_parallel
);
"files transfer"
,
xtrabackup_parallel
);
}
if
(
opt_lock_ddl_per_table
)
{
...
...
@@ -4353,7 +4325,7 @@ xtrabackup_backup_func()
datafiles_iter_t
*
it
=
datafiles_iter_new
(
fil_system
);
if
(
it
==
NULL
)
{
msg
(
"mariabackup: Error: datafiles_iter_new() failed.
\n
"
);
msg
(
"mariabackup: Error: datafiles_iter_new() failed."
);
goto
fail
;
}
...
...
@@ -4414,16 +4386,16 @@ xtrabackup_backup_func()
}
xtrabackup_destroy_datasinks
();
msg
(
"
mariabackup:
Redo log (from LSN "
LSN_PF
" to "
LSN_PF
") was copied.
\n
"
,
checkpoint_lsn_start
,
log_copy_scanned_lsn
);
msg
(
"Redo log (from LSN "
LSN_PF
" to "
LSN_PF
") was copied."
,
checkpoint_lsn_start
,
log_copy_scanned_lsn
);
xb_filters_free
();
xb_data_files_close
();
/* Make sure that the latest checkpoint was included */
if
(
metadata_to_lsn
>
log_copy_scanned_lsn
)
{
msg
(
"
mariabackup: e
rror: failed to copy enough redo log ("
"LSN="
LSN_PF
"; checkpoint LSN="
LSN_PF
").
\n
"
,
msg
(
"
E
rror: failed to copy enough redo log ("
"LSN="
LSN_PF
"; checkpoint LSN="
LSN_PF
")."
,
log_copy_scanned_lsn
,
metadata_to_lsn
);
goto
fail
;
}
...
...
@@ -4576,7 +4548,7 @@ void backup_fix_ddl(void)
const
char
*
dbname
=
buf
;
char
*
p
=
strchr
(
buf
,
'/'
);
if
(
p
==
0
)
{
msg
(
"Unexpected tablespace %s filename %s
\n
"
,
space_name
,
name
.
c_str
());
msg
(
"Unexpected tablespace %s filename %s"
,
space_name
,
name
.
c_str
());
ut_a
(
0
);
}
ut_a
(
p
);
...
...
@@ -4595,16 +4567,6 @@ void backup_fix_ddl(void)
continue
;
std
::
string
dest_name
(
node
->
space
->
name
);
dest_name
.
append
(
".new"
);
#if 0
bool do_full_copy = ddl_tracker.optimized_ddl.find(n->space->id) != ddl_tracker.optimized_ddl.end();
if (do_full_copy) {
msg(
"Performing a full copy of the tablespace %s, because optimized (without redo logging) DDL operation"
"ran during backup. You can use set innodb_log_optimize_ddl=OFF to improve backup performance"
"in the future.\n",
n->space->name);
}
#endif
xtrabackup_copy_datafile
(
node
,
0
,
dest_name
.
c_str
()
/*, do_full_copy ? ULONGLONG_MAX:UNIV_PAGE_SIZE */
);
}
...
...
@@ -4659,14 +4621,14 @@ xb_space_create_file(
*
file
=
os_file_create_simple_no_error_handling
(
0
,
path
,
OS_FILE_CREATE
,
OS_FILE_READ_WRITE
,
false
,
&
ret
);
if
(
!
ret
)
{
msg
(
"
mariabackup: cannot create file %s
\n
"
,
path
);
msg
(
"
Can't create file %s
"
,
path
);
return
ret
;
}
ret
=
os_file_set_size
(
path
,
*
file
,
FIL_IBD_FILE_INITIAL_SIZE
*
UNIV_PAGE_SIZE
);
if
(
!
ret
)
{
msg
(
"mariabackup: cannot set size for file %s
\n
"
,
path
);
msg
(
"mariabackup: cannot set size for file %s"
,
path
);
os_file_close
(
*
file
);
os_file_delete
(
0
,
path
);
return
ret
;
...
...
@@ -4710,7 +4672,7 @@ xb_space_create_file(
free
(
buf
);
if
(
!
ret
)
{
msg
(
"mariabackup: could not write the first page to %s
\n
"
,
msg
(
"mariabackup: could not write the first page to %s"
,
path
);
os_file_close
(
*
file
);
os_file_delete
(
0
,
path
);
...
...
@@ -4771,7 +4733,7 @@ xb_delta_open_matching_space(
/* Create the database directory if it doesn't exist yet */
if
(
!
os_file_create_directory
(
dest_dir
,
FALSE
))
{
msg
(
"mariabackup: error: cannot create dir %s
\n
"
,
dest_dir
);
msg
(
"mariabackup: error: cannot create dir %s"
,
dest_dir
);
return
file
;
}
...
...
@@ -4818,7 +4780,7 @@ xb_delta_open_matching_space(
snprintf
(
tmpname
,
FN_REFLEN
,
"%s/xtrabackup_tmp_#"
ULINTPF
,
dbname
,
fil_space
->
id
);
msg
(
"mariabackup: Renaming %s to %s.ibd
\n
"
,
msg
(
"mariabackup: Renaming %s to %s.ibd"
,
fil_space
->
name
,
tmpname
);
if
(
!
fil_rename_tablespace
(
...
...
@@ -4826,7 +4788,7 @@ xb_delta_open_matching_space(
fil_space
->
chain
.
start
->
name
,
tmpname
,
NULL
))
{
msg
(
"mariabackup: Cannot rename %s to %s
\n
"
,
msg
(
"mariabackup: Cannot rename %s to %s"
,
fil_space
->
name
,
tmpname
);
goto
exit
;
}
...
...
@@ -4847,7 +4809,7 @@ xb_delta_open_matching_space(
strncpy
(
tmpname
,
dest_space_name
,
FN_REFLEN
);
msg
(
"mariabackup: Renaming %s to %s
\n
"
,
msg
(
"mariabackup: Renaming %s to %s"
,
fil_space
->
name
,
dest_space_name
);
if
(
!
fil_rename_tablespace
(
fil_space
->
id
,
...
...
@@ -4855,7 +4817,7 @@ xb_delta_open_matching_space(
tmpname
,
NULL
))
{
msg
(
"mariabackup: Cannot rename %s to %s
\n
"
,
msg
(
"mariabackup: Cannot rename %s to %s"
,
fil_space
->
name
,
dest_space_name
);
goto
exit
;
}
...
...
@@ -4883,8 +4845,7 @@ xb_delta_open_matching_space(
*
success
=
xb_space_create_file
(
real_name
,
info
.
space_id
,
flags
,
&
file
);
}
else
{
msg
(
"mariabackup: Cannot create tablespace %s
\n
"
,
dest_space_name
);
msg
(
"Can't create tablespace %s
\n
"
,
dest_space_name
);
}
goto
exit
;
...
...
@@ -4954,12 +4915,12 @@ xtrabackup_apply_delta(
page_size
=
info
.
page_size
.
physical
();
page_size_shift
=
get_bit_shift
(
page_size
);
msg
(
"
mariabackup: page size for %s is %zu bytes
\n
"
,
msg
(
"
page size for %s is %zu bytes
"
,
src_path
,
page_size
);
if
(
page_size_shift
<
10
||
page_size_shift
>
UNIV_PAGE_SIZE_SHIFT_MAX
)
{
msg
(
"
mariabackup:
error: invalid value of page_size "
"(%zu bytes) read from %s
\n
"
,
page_size
,
meta_path
);
msg
(
"error: invalid value of page_size "
"(%zu bytes) read from %s"
,
page_size
,
meta_path
);
goto
error
;
}
...
...
@@ -4968,7 +4929,7 @@ xtrabackup_apply_delta(
OS_FILE_OPEN
,
OS_FILE_READ_WRITE
,
false
,
&
success
);
if
(
!
success
)
{
os_file_get_last_error
(
TRUE
);
msg
(
"
mariabackup: error: cannot open %s
\n
"
,
src_path
);
msg
(
"
error: can't open %s
"
,
src_path
);
goto
error
;
}
...
...
@@ -4978,7 +4939,7 @@ xtrabackup_apply_delta(
dbname
,
space_name
,
info
,
dst_path
,
sizeof
(
dst_path
),
&
success
);
if
(
!
success
)
{
msg
(
"
mariabackup: error: cannot open %s
\n
"
,
dst_path
);
msg
(
"
error: can't open %s
"
,
dst_path
);
goto
error
;
}
...
...
@@ -4991,7 +4952,7 @@ xtrabackup_apply_delta(
(
ut_align
(
incremental_buffer_base
,
page_size
));
msg
(
"Applying %s to %s...
\n
"
,
src_path
,
dst_path
);
msg
(
"Applying %s to %s..."
,
src_path
,
dst_path
);
while
(
!
last_buffer
)
{
ulint
cluster_header
;
...
...
@@ -5014,8 +4975,8 @@ xtrabackup_apply_delta(
last_buffer
=
TRUE
;
break
;
default:
msg
(
"
mariabackup:
error: %s seems not "
".delta file.
\n
"
,
src_path
);
msg
(
"error: %s seems not "
".delta file."
,
src_path
);
goto
error
;
}
...
...
@@ -5114,7 +5075,7 @@ xtrabackup_apply_delta(
os_file_close
(
src_file
);
if
(
dst_file
!=
OS_FILE_CLOSED
)
os_file_close
(
dst_file
);
msg
(
"
mariabackup:
Error: xtrabackup_apply_delta(): "
msg
(
"Error: xtrabackup_apply_delta(): "
"failed to apply %s to %s.
\n
"
,
src_path
,
dst_path
);
return
FALSE
;
}
...
...
@@ -5132,7 +5093,7 @@ std::string change_extension(std::string filename, std::string new_ext) {
static
void
rename_file
(
const
char
*
from
,
const
char
*
to
)
{
msg
(
"Renaming %s to %s
\n
"
,
from
,
to
);
if
(
my_rename
(
from
,
to
,
MY_WME
))
{
msg
(
"Can
no
t rename %s to %s errno %d"
,
from
,
to
,
errno
);
msg
(
"Can
'
t rename %s to %s errno %d"
,
from
,
to
,
errno
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -5154,7 +5115,7 @@ typedef ibool (*handle_datadir_entry_func_t)(
/** Rename, and replace destination file, if exists */
static
void
rename_force
(
const
char
*
from
,
const
char
*
to
)
{
if
(
access
(
to
,
R_OK
)
==
0
)
{
msg
(
"Removing %s
\n
"
,
to
);
msg
(
"Removing %s"
,
to
);
if
(
my_delete
(
to
,
MYF
(
MY_WME
)))
{
msg
(
"Can't remove %s, errno %d"
,
to
,
errno
);
exit
(
EXIT_FAILURE
);
...
...
@@ -5274,16 +5235,14 @@ xb_process_datadir(
os_file_closedir
(
dbdir
);
}
else
{
msg
(
"mariabackup: Cannot open dir %s
\n
"
,
path
);
msg
(
"Can't open dir %s"
,
path
);
}
/* single table tablespaces */
dir
=
os_file_opendir
(
path
,
FALSE
);
if
(
dir
==
NULL
)
{
msg
(
"mariabackup: Cannot open dir %s
\n
"
,
path
);
msg
(
"Can't open dir %s"
,
path
);
}
ret
=
fil_file_readdir_next_file
(
&
err
,
path
,
dir
,
...
...
@@ -5379,7 +5338,7 @@ store_binlog_info(const char* filename, const char* name, ulonglong pos)
FILE
*
fp
=
fopen
(
filename
,
"w"
);
if
(
!
fp
)
{
msg
(
"mariabackup: failed to open '%s'
\n
"
,
filename
);
msg
(
"mariabackup: failed to open '%s'"
,
filename
);
return
(
false
);
}
...
...
@@ -5400,7 +5359,7 @@ static std::string read_file_as_string(const std::string file) {
char
content
[
FN_REFLEN
];
FILE
*
f
=
fopen
(
file
.
c_str
(),
"r"
);
if
(
!
f
)
{
msg
(
"Can not open %s
\n
"
,
file
.
c_str
());
msg
(
"Can not open %s"
,
file
.
c_str
());
}
size_t
len
=
fread
(
content
,
1
,
FN_REFLEN
,
f
);
fclose
(
f
);
...
...
@@ -5497,11 +5456,10 @@ xtrabackup_prepare_func(char** argv)
if
(
my_setwd
(
xtrabackup_real_target_dir
,
MYF
(
MY_WME
)))
{
msg
(
"mariabackup: cannot my_setwd %s
\n
"
,
xtrabackup_real_target_dir
);
msg
(
"can't my_setwd %s"
,
xtrabackup_real_target_dir
);
return
(
false
);
}
msg
(
"
mariabackup: cd to %s
\n
"
,
xtrabackup_real_target_dir
);
msg
(
"
cd to %s
"
,
xtrabackup_real_target_dir
);
fil_path_to_mysql_datadir
=
"."
;
...
...
@@ -5537,32 +5495,31 @@ xtrabackup_prepare_func(char** argv)
XTRABACKUP_METADATA_FILENAME
);
if
(
!
xtrabackup_read_metadata
(
metadata_path
))
{
msg
(
"
mariabackup:
Error: failed to read metadata from '%s'
\n
"
,
msg
(
"Error: failed to read metadata from '%s'
\n
"
,
metadata_path
);
return
(
false
);
}
if
(
!
strcmp
(
metadata_type
,
"full-backuped"
))
{
if
(
xtrabackup_incremental
)
{
msg
(
"
mariabackup:
error: applying incremental backup "
"needs a prepared target.
\n
"
);
msg
(
"error: applying incremental backup "
"needs a prepared target."
);
return
(
false
);
}
msg
(
"
mariabackup: This target seems to be not prepared yet.
\n
"
);
msg
(
"
This target seems to be not prepared yet.
"
);
}
else
if
(
!
strcmp
(
metadata_type
,
"log-applied"
))
{
msg
(
"
mariabackup: This target seems to be already prepared.
\n
"
);
msg
(
"
This target seems to be already prepared.
"
);
}
else
{
msg
(
"
mariabackup: This target does not have correct metadata.
\n
"
);
msg
(
"
This target does not have correct metadata.
"
);
return
(
false
);
}
bool
ok
=
!
xtrabackup_incremental
||
metadata_to_lsn
==
incremental_lsn
;
if
(
!
ok
)
{
msg
(
"mariabackup: error: This incremental backup seems "
"not to be proper for the target.
\n
"
"mariabackup: Check 'to_lsn' of the target and "
"'from_lsn' of the incremental.
\n
"
);
msg
(
"error: This incremental backup seems "
"not to be proper for the target. Check 'to_lsn' of the target and "
"'from_lsn' of the incremental."
);
return
(
false
);
}
...
...
@@ -5639,9 +5596,10 @@ xtrabackup_prepare_func(char** argv)
srv_n_write_io_threads
=
4
;
}
msg
(
"mariabackup: Starting InnoDB instance for recovery.
\n
"
"mariabackup: Using %lld bytes for buffer pool "
"(set by --use-memory parameter)
\n
"
,
xtrabackup_use_memory
);
msg
(
"Starting InnoDB instance for recovery."
);
msg
(
"mariabackup: Using %lld bytes for buffer pool "
"(set by --use-memory parameter)"
,
xtrabackup_use_memory
);
srv_max_buf_pool_modified_pct
=
(
double
)
max_buf_pool_modified_pct
;
...
...
@@ -5669,7 +5627,7 @@ xtrabackup_prepare_func(char** argv)
const
char
*
name
=
reinterpret_cast
<
const
char
*>
(
TRX_SYS_MYSQL_LOG_INFO
+
TRX_SYS_MYSQL_LOG_NAME
+
sys_header
);
msg
(
"Last binlog file %s, position %llu
\n
"
,
name
,
pos
);
msg
(
"Last binlog file %s, position %llu"
,
name
,
pos
);
/* output to xtrabackup_binlog_pos_innodb and
(if backup_safe_binlog_info was available on
...
...
@@ -5692,7 +5650,7 @@ xtrabackup_prepare_func(char** argv)
&&
srv_start_lsn
<
target_lsn
)
{
msg
(
"mariabackup: error: "
"The log was only applied up to LSN "
LSN_PF
", instead of "
LSN_PF
"
\n
"
,
", instead of "
LSN_PF
,
srv_start_lsn
,
target_lsn
);
ok
=
false
;
}
...
...
@@ -5720,13 +5678,13 @@ xtrabackup_prepare_func(char** argv)
if
(
!
xtrabackup_write_metadata
(
filename
))
{
msg
(
"mariabackup: Error: failed to write metadata "
"to '%s'
\n
"
,
filename
);
"to '%s'"
,
filename
);
ok
=
false
;
}
else
if
(
xtrabackup_extra_lsndir
)
{
sprintf
(
filename
,
"%s/%s"
,
xtrabackup_extra_lsndir
,
XTRABACKUP_METADATA_FILENAME
);
if
(
!
xtrabackup_write_metadata
(
filename
))
{
msg
(
"mariabackup: Error: failed to write "
"metadata to '%s'
\n
"
,
filename
);
"metadata to '%s'"
,
filename
);
ok
=
false
;
}
}
...
...
@@ -5841,7 +5799,7 @@ int check_privilege(
{
if
(
!
has_privilege
(
granted_priv
,
required
,
target_database
,
target_table
))
{
msg
(
"%s: missing required privilege %s on %s.%s
\n
"
,
msg
(
"%s: missing required privilege %s on %s.%s"
,
(
error
==
PRIVILEGE_ERROR
?
"Error"
:
"Warning"
),
required
,
target_database
,
target_table
);
return
error
;
...
...
@@ -5930,7 +5888,7 @@ xb_init()
&&
!
opt_safe_slave_backup
)
{
msg
(
"Error: --slave-info is used with --no-lock but "
"without --safe-slave-backup. The binlog position "
"cannot be consistent with the backup data.
\n
"
);
"cannot be consistent with the backup data."
);
return
(
false
);
}
...
...
@@ -6156,7 +6114,7 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
msg
(
"mariabackup: Error: --defaults-file "
"must be specified first on the command "
"line
\n
"
);
"line"
);
exit
(
EXIT_FAILURE
);
}
if
(
optend
-
argv
[
i
]
==
21
&&
...
...
@@ -6213,7 +6171,7 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
if
(
!
server_option
)
{
msg
(
"mariabackup: Error:"
" unknown argument: '%s'
\n
"
,
opt
);
" unknown argument: '%s'"
,
opt
);
exit
(
EXIT_FAILURE
);
}
}
...
...
@@ -6313,7 +6271,7 @@ int main(int argc, char **argv)
mysql_mutex_destroy
(
&
LOCK_error_log
);
if
(
status
==
EXIT_SUCCESS
)
{
msg
_ts
(
"completed OK!
\n
"
);
msg
(
"completed OK!
"
);
}
return
status
;
...
...
@@ -6331,7 +6289,7 @@ static int main_low(char** argv)
&&
!
strcmp
(
mysql_data_home
,
"./"
))
{
if
(
!
xtrabackup_print_param
)
usage
();
msg
(
"
\n
mariabackup: Error: Please set parameter 'datadir'
\n
"
);
msg
(
"
mariabackup: Error: Please set parameter 'datadir'
"
);
return
(
EXIT_FAILURE
);
}
...
...
@@ -6402,7 +6360,7 @@ static int main_low(char** argv)
if
(
error
)
{
msg
(
"mariabackup: value '%s' may be wrong format for "
"incremental option.
\n
"
,
xtrabackup_incremental
);
"incremental option."
,
xtrabackup_incremental
);
return
(
EXIT_FAILURE
);
}
}
else
if
(
xtrabackup_backup
&&
xtrabackup_incremental_basedir
)
{
...
...
@@ -6412,7 +6370,7 @@ static int main_low(char** argv)
if
(
!
xtrabackup_read_metadata
(
filename
))
{
msg
(
"mariabackup: error: failed to read metadata from "
"%s
\n
"
,
filename
);
"%s"
,
filename
);
return
(
EXIT_FAILURE
);
}
...
...
@@ -6425,7 +6383,7 @@ static int main_low(char** argv)
if
(
!
xtrabackup_read_metadata
(
filename
))
{
msg
(
"mariabackup: error: failed to read metadata from "
"%s
\n
"
,
filename
);
"%s"
,
filename
);
return
(
EXIT_FAILURE
);
}
...
...
@@ -6443,7 +6401,7 @@ static int main_low(char** argv)
}
if
(
xtrabackup_stream
&&
!
xtrabackup_backup
)
{
msg
(
"Warning: --stream parameter is ignored, it only works together with --backup.
\n
"
);
msg
(
"Warning: --stream parameter is ignored, it only works together with --backup."
);
}
if
(
!
xb_init
())
{
...
...
@@ -6458,13 +6416,13 @@ static int main_low(char** argv)
print_version
();
if
(
xtrabackup_incremental
)
{
msg
(
"incremental backup from "
LSN_PF
" is enabled.
\n
"
,
msg
(
"incremental backup from "
LSN_PF
" is enabled."
,
incremental_lsn
);
}
if
(
xtrabackup_export
&&
innobase_file_per_table
==
FALSE
)
{
msg
(
"mariabackup: auto-enabling --innodb-file-per-table due to "
"the --export option
\n
"
);
"the --export option"
);
innobase_file_per_table
=
TRUE
;
}
...
...
extra/mariabackup/xtrabackup.h
View file @
a8a27e65
...
...
@@ -71,7 +71,7 @@ extern char *xtrabackup_databases_file;
extern
char
*
xtrabackup_tables_exclude
;
extern
char
*
xtrabackup_databases_exclude
;
extern
ibool
xtrabackup_compress
;
extern
uint
xtrabackup_compress
;
extern
my_bool
xtrabackup_backup
;
extern
my_bool
xtrabackup_prepare
;
...
...
@@ -86,14 +86,10 @@ extern int xtrabackup_parallel;
extern
my_bool
xb_close_files
;
extern
const
char
*
xtrabackup_compress_alg
;
#ifdef __cplusplus
extern
"C"
{
#endif
extern
uint
xtrabackup_compress_threads
;
extern
ulonglong
xtrabackup_compress_chunk_size
;
#ifdef __cplusplus
}
#endif
extern
uint
xtrabackup_compress_threads
;
extern
ulonglong
xtrabackup_compress_chunk_size
;
extern
my_bool
xtrabackup_export
;
extern
char
*
xtrabackup_extra_lsndir
;
extern
ulint
xtrabackup_log_copy_interval
;
...
...
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