summaryrefslogtreecommitdiff
path: root/client/mysqlbinlog.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/mysqlbinlog.cc')
-rw-r--r--client/mysqlbinlog.cc58
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)