diff options
Diffstat (limited to 'client/mysqlbinlog.cc')
-rw-r--r-- | client/mysqlbinlog.cc | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index fd31ab6694e..870145e35e0 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -98,6 +98,8 @@ static const char *output_prefix= ""; static char **defaults_argv= 0; static MEM_ROOT glob_root; +static uint protocol_to_force= MYSQL_PROTOCOL_DEFAULT; + #ifndef DBUG_OFF static const char *default_dbug_option = "d:t:o,/tmp/mariadb-binlog.trace"; const char *current_dbug_option= default_dbug_option; @@ -1959,9 +1961,13 @@ static my_time_t convert_str_to_timestamp(const char* str) extern "C" my_bool -get_one_option(const struct my_option *opt, const char *argument, const char *) +get_one_option(const struct my_option *opt, const char *argument, const char *filename) { bool tty_password=0; + + /* Track when protocol is set via CLI to not force overrides */ + static my_bool ignore_protocol_override = FALSE; + switch (opt->id) { #ifndef DBUG_OFF case '#': @@ -2011,6 +2017,14 @@ get_one_option(const struct my_option *opt, const char *argument, const char *) sf_leaking_memory= 1; /* no memory leak reports here */ die(); } + + /* Specification of protocol via CLI trumps implicit overrides */ + if (filename[0] == '\0') + { + ignore_protocol_override = TRUE; + protocol_to_force = MYSQL_PROTOCOL_DEFAULT; + } + break; #ifdef WHEN_FLASHBACK_REVIEW_READY case opt_flashback_review: @@ -2092,6 +2106,38 @@ get_one_option(const struct my_option *opt, const char *argument, const char *) case OPT_PRINT_ROW_EVENT_POSITIONS: print_row_event_positions_used= 1; break; + case 'P': + /* If port and socket are set, fall back to default behavior */ + if (protocol_to_force == SOCKET_PROTOCOL_TO_FORCE) + { + ignore_protocol_override = TRUE; + protocol_to_force = MYSQL_PROTOCOL_DEFAULT; + } + + /* If port is set via CLI, try to force protocol to TCP */ + if (filename[0] == '\0' && + !ignore_protocol_override && + protocol_to_force == MYSQL_PROTOCOL_DEFAULT) + { + protocol_to_force = MYSQL_PROTOCOL_TCP; + } + break; + case 'S': + /* If port and socket are set, fall back to default behavior */ + if (protocol_to_force == MYSQL_PROTOCOL_TCP) + { + ignore_protocol_override = TRUE; + protocol_to_force = MYSQL_PROTOCOL_DEFAULT; + } + + /* Prioritize socket if set via command line */ + if (filename[0] == '\0' && + !ignore_protocol_override && + protocol_to_force == MYSQL_PROTOCOL_DEFAULT) + { + protocol_to_force = SOCKET_PROTOCOL_TO_FORCE; + } + break; case 'v': if (argument == disabled_my_option) verbose= 0; @@ -3049,6 +3095,9 @@ int main(int argc, char** argv) my_init_time(); // for time functions tzset(); // set tzname + /* We need to know if protocol-related options originate from CLI args */ + my_defaults_mark_files = TRUE; + load_defaults_or_exit("my", load_groups, &argc, &argv); defaults_argv= argv; @@ -3062,6 +3111,13 @@ int main(int argc, char** argv) parse_args(&argc, (char***)&argv); + /* Command line options override configured protocol */ + if (protocol_to_force > MYSQL_PROTOCOL_DEFAULT + && protocol_to_force != opt_protocol) + { + warn_protocol_override(host, &opt_protocol, protocol_to_force); + } + if (!argc || opt_version) { if (!opt_version) |