mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
BUG#16698172-CANNOT DO POINT-IN-TIME RECOVERY FOR
SINGLE DATABASE; MYSQLBINLOG Problem: If last subevent inside a RBR event is skipped while replaying a binary log using mysqlbinlog with --database=... option, generated output is missing end marker('/*!*/;) for that RBR event. Thence causing syntax error while replaying the generated output. Fix: Append end marker ('/*!*/;) if the last subevent is getting skipped. Append end marker if the last subevent is getting skipped.
This commit is contained in:
@ -969,7 +969,11 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
/*
|
/*
|
||||||
end of statement check:
|
end of statement check:
|
||||||
i) destroy/free ignored maps
|
i) destroy/free ignored maps
|
||||||
ii) if skip event, flush cache now
|
ii) if skip event
|
||||||
|
a) since we are skipping the last event,
|
||||||
|
append END-MARKER(') to body cache (if required)
|
||||||
|
|
||||||
|
b) flush cache now
|
||||||
*/
|
*/
|
||||||
if (stmt_end)
|
if (stmt_end)
|
||||||
{
|
{
|
||||||
@ -991,6 +995,12 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
|
|||||||
*/
|
*/
|
||||||
if (skip_event)
|
if (skip_event)
|
||||||
{
|
{
|
||||||
|
// append END-MARKER(') with delimiter
|
||||||
|
IO_CACHE *const body_cache= &print_event_info->body_cache;
|
||||||
|
if (my_b_tell(body_cache))
|
||||||
|
my_b_printf(body_cache, "'%s\n", print_event_info->delimiter);
|
||||||
|
|
||||||
|
// flush cache
|
||||||
if ((copy_event_cache_to_file_and_reinit(&print_event_info->head_cache, result_file) ||
|
if ((copy_event_cache_to_file_and_reinit(&print_event_info->head_cache, result_file) ||
|
||||||
copy_event_cache_to_file_and_reinit(&print_event_info->body_cache, result_file)))
|
copy_event_cache_to_file_and_reinit(&print_event_info->body_cache, result_file)))
|
||||||
goto err;
|
goto err;
|
||||||
|
Reference in New Issue
Block a user