Aqui está o que eu gostaria de fazer: 1. pendurar um escravo em meu mestre de produção. 2. interrompa a replicação 3. ajuste alguns tipos de dados e crie alguns índices no escravo (sem mods de dados) 4. reinicie a replicação 5. uma vez que o escravo estiver atualizado, bloqueie o banco de dados e troque o escravo e o mestre
-o objetivo, obv. é não ter tempo de inatividade significativo ao fazer algumas alterações que levarão tempo (tabela 200G sendo modificada) - deve ser possível, porque as alterações DDL que estou fazendo têm a ver com a redução de tipos de dados e adição de restrições - nada que altere o real valores de dados. - como a replicação do GTID é baseada em linha, não sei se a replicação vai engasgar tentando inserir, por exemplo, IDs de 11 dígitos em uma coluna de ID de 5 dígitos, mesmo que os valores estejam dentro do intervalo.
Você descreveu uma maneira comum de fazer alterações DDL. Sim, deve funcionar. Mas... por favor, descreva melhor a alteração do tipo de dados.
Se você está alterando uma COLUMN que é INT SIGNED atual para ser um SMALLINT SIGNED, e se nenhum dos valores for maior que 32767, não deve haver problema. Se você estiver mudando de ASSINADO para NÃO ASSINADO e nenhum dos números for negativo, não há problema. Etc. Em geral, se o valor antigo caber no novo tipo de dados, tudo bem. Se não couber, algo será perdido. 1 milhão em um SMALLINT UNSIGNED provavelmente se tornará 65535.
Quanto ao aplicativo, como o mysql sabe que está obtendo um id de 11 dígitos ? Ele vê um número de alguns dígitos e o coloca no tamanho de destino.
Faça
SHOW WARNINGS;
depois do DDL.