1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-29 00:08:14 +03:00
Files
mariadb/mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test
Luis Soares 80f96fae63 BUG#47312: RBR: Disabling key on slave breaks replication:
HA_ERR_WRONG_INDEX
      
In RBR, disabling keys on slave table will break replication when
updating or deleting a record. When the slave thread tries to
find the row, by searching in the storage engine, it checks
whether the table has a key or not. If it has one, then the slave
thread uses it to search the record.
      
Nonetheless, the slave only checks whether the key exists or not,
it does not verify if it is active. Should the key be
disabled (eg, DBA has issued an ALTER TABLE ... DISABLE KEYS)
then it will result in error: HA_ERR_WRONG_INDEX.
      
This patch addresses this issue by making the slave thread also
check whether the key is active or not before actually using it.
2009-09-27 22:02:47 +01:00

74 lines
1.5 KiB
Plaintext

# BUG#47312: RBR: Disabling key on slave breaks replication:
# HA_ERR_WRONG_INDEX
#
# Description
# ===========
#
# This test case checks whether disabling a key on a slave breaks
# replication or not.
#
# Case #1, shows that while not using ALTER TABLE... DISABLE KEYS and
# the slave has no key defined while the master has one, replication
# won't break.
#
# Case #2, shows that before patch for BUG#47312, if defining key on
# slave table, and later disable it, replication would break. This
# has been fixed.
#
-- source include/master-slave.inc
-- source include/have_binlog_format_row.inc
#
# Case #1: master has key, but slave has not.
# Replication does not break.
#
SET SQL_LOG_BIN=0;
CREATE TABLE t (a int, b int, c int, key(b));
SET SQL_LOG_BIN=1;
-- connection slave
CREATE TABLE t (a int, b int, c int);
-- connection master
INSERT INTO t VALUES (1,2,4);
INSERT INTO t VALUES (4,3,4);
DELETE FROM t;
-- sync_slave_with_master
-- connection master
DROP TABLE t;
-- sync_slave_with_master
#
# Case #2: master has key, slave also has one,
# but it gets disabled sometime.
# Replication does not break anymore.
#
-- source include/master-slave-reset.inc
-- connection master
CREATE TABLE t (a int, b int, c int, key(b));
-- sync_slave_with_master
ALTER TABLE t DISABLE KEYS;
-- connection master
INSERT INTO t VALUES (1,2,4);
INSERT INTO t VALUES (4,3,4);
DELETE FROM t;
-- sync_slave_with_master
-- connection master
DROP TABLE t;
-- sync_slave_with_master