Commit d81d57d4 authored by lars@mysql.com's avatar lars@mysql.com

mysqlbinlog --hexdump augments each log entry with byte information

parent 5e70387f
......@@ -62,6 +62,7 @@ static const char *load_default_groups[]= { "mysqlbinlog","client",0 };
void sql_print_error(const char *format, ...);
static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0;
static bool opt_hexdump= 0;
static const char* database= 0;
static my_bool force_opt= 0, short_form= 0, remote_opt= 0;
static ulonglong offset = 0;
......@@ -523,11 +524,14 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
if (!short_form)
fprintf(result_file, "# at %s\n",llstr(pos,ll_buff));
/* Set pos to 0 if hexdump is disabled */
pos= (opt_hexdump ? pos : 0);
switch (ev_type) {
case QUERY_EVENT:
if (check_database(((Query_log_event*)ev)->db))
goto end;
ev->print(result_file, short_form, last_event_info);
ev->print(result_file, short_form, pos, last_event_info);
break;
case CREATE_FILE_EVENT:
{
......@@ -547,7 +551,8 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT'
below.
*/
ce->print(result_file, short_form, last_event_info, TRUE);
ce->print(result_file, short_form, pos, last_event_info, TRUE);
// If this binlog is not 3.23 ; why this test??
if (description_event->binlog_version >= 3)
{
......@@ -558,13 +563,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
break;
}
case APPEND_BLOCK_EVENT:
ev->print(result_file, short_form, last_event_info);
ev->print(result_file, short_form, pos, last_event_info);
if (load_processor.process((Append_block_log_event*) ev))
break; // Error
break;
case EXEC_LOAD_EVENT:
{
ev->print(result_file, short_form, last_event_info);
ev->print(result_file, short_form, pos, last_event_info);
Execute_load_log_event *exv= (Execute_load_log_event*)ev;
Create_file_log_event *ce= load_processor.grab_event(exv->file_id);
/*
......@@ -574,7 +579,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
*/
if (ce)
{
ce->print(result_file, short_form, last_event_info, TRUE);
ce->print(result_file, short_form, pos, last_event_info, TRUE);
my_free((char*)ce->fname,MYF(MY_WME));
delete ce;
}
......@@ -586,7 +591,7 @@ Create_file event for file_id: %u\n",exv->file_id);
case FORMAT_DESCRIPTION_EVENT:
delete description_event;
description_event= (Format_description_log_event*) ev;
ev->print(result_file, short_form, last_event_info);
ev->print(result_file, short_form, pos, last_event_info);
/*
We don't want this event to be deleted now, so let's hide it (I
(Guilhem) should later see if this triggers a non-serious Valgrind
......@@ -596,7 +601,7 @@ Create_file event for file_id: %u\n",exv->file_id);
ev= 0;
break;
case BEGIN_LOAD_QUERY_EVENT:
ev->print(result_file, short_form, last_event_info);
ev->print(result_file, short_form, pos, last_event_info);
load_processor.process((Begin_load_query_log_event*) ev);
break;
case EXECUTE_LOAD_QUERY_EVENT:
......@@ -613,7 +618,7 @@ Create_file event for file_id: %u\n",exv->file_id);
if (fname)
{
exlq->print(result_file, short_form, last_event_info, fname);
exlq->print(result_file, short_form, pos, last_event_info, fname);
my_free(fname, MYF(MY_WME));
}
else
......@@ -622,7 +627,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id);
break;
}
default:
ev->print(result_file, short_form, last_event_info);
ev->print(result_file, short_form, pos, last_event_info);
}
}
......@@ -669,6 +674,8 @@ static struct my_option my_long_options[] =
0, 0},
{"help", '?', "Display this help and exit.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"hexdump", 'H', "Augment output with hexadecimal and ascii data dump.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"host", 'h', "Get the binlog from server.", (gptr*) &host, (gptr*) &host,
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset,
......@@ -848,6 +855,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case 'd':
one_database = 1;
break;
case 'H':
opt_hexdump= 1;
break;
case 'p':
if (argument)
{
......
This diff is collapsed.
......@@ -589,9 +589,10 @@ class Log_event
static Log_event* read_log_event(IO_CACHE* file,
const Format_description_log_event *description_event);
/* print*() functions are used by mysqlbinlog */
virtual void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0) = 0;
virtual void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0) = 0;
void print_timestamp(FILE* file, time_t *ts = 0);
void print_header(FILE* file);
void print_header(FILE* file, my_off_t start_pos= 0);
#endif
static void *operator new(size_t size)
......@@ -751,8 +752,11 @@ class Query_log_event: public Log_event
uint32 q_len_arg);
#endif /* HAVE_REPLICATION */
#else
void print_query_header(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print_query_header(FILE* file, bool short_form= 0,
my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Query_log_event(const char* buf, uint event_len,
......@@ -806,7 +810,8 @@ class Slave_log_event: public Log_event
void pack_info(Protocol* protocol);
int exec_event(struct st_relay_log_info* rli);
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Slave_log_event(const char* buf, uint event_len);
......@@ -894,8 +899,10 @@ class Load_log_event: public Log_event
bool use_rli_only_for_errors);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info = 0);
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool commented);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info = 0);
void print(FILE* file, bool short_form, my_off_t start_pos,
LAST_EVENT_INFO* last_event_info, bool commented);
#endif
/*
......@@ -984,7 +991,8 @@ class Start_log_event_v3: public Log_event
#endif /* HAVE_REPLICATION */
#else
Start_log_event_v3() {}
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Start_log_event_v3(const char* buf,
......@@ -1079,7 +1087,8 @@ class Intvar_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Intvar_log_event(const char* buf, const Format_description_log_event* description_event);
......@@ -1120,7 +1129,8 @@ class Rand_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Rand_log_event(const char* buf, const Format_description_log_event* description_event);
......@@ -1157,7 +1167,8 @@ class Xid_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Xid_log_event(const char* buf, const Format_description_log_event* description_event);
......@@ -1199,7 +1210,8 @@ class User_var_log_event: public Log_event
void pack_info(Protocol* protocol);
int exec_event(struct st_relay_log_info* rli);
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
User_var_log_event(const char* buf, const Format_description_log_event* description_event);
......@@ -1225,7 +1237,8 @@ class Stop_log_event: public Log_event
{}
int exec_event(struct st_relay_log_info* rli);
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Stop_log_event(const char* buf, const Format_description_log_event* description_event):
......@@ -1264,7 +1277,8 @@ class Rotate_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Rotate_log_event(const char* buf, uint event_len,
......@@ -1317,8 +1331,10 @@ class Create_file_log_event: public Load_log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool enable_local);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form, my_off_t start_pos,
LAST_EVENT_INFO* last_event_info, bool enable_local);
#endif
Create_file_log_event(const char* buf, uint event_len,
......@@ -1385,7 +1401,8 @@ class Append_block_log_event: public Log_event
virtual int get_create_or_append() const;
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Append_block_log_event(const char* buf, uint event_len,
......@@ -1420,8 +1437,10 @@ class Delete_file_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool enable_local);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form, my_off_t start_pos,
LAST_EVENT_INFO* last_event_info, bool enable_local);
#endif
Delete_file_log_event(const char* buf, uint event_len,
......@@ -1456,7 +1475,8 @@ class Execute_load_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
#endif
Execute_load_log_event(const char* buf, uint event_len,
......@@ -1541,11 +1561,11 @@ class Execute_load_query_log_event: public Query_log_event
int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */
#else
void print(FILE* file, bool short_form = 0,
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
/* Prints the query as LOAD DATA LOCAL and with rewritten filename */
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info,
const char *local_fname);
void print(FILE* file, bool short_form, my_off_t start_pos,
LAST_EVENT_INFO* last_event_info, const char *local_fname);
#endif
Execute_load_query_log_event(const char* buf, uint event_len,
const Format_description_log_event *description_event);
......@@ -1574,7 +1594,8 @@ class Unknown_log_event: public Log_event
Log_event(buf, description_event)
{}
~Unknown_log_event() {}
void print(FILE* file, bool short_form= 0, LAST_EVENT_INFO* last_event_info= 0);
void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0,
LAST_EVENT_INFO* last_event_info= 0);
Log_event_type get_type_code() { return UNKNOWN_EVENT;}
bool is_valid() const { return 1; }
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment