diff options
author | unknown <jani@hynda.mysql.fi> | 2001-04-26 01:12:51 +0300 |
---|---|---|
committer | unknown <jani@hynda.mysql.fi> | 2001-04-26 01:12:51 +0300 |
commit | b74fd76c270820f75e95a004b3a776d2ecda7e1e (patch) | |
tree | 94e4d119f1f72d6b9f5590ec68b4020807d675a9 | |
parent | 651030923462ac4620dbf0f1db1ca213b99aff25 (diff) | |
download | mariadb-git-b74fd76c270820f75e95a004b3a776d2ecda7e1e.tar.gz |
Added a new option --result-file to mysqlbinlog.
sql/mysqlbinlog.cc:
Added option -r.
-rw-r--r-- | sql/mysqlbinlog.cc | 66 |
1 files changed, 38 insertions, 28 deletions
diff --git a/sql/mysqlbinlog.cc b/sql/mysqlbinlog.cc index 05ff166cd49..f0a9692cc2d 100644 --- a/sql/mysqlbinlog.cc +++ b/sql/mysqlbinlog.cc @@ -38,6 +38,7 @@ ulong mysqld_net_retry_count = 10L; ulong net_read_timeout= NET_READ_TIMEOUT; ulong net_write_timeout= NET_WRITE_TIMEOUT; uint test_flags = 0; +FILE *result_file; #ifndef DBUG_OFF static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace"; @@ -46,19 +47,19 @@ static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace"; static struct option long_options[] = { #ifndef DBUG_OFF - {"debug", optional_argument, 0, '#'}, + {"debug", optional_argument, 0, '#'}, #endif - {"help", no_argument, 0, '?'}, - {"host", required_argument, 0, 'h'}, - {"offset", required_argument, 0, 'o'}, - {"password", required_argument, 0, 'p'}, - {"port", required_argument, 0, 'P'}, - {"position", required_argument, 0, 'j'}, - {"short-form", no_argument, 0, 's'}, - {"table", required_argument, 0, 't'}, - {"user", required_argument, 0, 'u'}, - {"version", no_argument, 0, 'V'}, - {0, 0, 0, 0} + {"help", no_argument, 0, '?'}, + {"host", required_argument, 0, 'h'}, + {"offset", required_argument, 0, 'o'}, + {"password", required_argument, 0, 'p'}, + {"port", required_argument, 0, 'P'}, + {"position", required_argument, 0, 'j'}, + {"result-file", required_argument, 0, 'r'}, + {"short-form", no_argument, 0, 's'}, + {"table", required_argument, 0, 't'}, + {"user", required_argument, 0, 'u'}, + {"version", no_argument, 0, 'V'}, }; void sql_print_error(const char *format,...); @@ -107,7 +108,7 @@ static void die(const char* fmt, ...) static void print_version() { - printf("%s Ver 1.2 for %s at %s\n",my_progname,SYSTEM_TYPE, MACHINE_TYPE); + printf("%s Ver 1.3 for %s at %s\n",my_progname,SYSTEM_TYPE, MACHINE_TYPE); } @@ -134,6 +135,7 @@ the mysql command line client\n\n"); -P, --port=port Use port to connect to the remove server\n\ -u, --user=username Connect to the remove server as username\n\ -p, --password=password Password to connect to remote server\n\ +-r, --result-file=file Direct output to a given file\n\ -j, --position=N Start reading the binlog at position N\n\ -t, --table=name Get raw table dump using COM_TABLE_DUMB\n\ -V, --version Print version and exit.\n\ @@ -164,17 +166,18 @@ static void dump_remote_file(NET* net, const char* fname) die("Failed reading a packet during the dump of %s ", fname); if(!short_form) - (void)my_fwrite(stdout, (byte*) net->read_pos, packet_len, MYF(0)); + (void)my_fwrite(result_file, (byte*) net->read_pos, packet_len,MYF(0)); } - fflush(stdout); + fflush(result_file); } static int parse_args(int *argc, char*** argv) { int c, opt_index = 0; - while((c = getopt_long(*argc, *argv, "so:#::h:j:u:p:P:t:?V", long_options, + result_file = stdout; + while((c = getopt_long(*argc, *argv, "so:#::h:j:u:p:P:r:t:?V", long_options, &opt_index)) != EOF) { switch(c) @@ -211,6 +214,11 @@ static int parse_args(int *argc, char*** argv) pass = my_strdup(optarg, MYF(0)); break; + case 'r': + if (!(result_file = my_fopen(optarg, O_WRONLY | O_BINARY, MYF(MY_WME)))) + exit(1); + break; + case 'u': use_remote = 1; user = my_strdup(optarg, MYF(0)); @@ -277,14 +285,14 @@ static void dump_remote_table(NET* net, const char* db, const char* table) die("Error sending the table dump command"); for(;;) - { - uint packet_len = my_net_read(net); - if(packet_len == 0) break; // end of file - if(packet_len == packet_error) - die("Error reading packet in table dump"); - my_fwrite(stdout, (byte*)net->read_pos, packet_len, MYF(MY_WME)); - fflush(stdout); - } + { + uint packet_len = my_net_read(net); + if(packet_len == 0) break; // end of file + if(packet_len == packet_error) + die("Error reading packet in table dump"); + my_fwrite(result_file, (byte*)net->read_pos, packet_len, MYF(MY_WME)); + fflush(result_file); + } } @@ -325,7 +333,7 @@ Unfortunately, no sweepstakes today, adjusted position to 4\n"); len - 1); if(ev) { - ev->print(stdout, short_form, last_db); + ev->print(result_file, short_form, last_db); if(ev->get_type_code() == LOAD_EVENT) dump_remote_file(net, ((Load_log_event*)ev)->fname); delete ev; @@ -352,7 +360,7 @@ static void dump_local_log_entries(const char* logname) } else { - if (init_io_cache(file, fileno(stdout), 0, READ_CACHE, (my_off_t) 0, + if (init_io_cache(file, fileno(result_file), 0, READ_CACHE, (my_off_t) 0, 0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE))) exit(1); if (position) @@ -398,9 +406,9 @@ Could not read entry at offset %s : Error in log format or read error", if (rec_count >= offset) { if (!short_form) - printf("# at %s\n",llstr(old_off,llbuff)); + fprintf(result_file, "# at %s\n",llstr(old_off,llbuff)); - ev->print(stdout, short_form, last_db); + ev->print(result_file, short_form, last_db); } rec_count++; delete ev; @@ -448,6 +456,8 @@ int main(int argc, char** argv) dump_log_entries(*(argv++)); } } + if (result_file != stdout) + my_fclose(result_file, MYF(0)); if (use_remote) mc_mysql_close(mysql); return 0; |