AVISO: leia com atenção, entenda & confie
Aqui vamos nós:
Passo 01) Obtenha o endereço IP privado do S1 (escreva em algum lugar)
$ ip addr show
Passo 02) Obtenha o nome de usuário e senha para replicação de S1
cd /var/lib/mysql
cat master.info
O nome de usuário e a senha estão em texto simples neste arquivo
Passo 03) Execute isto em S1
mysql> GRANT REPLICATION SLAVE ON *.* TO '<username from Step 02>'@'%' IDENTIFIED BY '<password from Step 02>';
Passo 04) No S1, adicione isto ao /etc/my.cnf
[mysqld]
log-slave-updates
log-bin=mysql-bin
Passo 05) No S1, execute este
service mysql restart
Isso cria logs binários em S1
Passo 06) No M1, execute isto na linha de comando
$ mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400);" &
$ sleep 15
$ mysql -u... -p... -e"SHOW PROCESSLIST;" | grep "SELECT SLEEP(86400)" | awk '{print $1}'
Isso colocará o mestre em estado de animação suspensa. A posição do registro binário no mestre irá parar de se mover. Isso dará a todos os Escravos a chance de todos pararem no mesmo lugar na Replicação. A última linha irá ecoar o ProcessID do MySQL que está segurando o bloqueio de leitura. NÃO PERCA ESTE NÚMERO !!!
Passo 07) Execute isto em S1
mysql> RESET MASTER; SHOW MASTER STATUS;
Isso limpará todos os logs binários em S1 e mostrará o log binário e a posição de S1. O arquivo de log deve ser chamado de mysql-bin.000001
. A posição irá variar com base na versão do MySQL. Para o MySQL 5.5, é 107. Para o MySQL 5.1, é 106. Para qualquer versão anterior ao MySQL 5.1, é 98.
Passo 08) Execute isto em S2 e S3
mysql> STOP SLAVE;
Passo 09) No M1, execute isto:
mysql> KILL <ProcessID From Step 06>;
Isso liberará todos os INSERTs, UPDATEs e DELETEs pendentes.
Passo 10) Execute isto em S2 e S3
mysql> CHANGE MASTER TO
MASTER_HOST='<ip address of S1 from Step 01>',
MASTER_PORT=3306,
MASTER_USER='<username from Step 02>',
MASTER_PASSWORD='<password from Step 02>',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
Lembre-se, usuário MASTER_LOG_POS=106
para o MySQL 5.1 ou MASTER_LOG_POS=98
para o MySQL 5.0 e vice-versa.
Isto irá apontar a replicação de S2 e S3 para iniciar a partir de S1.
Passo 11) Execute isto em S2
mysql> START SLAVE; SELECT SLEEP(5); SHOW SLAVE STATUS\G
Isto irá iniciar a replicação, pausar 5 segundos e mostrar o status do escravo. Se Slave_IO_Running=Yes
e Slave_SQL_Running=Yes
, tudo deu certo.
Passo 12) Repita o Passo 11 para S3
É isso.
CAVEAT
O tempo de inatividade começa com o passo 06 e termina com o passo 09