diff --git a/client/mysql.cc b/client/mysql.cc index 3de616ae407..be157f52d08 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2044,7 +2044,8 @@ static bool add_line(String &buffer,char *line,char *in_string, } #endif if (!*ml_comment && inchar == '\\' && - !(mysql.server_status & SERVER_STATUS_NO_BACKSLASH_ESCAPES)) + !(*in_string && + (mysql.server_status & SERVER_STATUS_NO_BACKSLASH_ESCAPES))) { // Found possbile one character command like \c diff --git a/mysql-test/suite/bugs/r/rpl_bug36391.result b/mysql-test/suite/bugs/r/rpl_bug36391.result new file mode 100644 index 00000000000..2d62837a87a --- /dev/null +++ b/mysql-test/suite/bugs/r/rpl_bug36391.result @@ -0,0 +1,17 @@ +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; +drop table if exists t1; +Warnings: +Note 1051 Unknown table 't1' +create table t1(id int); +show tables; +Tables_in_test +t1 +show master status; +File Position Binlog_Do_DB Binlog_Ignore_DB +master-bin.000001 278 +flush logs; diff --git a/mysql-test/suite/bugs/t/rpl_bug36391-master.opt b/mysql-test/suite/bugs/t/rpl_bug36391-master.opt new file mode 100644 index 00000000000..56273241f14 --- /dev/null +++ b/mysql-test/suite/bugs/t/rpl_bug36391-master.opt @@ -0,0 +1 @@ +--sql_mode=NO_BACKSLASH_ESCAPES diff --git a/mysql-test/suite/bugs/t/rpl_bug36391.test b/mysql-test/suite/bugs/t/rpl_bug36391.test new file mode 100644 index 00000000000..9f384304837 --- /dev/null +++ b/mysql-test/suite/bugs/t/rpl_bug36391.test @@ -0,0 +1,28 @@ +# +# BUG#36391 and BUG#38731 +# +# The fix for BUG#20103 "Escaping with backslash does not work as expected" +# was implemented too greedy though in that it not only changes the behavior +# of backslashes within strings but in general, so disabling command shortcuts +# like \G or \C (which in turn leads to BUG#36391: "mysqlbinlog creates invalid charset statements". +# +# The test executes simple commands that are stored in the binary log and +# re-execute them through the mysql client which should have to process +# some command shortcuts. The backslashes within strings is disabled in the file +# rpl_bug36391-master.opt by the option --sql_mode=NO_BACKSLASH_ESCAPES. +# +# + +--source include/master-slave.inc + +drop table if exists t1; + +create table t1(id int); + +show tables; + +show master status; + +flush logs; + +--exec $MYSQL_BINLOG $MYSQL_TEST_DIR/var/log/master-bin.000001 | $MYSQL test