A replicação no MySQL baseia-se no fato do servidor master manter o registro de todas as alterações de seus bancos de dados (atualizações, deleções, etc) no log binário. (see Secção 4.10.4, “O Log Binário”). Cada servidor slave recebe do master consultas salvas no log binário, para que assim execute as mesmas consultas nos seus dados replicados.
É muito importante entender que o log binário é simplesmente um registro iniciando a partir de um ponto fixo no tempo (o momento que você habilitou o log binário). Quaisquer slaves que você configure necessitará de cópias do banco de dados do seu master como eles existiam no momento em que o log binário foi habilitado no master. Se você iniciar os slaves com dados diferentes daqueles do master quando o log binário foi iniciado, seus slaves falharão.
A seguinte tabela indica a compatibilidade de replicação master/slave entre diferentes versões do MySQL.
Master | Master | Master | Master | ||
3.23.33 e posterior | 4.0.0 | 4.0.1 | 4.0.3 e posterior | ||
Slave | 3.23.33 e posterior | sim | não | não | não |
Slave | 4.0.0 | não | sim | não | não |
Slave | 4.0.1 | sim | não | sim | não |
Slave | 4.0.3 e posterior | sim | não | não | sim |
Como regra geral, sempre é recomendado usar versões MySQL recentes, porque as capacidades de replicação estão sendo continuamente melhoradas. Com relação a versão 4.0, recomendamos usar a mesma versão para o master e o slave, com exceção de que o 4.0.2 não é recomandado para replicação.
Note qye quando você atualiza um mestre do MySQL 3.23 para o MySQL 4.0 (ou 4.1) você não deve reiniciar a replicação usando o log binário antigo da versão 3.23, porque isto infelizmente deixa o slave 4.0 confuso. A atualização pode seguramente feita deste modo, assumindo que você tenha uma mestre 3.23 para atualizar e você tenha slaves 4.0:
Bloqueie todas as atualizações no mestre (FLUSH
TABLES WITH READ LOCK
).
Espere até que todos os slaves tenham buscados todas as
alterações pelo master (use SHOW MASTER
STATUS
no master, e SELECT
MASTER_POS_WAIT()
nos slaves). Então execute
STOP SLAVE
nos slaves.
Finalize o MySQL no master e atualize o master para o MySQL 4.0.
Reinicie o MySQL no master. Grave o nome
<name>
do log binário mais
recentemente criado do master. Você pode obter o nome dos
arquivos executando SHOW MASTER STATUS
no
master. Então envie estes comando em cada slave:
mysql>CHANGE MASTER TO MASTER_LOG_FILE='<name>', MASTER_LOG_POS=4;
mysql>START SLAVE;
Se você também deve atualizar seus slaves da versão 3.23 para 4.0, você deve primeiro atualizar seus slaves: Desligue cada um, atualize-os e os reinicie. Então atualize o master como descrito.
A partir da versão 4.0.0, pode se usar LOAD DATA FROM
MASTER
para configurar um escrao. Esteja certo que
LOAD DATA FROM MASTER
funciona atualmente
apenas se todas as tabelas no master são do tipo
MyISAM
. Além disso, estas instrução irão
adquirir lock global de leitura, assim nenhuma escrita será
possível enquanto as tabelas estão sendo transferidas do
master. Quando implementarmos hot backup de tabelas sem lock (no
MySQL 5.0), este lock global de leitura não será mais
necessário.
Devido a estas limitações, recomendamos que você só use
LOAD DATA FROM MASTER
se o conjunto de dados
de master for relativamente pequeno, ou se um lock de leitura
prolongado no master é aceitável. Enquanto a velocidade atual
do LOAD DATA FROM MASTER
pode variar de
sistema para sistema, uma boa regra do dedão de quanto tempo
será necessário é considerar 1 segundo por 1 MB do arquivo de
dados. Você ficará próximo da estimativa se tanto o master
quanto o slave forem equivalentes a um Pentium 700 Mhz e
estiverem conectado a uma rede de 100 MBits/s. É claro, esta é
apenas uma estimativa grosseira da ordem de magnitude.
Uma vez que o slave foi configurado corretamente e está em
execução, ele simplesmente conectará ao master e esperará
por atualizações nos processos. Se o master for desligado ou o
slave perder conectividade com seu master, ele tentará conectar
periodicamente até conseguir reconectar e constinuar as
atualizações. O intervalo de tentativa é controlado pela
opção --master-connect-retry
. O padrão é 60
segundos.
Cada slave mantêm registro de onde parou. O servidor master não tem conhecimento de quandos slaves existem ou quais estão atualizados em um determinado momento.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.