diff options
Diffstat (limited to 'sql/Attic/mybinlogdump.cc')
-rw-r--r-- | sql/Attic/mybinlogdump.cc | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/sql/Attic/mybinlogdump.cc b/sql/Attic/mybinlogdump.cc new file mode 100644 index 00000000000..b94943c9847 --- /dev/null +++ b/sql/Attic/mybinlogdump.cc @@ -0,0 +1,138 @@ + +#undef MYSQL_SERVER +#include "log_event.h" +#include <getopt.h> +#include <config.h> + +static const char* default_dbug_option = "d:t:o,/tmp/mybinlogdump.trace"; + +static struct option long_options[] = +{ + {"short-form", no_argument, 0, 's'}, + {"offset", required_argument,0, 'o'}, + {"help", no_argument, 0, 'h'}, +#ifndef DBUG_OFF + {"debug", required_argument, 0, '#'} +#endif +}; + +static bool short_form = 0; +static int offset = 0; + +static int parse_args(int argc, char** argv); +static void dump_log_entries(); +static void die(char* fmt, ...); + +static void die(char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + fprintf(stderr, "ERROR: "); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); + exit(1); +} + +static void usage() +{ + fprintf(stderr, "Usage: mybinlogdump [options] log-files\n"); + fprintf(stderr, "Options:\n\ + -s,--short-form - just show the queries, no extra info\n\ + -o,--offset=N - skip the first N entries\n\ + -h,--help - this message\n"); +} + +static int parse_args(int *argc, char*** argv) +{ + int c, opt_index = 0; + + while((c = getopt_long(*argc, *argv, "so:#:h", long_options, + &opt_index)) != EOF) + { + switch(c) + { +#ifndef DBUG_OFF + case '#': + DBUG_PUSH(optarg ? optarg : default_dbug_option); + break; +#endif + case 's': + short_form = 1; + break; + + case 'o': + offset = atoi(optarg); + break; + + case 'h': + default: + usage(); + exit(0); + + } + } + + (*argc)-=optind; + (*argv)+=optind; + + + return 0; +} + + +static void dump_log_entries(const char* logname) +{ + FILE* file; + int rec_count = 0; + + if(logname && logname[0] != '-') + file = my_fopen(logname, O_RDONLY, MYF(MY_WME)); + else + file = stdin; + + if(!file) + die("Could not open log file %s", logname); + while(1) + { + Log_event* ev = Log_event::read_log_event(file); + if(!ev) + if(!feof(file)) + die("Could not read entry at offset %ld : Error in log format or \ +read error", + my_ftell(file, MYF(MY_WME))); + else + break; + + if(rec_count >= offset) + ev->print(stdout, short_form); + rec_count++; + delete ev; + } + + my_fclose(file, MYF(MY_WME)); +} + +int main(int argc, char** argv) +{ + MY_INIT(argv[0]); + parse_args(&argc, (char***)&argv); + + if(!argc) + { + usage(); + return -1; + } + + while(--argc >= 0) + { + dump_log_entries(*(argv++)); + } + + return 0; +} + + + + + |