Tenho um Cluster Galera (v3) de produção com 3 nós MySQL (v5.7) rodando em modo multi-master. Preciso criar um novo índice (~16 GB) e soltar um índice antigo em uma tabela grande (112 milhões de linhas, ~20 GB de tamanho).
Como o Galera sincroniza instruções DDL, temo que criar um índice grande (~16 GB) possa paralisar a replicação ou causar um SST (State Snapshot Transfer). Planejo executar isso durante uma janela de manutenção, mas quero garantir a segurança da replicação.
Qual é a maneira mais segura de criar esse índice sem afetar o cluster?
Operações a serem realizadas:
Crie um novo índice:
CREATE INDEX index5 ON table_name (c3, c4);
Remova um índice existente (depois de garantir que o novo índice seja usado):
DROP INDEX index4 ON table_name;
Estrutura da tabela (simplificada):
CREATE TABLE table_name (
c1 char(36) NOT NULL,
c2 char(36) NOT NULL,
c3 varchar(100) DEFAULT NULL,
c4 char(36) DEFAULT NULL,
c5 longtext,
c6 datetime DEFAULT NULL,
c7 tinyint(1) DEFAULT '0',
PRIMARY KEY (c1),
KEY index1 (c3, c4),
KEY index2 (c2, c4, c3),
KEY index3 (c4, c3),
KEY index4 (c4, c3, c2)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;