summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jani@hynda.mysql.fi>2001-04-26 01:12:51 +0300
committerunknown <jani@hynda.mysql.fi>2001-04-26 01:12:51 +0300
commitb74fd76c270820f75e95a004b3a776d2ecda7e1e (patch)
tree94e4d119f1f72d6b9f5590ec68b4020807d675a9
parent651030923462ac4620dbf0f1db1ca213b99aff25 (diff)
downloadmariadb-git-b74fd76c270820f75e95a004b3a776d2ecda7e1e.tar.gz
Added a new option --result-file to mysqlbinlog.
sql/mysqlbinlog.cc: Added option -r.
-rw-r--r--sql/mysqlbinlog.cc66
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;