mirror of
https://github.com/MariaDB/server.git
synced 2025-08-29 00:08:14 +03:00
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.
74 lines
1.5 KiB
Plaintext
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
|