Commit 84e43992 authored by unknown's avatar unknown
Browse files

Bug#15942 (RBR ignored --binlog_ignore_db and tries to map table on slave for writes):

  Added code to do the filtering (seems to have gone away).


sql/handler.cc:
  Filtering based on the database for the table.
parent 2c88b639
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
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;
CREATE DATABASE test_ignore;
**** On Master ****
SHOW DATABASES;
Database
information_schema
mysql
test
test_ignore
USE test;
CREATE TABLE t1 (a INT, b INT);
SHOW TABLES;
Tables_in_test
t1
INSERT INTO t1 VALUES (1,1), (2,2);
USE test_ignore;
CREATE TABLE t2 (a INT, b INT);
SHOW TABLES;
Tables_in_test_ignore
t2
INSERT INTO t2 VALUES (3,3), (4,4);
SHOW BINLOG EVENTS;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
master-bin.000001	4	Format_desc	1	102	Server ver: 5.1.5-alpha-debug-log, Binlog ver: 4
master-bin.000001	102	Query	1	195	use `test`; CREATE TABLE t1 (a INT, b INT)
master-bin.000001	195	Table_map	1	235	test.t1
master-bin.000001	235	Write_rows	1	282	
**** On Slave ****
SHOW DATABASES;
Database
information_schema
mysql
test
USE test;
SHOW TABLES;
Tables_in_test
t1
USE test_ignore;
ERROR 42000: Unknown database 'test_ignore'
DROP DATABASE test_ignore;
+1 −0
Original line number Diff line number Diff line
--binlog_ignore_db=test_ignore;
+31 −0
Original line number Diff line number Diff line
--source include/have_row_based.inc
--source include/have_binlog_format_row.inc
--source include/master-slave.inc

# Bug#15942 (RBR ignores --binlog_ignore_db and tries to map to table
# on slave for writes)

CREATE DATABASE test_ignore;      # --binlog_ignore_db=mysqltest_ignore

--echo **** On Master ****
SHOW DATABASES;
USE test;
CREATE TABLE t1 (a INT, b INT);
SHOW TABLES;
INSERT INTO t1 VALUES (1,1), (2,2);
USE test_ignore;
CREATE TABLE t2 (a INT, b INT);
SHOW TABLES;
INSERT INTO t2 VALUES (3,3), (4,4);
SHOW BINLOG EVENTS;
sync_slave_with_master;
--echo **** On Slave ****
SHOW DATABASES;
USE test;
SHOW TABLES;
--error 1049
USE test_ignore;

connection master;
DROP DATABASE test_ignore;
sync_slave_with_master;
+3 −2
Original line number Diff line number Diff line
@@ -2797,7 +2797,7 @@ bool ha_show_status(THD *thd, handlerton *db_type, enum ha_stat_type stat)
  - Row-based replication is on
  - It is not a temporary table
  - The binlog is enabled
  - The table shall be binlogged (binlog_*_db rules) [Seems disabled /Matz]
  - The table shall be binlogged (binlog_*_db rules)
*/

#ifdef HAVE_ROW_BASED_REPLICATION
@@ -2806,7 +2806,8 @@ static bool check_table_binlog_row_based(THD *thd, TABLE *table)
  return
    binlog_row_based &&
    thd && (thd->options & OPTION_BIN_LOG) &&
    (table->s->tmp_table == NO_TMP_TABLE);
    (table->s->tmp_table == NO_TMP_TABLE) &&
    binlog_filter->db_ok(table->s->db.str);
}

template<class RowsEventT> int binlog_log_row(TABLE* table,